Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.06.2011, 20:29
Dima170792 Dima170792 вне форума
Новичок
 
Регистрация: 02.04.2011
Сообщения: 61
Репутация: 10
По умолчанию Дан текст. Найти все палиндромы (слова-перевёртыши) в этом тексте

Доброго времени суток ув.форумчане!Нужна ваша помощь в решении задачи по программированию.Язык програмирования-Delphi7.Задача состоит в следующем:Дан текст.Найти все палиндромы(слова-перевёртыши)в етом тексте.У меня неполучаеться перевод из паскаля в Delphi7-ниже исходный код! если несложно помогите организовать оконное приложение:
Код:
var i:byte;
    s1:string;
begin
s1:='';
for i:=length(s) downto 1 do
s1:=s1+s[i];
if s=s1 then Pal:=true
else Pal:=false;
end;
 
begin;
writeln('Введите слова разделенными пробелами: ');
readln(s);
while pos('  ',s)>0 do
delete(s,pos('  ',s),1);
i:=length(s);
s1:='';
while s[i]<>' ' do
 begin
  s1:=s[i]+s1;
  i:=i-1;
 end;
k:=0;
while pos(' ',s)>0 do
 begin
 s2:=copy(s,1,pos(' ',s)-1);
 if (s2<>s1)and Pal(s2) then
 begin
  write(s2,' ');
  k:=k+1;
  end;
 delete(s,1,pos(' ',s));
 end;
if k=0 then
write('В строке не найдено палиндрома! ');
readln
end.
с использованием едитов или мемо в качестве полей ввода-вывода.Заранее благодарен!
Ответить с цитированием
  #2  
Старый 20.06.2011, 22:09
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Попробуй, может подойдёт:
Код:
function Palindrom(S : String) : Boolean;
var
  I  : Integer;
  s1 : String;
begin
  s1 := '';
  for I := Length(s) downto 1 do
    s1 := s1 + s[i];

  Result := s = s1;
end;

procedure TForm1.Button6Click(Sender: TObject);
var
  S, S1, S2 : String;
  I, K      : Integer;
begin;
  if Edit1.Text = '' then
    Exit;

  S := Edit1.Text;
  while Pos('  ', S) > 0 do
    delete(S, Pos('  ', S), 1);

  I := Length(S);

  s1 := '';
  while S[i] <> ' ' do
  begin
    S1 := S[i] + S1;
    dec(I);
  end;

  K := 0;
  while Pos(' ', S) > 0 do
  begin
    S2 := Copy(S, 1, Pos(' ', S) - 1);
    if (S2 <> S1) and Palindrom(S2) then
    begin
      S2 := ' ';
      inc(K);
    end;
    delete(S, 1, Pos(' ', S));
  end;

  if K = 0 then
    ShowMessage('В строке не найдено палиндрома! ');
end;

Последний раз редактировалось angvelem, 20.06.2011 в 22:19.
Ответить с цитированием
  #3  
Старый 20.06.2011, 22:45
Dima170792 Dima170792 вне форума
Новичок
 
Регистрация: 02.04.2011
Сообщения: 61
Репутация: 10
По умолчанию

Попробовал-но видимо в коде чего то не хватает-постоянно пишет"в строке не найдено полиндрома" -даже если он там есть!
Ответить с цитированием
  #4  
Старый 20.06.2011, 22:49
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

У меня с такой строкой "Он дивен, палиндром, и ни морд, ни лап не видно" всё работает.
Ответить с цитированием
  #5  
Старый 21.06.2011, 01:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

angvelem, читай вопрос внимательно. Человеку надо найти все слова-палиндромы, а не текст.
Ответить с цитированием
  #6  
Старый 21.06.2011, 01:40
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Судя по коду обрабатывается фраза содержащая пробелы, я предположил, что палиндромом выступает именно фраза а не отдельное слово, накопления найденных палиндромов в этом коде, что то не замечаю (не считая переменной K). Как быть? Пойду застрелюсь.

Последний раз редактировалось angvelem, 21.06.2011 в 01:47.
Ответить с цитированием
  #7  
Старый 21.06.2011, 13:00
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Код:
function getPalindromes(text: string): TStringList;
var
 str: string;
 i, j: integer;
 S, R: TStringList;
begin
 S := TStringList.Create;
 R := TStringList.Create;
 S.Text := StringReplace(Trim(text), ' ', #13#10, [rfReplaceAll]);
 for i := 0 to S.Count - 1 do begin
  str := '';
  S.Strings[i] := AnsiLowerCase(Trim(S.Strings[i]));
  if S.Strings[i] <> '' then begin
   for j := Length(S.Strings[i]) downto 1 do
    str := str + S.Strings[i][j];
   if str = S.Strings[i] then R.Add(str);
  end;
 end;
 S.Free;
 Result := R;
end;

Код:
 ShowMessage(IntToStr(getPalindromes('123321 abcba').count));
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025