Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 28
1

Найти самое длинное симметричное слово в заданном предложении

21.04.2015, 15:35. Показов 1487. Ответов 7
Метки нет (Все метки)

Как в программе определяется симметричное слово или нет?
Delphi
1
sW2 := S[i] + sW2; //Слово в обратном прочтении
и как составляется слово в обратном порядке? Объясните подробнее пожалуйста.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2015, 15:35
Ответы с готовыми решениями:

Найти самое длинное симметричное слово в заданном предложении
Помогите, ввожу симметричные слова, а мне постоянно выдаёт симметричных слов нет! unit Unit1; ...

В заданном предложении поменять местами первое слово и самое длинное слово
Кто-нибудь, помогите решить задачи на Lazarus или Delphi! 1. В заданном предложении поменять...

В заданном предложении найти самое короткое и самое длинное слова
В заданном предложении найти самое короткое и самое длинное слова. Напечатать исходный текст и...

Найти самое длинное слово в предложении.
Найти самое длинное слово в предложении.

7
пофигист широкого профиля
4461 / 2947 / 832
Регистрация: 15.07.2013
Сообщений: 16,946
21.04.2015, 15:38 2
Шо, опять?
Найти самое длинное симметричное слово в заданном предложении
0
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 28
21.04.2015, 17:49  [ТС] 3
Здесь по другому немного))

Добавлено через 2 часа 7 минут
northener, Сможете объяснить?
0
пофигист широкого профиля
4461 / 2947 / 832
Регистрация: 15.07.2013
Сообщений: 16,946
22.04.2015, 00:51 4
Цитата Сообщение от TimeWolf Посмотреть сообщение
northener, Сможете объяснить?
Возможно смогу, но пока не понимаю что не понятно?
0
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 28
22.04.2015, 05:13  [ТС] 5
northener, как составляется слово в обратном порядке?
0
13077 / 5862 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
22.04.2015, 11:50 6
Основа здесь взята из моих постов. Но по изменениям, добавленным в код, есть замечания.
1. Word - это имя целочисленного типа. Поэтому не следует объявлять переменные с таким именем. Глядя на код в редакторе Delphi, видно, что слово Word выделено, как зарезервированное слово - это уже должно подталкивать к мысли, что здесь что-то не так.
2. Самых длинных симметричных слов может быть несколько. Код из заглавного поста находит только первое из самых длинных симметричных слов.
Подправить можно так (тоже с поиском только первого из самых длинных симметричных слов):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//Поиск и распечатка первого из самых длинных симметричных слов.
procedure TForm1.Button1Click(Sender: TObject);
const
  //Множество разделителей слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, S1, S2, SMax : String;
  i, Len : Integer;
begin
  S := AnsiUpperCase(Memo1.Text); //Исходный текст берём из Memo1 и его буквы приводим к верхнему регистру.
 
  Len := Length(S);
  S1 := '';   //Слово.
  S2 := '';   //Перевёрнутое слово.
  SMax := ''; //Первое из самых длинных симметричных слов.
  for i := 1 to Len do //Перебор всех символов строки справа-налево.
    if not (S[i] in D) then //Если символ не является разделителем, значит он принадлежит слову.
    begin
      S1 := S1 + S[i]; //Составляем слово.
      S2 := S[i] + S2; //Составляем перевёрнутое слово.
      if (i = Len) or (S[i + 1] in D) then //Отслеживаем конец слова.
      begin
        //Если слово совпадает со своим перевёртышем (т. е., является симметричным)
        //и его длина больше наибольшей длины симметричных слов, найденных ранее.
        if (S1 = S2) and (Length(S1) > Length(SMax)) then
          SMax := S1;
        S1 := '';
        S2 := '';
      end;
    end;
 
  //Ответ.
  if SMax = '' then
    ShowMessage('В тексте нет симметричных слов.')
  else
    ShowMessage('Первое из самых длинных симметричных слов: ' + SMax);
end;
Цитата Сообщение от TimeWolf Посмотреть сообщение
и как составляется слово в обратном порядке? Объясните подробнее пожалуйста.
При составлении строки S1 каждая следующая буква добавляется справа, а при составлении S2 - слева. Предположим, что программа обрабатывает строку: 'свет'. Тогда в цикле for i := 1 to Len do (начало на строке №16) будет происходить следующее:
Код
i        S[i]        S1          S2
---------------------------------------
1        'С'         'С'         'С'
2        'В'         'СВ'        'ВС'
3        'Е'         'СВЕ'       'ЕВС'
4        'Т'         'СВЕТ'      'ТЕВС'
2
northener
22.04.2015, 12:09
  #7

Не по теме:

Mawrat, спасибо за помощь. Полчаса ломал голову как объяснить составление слов в прямом и обратном порядке. Уж слишком очевидная вещь. :)

0
Mawrat
22.04.2015, 12:11     Найти самое длинное симметричное слово в заданном предложении
  #8

Не по теме:

Да, вот я и решил - что проще показать, чем рассказать - нарисовал таблицу. :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2015, 12:11

Самое длинное слово в предложении
Очень прошу помогите!!! УМОЛЯЮ ПОЛНОЕ ТЕЛО ПРОГРАММЫ ПЛИИЗ КОД В ДЕЛФИ!!! Название темы...

Написать программу, которая находит самое длинное слово в предложении
Задано предложение, состоящее из слов-строк. Написать программу, которая находит самое длинное ...

Написать программу, которая находит самое длинное слово, встречающееся в предложении
Задано предложение-строка. Написать программу, которая находит самое длинное слово, встречающееся в...

Дан символьный файл f. Найти самое длинное слово в файле.(слово − произвольная последовательность символов, разделенная пробелами)
Дан символьный файл f. Найти самое длинное слово в файле.(слово − произвольная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru