Определить является ли слово перевертышем - Pascal
Формулировка задачи:
Всем доброго времени суток . Прошу, кому не сложно, помочь начинающиму программисту решить задачу.
Заранее благодарю
Условия задачи:
Среди данных N слов найти все "перевертыши" - слова, одинаково читающиеся с обоих сторон.Реализовать нужно через процедуру, подпрограмма которой будет отвечать на вопрос : "Является ли слово перевертышем"
Итак, у меня есть код программы которая просто решает является выражение таковым или нет: program Arozaupalanalapuazora;
var s:string [40];
i:integer;
begin
writeln ('vvedite virajeniye:');
readln (s);
while pos(' ',s)>0 do delete (s,pos(' ',s),1);
i:=length(s) div 2;
while (i>0) and (s[i]=s[length (s)-i+1]) do dec(i);
if i=0 then writeln ('yavlyaetsta perevertishem') else writeln ('ne yavlyaetsa perevertishem');
readln
end.Решение задачи: «Определить является ли слово перевертышем»
textual
Листинг программы
const
ANSWER: Array[Boolean] Of String[17] = ('Is not palindrome', 'Is palindrome');
function IsPalindrom(const s: String): Boolean;
var
Res: Boolean;
i: Byte;
begin
i := 1;
repeat
Res := (s[i] = s[Length(s) + 1 - i]);
Inc(i);
until ((i >= Length(s) div 2) Or not Res);
IsPalindrom := Res;
end;
var
s, si: String;
begin
Write('Input string: ');ReadLn(s);
s := s + ' ';
while (Length(s) > 0) do
begin
si := '';
while not ((s[1] = ' ') or ((s[1] = ',')) or (s[1] = '.') ) do
begin
si := si + s[1];
Delete(s, 1, 1);
end;
if (Length(si) <> 0)
then
WriteLn(si, ' - ', ANSWER[IsPalindrom(si)]);
Delete(s, 1, 1);
end;
end.
Объяснение кода листинга программы
- Объявление константы ANSWER, которая является массивом строк, содержащими значения
Is not palindromeиIs palindrome. - Объявление функции IsPalindrom, которая принимает строку в качестве параметра и возвращает логическое значение. Внутри функции создаются переменные Res (логическое значение) и i (байт).
- В основной программе происходит ввод строки с клавиатуры и сохранение ее в переменную s.
- Затем к строке s добавляется пробел.
- Выполняется цикл, который будет продолжаться, пока длина строки s больше нуля.
- Внутри цикла создается переменная si (строка), которая инициализируется пустой строкой.
- Затем во внутреннем цикле происходит итерация по строке s до тех пор, пока не будет найден пробел, запятая или точка. Все символы, прочитанные до этого момента, добавляются к переменной si, и удаляются из строки s.
- Если длина переменной si не равна нулю, то выводится содержимое переменной si и результат выполнения функции IsPalindrom(si) (либо
Is not palindrome, либоIs palindrome). - Затем первый символ строки s удаляется.
- Программа завершается.