Помощь - Поиск - Пользователи - Календарь
Полная версия: Найти палиндромы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sqrt
Есть такая задача:
Имеется большой словарь русских слов. Найти в нём слова-палиндромы и фразы палиндромы ("перевёртыши"), одинаково читающиеся как слева направо, так и справа налево, например, АННА, ШАЛАШ, "А роза упала на лапу азора".
Помогите, плиз, её решить.

P.S. прошу прощения у модераторов: я случайно не туда запостил тему. Переместите, пжлст, в задачи...
xds
Код
program Palind;

{ Перевод символа в кодировке "Codepage 866" (DOS) в верхний регистр }
function UpCase866(c: Char): Char;
begin
 case c of
 #0..#127:
   c := UpCase(c);
 #160..#175:
   Dec(c, 32);
 #224..#239:
   Dec(c, 80);
 'ё':
   c := 'Ё';
 end;
 UpCase866 := c;
end;

{ Проверка, является ли слово палиндромом }
function IsPalindrome(const Word: String): Boolean;
var
 i: Integer;
begin
 for i := 1 to Length(Word) div 2 do
   if Word[i] <> Word[Length(Word) - i + 1] then
     begin
       IsPalindrome := False;
       Exit;
     end;
 IsPalindrome := True;
end;

var
 f: Text;
 s, sn: String;
 i: Integer;

begin
 Assign(f, 'dict.txt');
 Reset(f);
 while not Eof(f) do
   begin
     Readln(f, s);
     sn := '';
     for i := 1 to Length(s) do
       if (s[i] <> ' ') and (s[i] <> #9) then
         sn := sn + UpCase866(s[i]);
     if IsPalindrome(sn) then
       Writeln(s);
   end;
 Close(f);
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.