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

Задача

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

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

Решение

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

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

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

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

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

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

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

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.