![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток ув.форумчане!Нужна ваша помощь в решении задачи по программированию.Язык програмирования-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
|
||||
|
||||
![]() Попробуй, может подойдёт:
Код:
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
|
|||
|
|||
![]() Попробовал-но видимо в коде чего то не хватает-постоянно пишет"в строке не найдено полиндрома" -даже если он там есть!
|
#4
|
||||
|
||||
![]() У меня с такой строкой "Он дивен, палиндром, и ни морд, ни лап не видно" всё работает.
![]() |
#5
|
|||
|
|||
![]() angvelem, читай вопрос внимательно. Человеку надо найти все слова-палиндромы, а не текст.
|
#6
|
||||
|
||||
![]() Судя по коду обрабатывается фраза содержащая пробелы, я предположил, что палиндромом выступает именно фраза а не отдельное слово, накопления найденных палиндромов в этом коде, что то не замечаю (не считая переменной K).
![]() ![]() ![]() Последний раз редактировалось angvelem, 21.06.2011 в 01:47. |
#7
|
|||
|
|||
![]() Код:
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)); |