Является ли строка палиндром?
Задача
Определить, является ли строка палиндромом.
Палиндром – это число, слово или фраза, одинаково читающиеся в обоих направления.
Решение
Описание переменных:
s – строка;
f – флаг.
Алгоритм решения задачи:
- Брать очередной символ с начала строки и сравнивать его с противоположным.
- Если символы не равны, то выдать сообщение "не палиндром", изменить значение флага и остановить сравнение.
- Если значение флага не было изменено, то выдать сообщение "палиндром".
Программа на языке Паскаль:
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 нет функции…
Ответ на А как сделать, что бы… от Гость (не проверено)
Если в Pascal нет функции приведения всех букв к одному регистру, то тогда можно через разность между кодом маленькой и большой буквы.
Внутри первого if можно создать второй, где переменным присваиваются сравниваемые буквы, затем вычисляется разность. Если разность равна разности по кодировке между малой и большой буквой, то это одна и та же буква.
Upcase в помощь
Upcase в помощь
палиндром для чисел