0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 7
1

Строки в языке Object Pascal

01.12.2009, 14:44. Показов 1408. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, решить задачу в Delphi:
Поиск самого длинного слова в строке и вывод этого слова в обратном порядке.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2009, 14:44
Ответы с готовыми решениями:

Массивы в языке Object Pascal
Помогоите, пожалуйста, решить задачу в Delhi: Дан вектор A(2n). Получить количество нечетных среди...

Разработать класс и указать методы на языке Object Pascal
Разработать класс и указать методы на языке Object Pascal Класс прямая Члены класса Координаты...

Разработать класс и указанные методы на языке Object Pascal
Вариант 19 Класс Обыкновенная дробь Члены класса Числитель и знаменатель Методы Конструктор,...

Разработать программу на языке Object Pascal в среде Delphi
Разработать программу, ведущую учет результатов сдачи экзаменов студентами одной группы за один...

6
42 / 42 / 7
Регистрация: 08.11.2009
Сообщений: 167
01.12.2009, 15:33 2
купи себе моск и решай сама свои долбаные задания
0
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 7
01.12.2009, 18:04  [ТС] 3
Я же прошу помочь людей, которые могут и хотят помочь! А если ты не можешь, то никто тебя не заставляет! А люди добрые есть!
0
13106 / 5887 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
01.12.2009, 20:23 4
Iren, вот, по твоему заданию:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
//Находит в тексте слово с максимальным количеством букв.
//Затем записывает его по буквам в обратном порядке и возвращает
//полученную строку в качестве результата.
function ProcStr(aStrSrc : String) : String;
type
  TWord = record
    StartPos  : Integer;
    LettCnt   : Integer;
  end;
 
  TArrWord = array of TWord;
const
  //Множество разделителей.
  Spl : set of Char = [' ', ',', '.'];
  //Величина приращения длины динамического массива.
  Capacity = 10;
var
  //Переменные, связанные с обработкой букв.
 
  //Индекс символов строки. LettInd := 1..Length(aStrSrc).
  LettInd         : Integer;
  //Последний обработанный символ - символ обработанный на предыдущей итерации цикла.
  LastChar        : Char;
 
  //Переменные, связанные с обработкой слов.
 
  //Массив, содержащий координаты найденных слов.
  ArrWord        : TArrWord;
  //Переменная, хранящая сведения о слове.
  WordTmp        : TWord;
  //Индекс слова в строке. WordInd := 0..X.
  WordInd        : Integer;
  //Индекс слова с максимальным количеством букв.
  WordIndMax     : Integer;
  //Флаг, оказывающий, что текущая буква является последней в слове.
  IsEndWord      : Boolean;
 
  //Индекс букв в строке результата.
  i              : Integer;
begin
  //Инициализируем строку результата.
  Result := '';
 
  //-------------------------
  //Обрабатываем строку и заполняем массив ArrWord сведениями о найденных словах.
  //-------------------------
 
  //Индекс очередного слова.
  WordInd := 0;
  //Индекс очередного символа.
  LettInd := 1;
  //Перебор всех символов в строке.
  while LettInd <= Length(aStrSrc) do begin
    //Если очередной символ является буквой.
    if not (aStrSrc[LettInd] in Spl) then begin
 
      //Отслеживаем начало слова.
      if (LettInd = 1) or ( (LettInd <> 1) and (LastChar in Spl) ) then begin
        //Обнаружено начало слова.
        //Инициализируем переменные.
 
        //Позиция первой буквы слова в строке.
        WordTmp.StartPos := LettInd;
        //Количество букв в слове.
        WordTmp.LettCnt := 0;
      end;
 
      //Подсчёт общего количества букв в слове.
      Inc(WordTmp.LettCnt);
 
      //Отслеживаем конец слова.
      IsEndWord := False;
      if LettInd = Length(aStrSrc) then begin
        //Текущая буква является последним символом в слове.
        IsEndWord := True;
      end else if aStrSrc[LettInd + 1] in Spl then begin
        //Справа от текущей буквы расположена небуква.
        IsEndWord := True;
      end;
 
      if IsEndWord then begin
        //Обнаружен конец слова.
        //Добавляем данные по текущему слову в массив ArrWord.
 
        //Если требуется, увеличиваем длину массива.
        if WordInd = Length(ArrWord) then begin
          SetLength(ArrWord, Length(ArrWord) + Capacity);
        end;
        //Добавляем сведения о слове в массив.
        ArrWord[WordInd] := WordTmp;
        //Готовим индекс слов к следующей итерации.
        Inc(WordInd);
      end;
    end;
 
    //Запоминаем символ, обработанный на этой итерации.
    LastChar := aStrSrc[LettInd];
    //Готовим индекс символа для следующей итерации.
    Inc(LettInd);
  end;
 
  //Если в строке нет ни одного слова - выходим.
  if WordInd = 0 then begin
    Exit;
  end;
 
  //Корректируем длину массива ArrWord в соответствии с количеством добавленных
  //в этот массив слов.
  SetLength(ArrWord, WordInd);
 
  //-------------------------
  //Ищем в массиве ArrWord слово с максимальным количеством букв.
  //-------------------------
 
  for WordInd := 0 to High(ArrWord) do begin
    if WordInd = 0 then begin
      WordIndMax := 0;
    end;
    if ArrWord[WordInd].LettCnt > ArrWord[WordIndMax].LettCnt then begin
      WordIndMax := WordInd;
    end;
  end;
 
  //-------------------------
  //Переписываем в результирующую строку найденное слово по буквам в обратном порядке.
  //-------------------------
 
  with ArrWord[WordIndMax] do begin
    //Выделяем память для результирующей строки. - Чтобы каждый раз при переписывании
    //очередного символа не происходило пересоздания строки.
    SetLength(Result, LettCnt);
    //Переписываем в результирующую строку найденное слово по буквам в обратном порядке.
    i := 0;
    for LettInd := StartPos + LettCnt - 1 downto StartPos do begin
      Inc(i);
      Result[i] := aStrSrc[LettInd];
    end;
  end;
 
  //Освобождаем память, выделенную ранее для массива.
  Finalize(ArrWord);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text := ProcStr(Edit1.Text);
end;
 
end.
1
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 7
01.12.2009, 21:18  [ТС] 5
Спасибо огромное! И всё так подробно
0
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 7
02.12.2009, 13:18  [ТС] 6
У меня что-то не работает программа, или нужно еще что-то дописать?
0
13106 / 5887 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
02.12.2009, 14:09 7
Программа рабочая. На форму надо положить 3 компонента: 2 TEdit и одну кнопку (TButton).
Работает так: исходная строка вводится в первый Edit, затем, по нажатию на кнопку во второй Edit выводится результирующая строка.
К этому посту приложил проект на Delphi 7.
Вложения
Тип файла: rar ProcStr.rar (163.7 Кб, 48 просмотров)
2
02.12.2009, 14:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2009, 14:09
Помогаю со студенческими работами здесь

Проверить программно код на языке Object Pascal на синтаксические ошибки
Никто не подскажет, как проверить программно код на языке Object Pascal на синтаксические ошибки?

Составьте программу на языке программирования Object Pascal для вычисления значений функции
F(x)= x – sin x на отрезке с шагом h. Результат представить в виде таблицы, первый столбец которой...

Удалить из файла с исходным текстом программы на языке Object Pascal все комментарии
Удалить из файла с исходным текстом программы на языке Object Pascal все комментарии. Сохранил...

Object Pascal (Delphi)
1. Нужно написать программу на языке Object Pascal (Delphi), чтобы она переводила метры в футы и...


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

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

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