Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2015, 20:14   #1
TimeWolf1
Новичок
Джуниор
 
Регистрация: 21.04.2015
Сообщений: 2
По умолчанию Найти самое длинное симметричное слово в заданном предложении

Как в программе определяется симметричное слово или нет?
Код:
sW2 := S[i] + sW2; //Слово в обратном прочтении
и как составляется слово в обратном прочтении? Объясните подробнее пожалуйста.
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Множество разделителей
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, sW1, sW2,word : String;
  i, Len,dl : Integer;
begin
  S := Memo1.Text; //Текст берём из Memo1
  Memo2.Clear;
  dl:=0;
  Len := Length(S);
  sW1 := ''; //Слово 
  sW2 := ''; //Слово в обратном прочтении
  for i := 1 to Len do
    //Если символ не является разделителем, значит он принадлежит слову 
    if not (S[i] in D) then
    begin
      sW1 := sW1 + S[i]; //Составляем слово
      sW2 := S[i] + sW2; //Слово в обратном прочтении
      if (i = Len) or (S[i + 1] in D) then //Отслеживаем конец слова
      begin
        //Если слово является палиндромом, ищем наибольшее из них
        if sW1 = sW2 then
        begin
        if length(sW2)>dl then
        begin
        word:=sW2;
        dl:=length(sW2);
 
        end;
        sW1 := '';
        sW2 := '';
      end;
    end;
 
 
 
end;
Memo2.Lines.Add(word);//Слово-палиндром
end;
end.
TimeWolf1 вне форума Ответить с цитированием
Старый 21.04.2015, 20:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если не ошибаюсь:
Код:
const
  //Множество разделителей
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, sW1, sW2,max : String;
  i, a,j : Integer; b:boolean;
begin
  S := Memo1.Text; //Текст берём из Memo1
  Memo2.Clear;
  Len := Length(S);
  a:=1;b:=1;
  sw2:='';max:='';
  for i := 1 to Len do begin
    if (S[i] in D) then    begin b:=true;
     for j:=a to i-1 do if sw[i-j]<>sw[j] then begin b:=false; break; end;
     if b then begin 
       sw1:=copy(s,a,i-a-1);
       if length(max)<Length(sw1) then max:=sw1;
     end;
     a:=i+1;
    end;
  end;
  Memo2.Lines.Add(max);//Слово-палиндром
end;
Цитата:
Как в программе определяется симметричное слово или нет?
http://yandex.ua/yandsearch?text=%D0...2015&numdoc=50
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2015, 21:22   #3
TimeWolf1
Новичок
Джуниор
 
Регистрация: 21.04.2015
Сообщений: 2
По умолчанию

Можете по подробней объяснить что здесь выполняется и как?
Код:
for i := 1 to Len do begin
    if (S[i] in D) then    begin b:=true;
     for j:=a to i-1 do if sw[i-j]<>sw[j] then begin b:=false; break; end;
     if b then begin 
       sw1:=copy(s,a,i-a-1);
       if length(max)<Length(sw1) then max:=sw1;
TimeWolf1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пять задач (Найти все трехзначные числа,Массивы и Найти самое длинное симметричное слово)VBA Nod123 Помощь студентам 0 24.12.2014 01:30
Строки - В заданном тексте найти самое длинное слово и самую длинную фразу (VS) Ольга Тимонова Помощь студентам 0 22.02.2012 15:19
С# найти самое длинное и самое короткое слово в строке и вывести их Зеленый Чай Помощь студентам 4 06.01.2012 18:40
Найти самое длинное симметричное слово заданного предложения С++ swimming1 Фриланс 6 30.11.2010 18:50
найти самое длинное симметричное слово Си++ xVeteRx Помощь студентам 3 10.04.2009 21:25