Является ли строка палиндром?

Задача

Определить, является ли строка палиндромом.

Палиндром – это число, слово или фраза, одинаково читающиеся в обоих направления.

Решение

Описание переменных: 

s – строка;
f – флаг.

Алгоритм решения задачи: 

  1. Брать очередной символ с начала строки и сравнивать его с противоположным.
    1. Если символы не равны, то выдать сообщение "не палиндром", изменить значение флага и остановить сравнение.
  2. Если значение флага не было изменено, то выдать сообщение "палиндром".

Программа на языке Паскаль:

var
    s: string;
    f: boolean;
    len, i: byte;
 
begin
    write('String: ');
    readln(s);
    len := length(s);
 
    f := true;
 
    for i := 1 to len div 2 do
        if s[i] <> s[len-i+1] then begin
            writeln('No palindrome');
            f := false;
            break;
        end;
 
    if f = true then
        writeln('Palindrome');
end.

Пример выполнения 1:

String: banana
No palindrome

Пример выполнения 2:

String: banab
Palindrome

Усложненный вариант задачи: составьте программу, позволяющую определить, будет ли введенная строка палиндромом после удаления из нее всех пробелов.

var
    s: string;
    i,l: byte;
begin
    readln(s);
    l := length(s);
    if l < 2 then exit;
 
    i := 1;
    while i <= l do begin
        if s[i] = ' ' then begin
            delete(s,i,1);
            l := l - 1;
        end
        else
            i := i + 1;
    end;
    writeln(s);
    if l < 2 then exit;
 
    for i:=1 to l div 2 do 
        if s[i] <> s[l-i+1] then begin
            writeln('это не палиндром');
            exit;
        end;
    writeln('это палиндром');    
end.

Комментарии

Ответ на от Гость (не проверено)

Если в Pascal нет функции приведения всех букв к одному регистру, то тогда можно через разность между кодом маленькой и большой буквы.

Внутри первого if можно создать второй, где переменным присваиваются сравниваемые буквы, затем вычисляется разность. Если разность равна разности по кодировке между малой и большой буквой, то это одна и та же буква.

 

var
    n, m, p: word;
 
begin
    write('Enter number: ');
    readln(n);
 
    m := n;
    p := 0;
    while m > 0 do begin
        p := p * 10 + m mod 10;
        m := m div 10;
    end;
 
    if n = p then
        writeln('Palindrome')
    else
        writeln('Not palindrome');
 
readln;
end.

var
  n: integer;
  s, s1: string;
 
begin
  readln(s);
  for n := length(s) downto 1 do
  begin
    s1 := s1 + s[n];
  end;
  if s = s1 then write('Является палиндром.') else write('Не является палиндром.');
end.