Фразы палиндромы

Тема в разделе "Pascal and Delphi", создана пользователем ilsen, 4 ноя 2010.

Статус темы:
Закрыта.
  1. ilsen

    ilsen Гость

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

    В delphi я на форму нанес memo, в которое загружаю все слова из файла. Также кнопку для поиска палиндромов и edit в котором отображаю результат.
    Вот код программы:
    Код (Delphi):
    var const dividers=[' ',',','.',';',':','-','=','+'];
    ...
    function Pa(s:string):boolean;
    var
    i:integer;
    fl:boolean;
    begin
    fl:=true;
    for i:=1 to length(s)div 2 do
    if s[i]<>s[length(s)-i+1] then
    fl:=false;
    Result:=fl
    end;
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    var
    s,temp:string;
    i:integer;
    begin
    s:=memo1.Text;
    temp:='';
    {пробегаем всю строку посимвольно}
    for i:=1 to length(s) do
    begin
    if not (s[i] in dividers) then
    temp:=temp+s[i]; {записываем одним словом}
    end;
    temp:=ansilowercase(temp); {все буквы делаем маленькими}
    if Pa(temp)then
    edit1.text:=temp; {в edit результат}
    end;
    А как искать несколько слов или даже несколько фраз?
     
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    А как в словаре записаны слова/фразы?
    Kаждое с новой строки, или через какойто символ(,./)?

    Если каждое слово с новой строки, то добавь на форму еще одно memo с именем memo2 и
    Код (Text):
    procedure TForm1.Button1Click(Sender: TObject);
    var
    s,temp:string;
    i:integer;
    begin
    memo2.clear;
    for i:=0 to memo1.Lines.Count-1 do
    if Pa(ansilowercase(memo1.Lines[i])) then memo2.lines.add(memo1.Lines[i]);
    end;
     
  3. ilsen

    ilsen Гость

    Kаждое слово и фраза с новой строки. По словам ищет, а вот фразы нет
     
  4. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Странно, у меня работает.
     
  5. ilsen

    ilsen Гость

    напиши "а роза упала на лапу азора", программа не видит фразу как палиндром
    Как сделать чтобы программа в каждой строке удаляла знаки препинания и лепила слова, т.е. сделала из "а роза упала на лапу азора" - "арозаупаланалапуазора" и тогда она увидит что это палиндром
     
  6. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Попробуй так:
    Код (Delphi):
    const dividers:array[0..7] of char = (' ',',','.',';',':','-','=','+');
    ...

    procedure TForm1.Button1Click(Sender: TObject);
    var
    s:string;
    i,j:integer;
    begin
    memo2.clear;
    for i:=0 to memo1.Lines.Count-1 do
    begin
    s:=ansilowercase(memo1.Lines[i]);
    for j := 0 to 7 do
    s:=stringreplace(s,dividers[j],'',[rfReplaceAll]);
    if Pa(s) then memo2.lines.add(memo1.Lines[i]);
    end;
    end;
     
Загрузка...
Похожие Темы - Фразы палиндромы
  1. Истребитель
    Ответов:
    2
    Просмотров:
    2.929
Статус темы:
Закрыта.

Поделиться этой страницей