Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 897

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
пожалуйста пошагово объясните что выполняется в это программе!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Edit1: TEdit;
  12. Label1: TLabel;
  13. Button1: TButton;
  14. Label2: TLabel;
  15. Edit2: TEdit;
  16. procedure Button1Click(Sender: TObject);
  17. private
  18. { Private declarations }
  19. public
  20. { Public declarations }
  21. end;
  22.  
  23. var
  24. Form1: TForm1;
  25. mas:array[1..100] of string;
  26. n:integer;
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure TForm1.Button1Click(Sender: TObject);
  32. var max,st,st1:string;
  33. j,nom,i:integer;
  34. glasn:array[1..10] of char;
  35. flag:boolean;
  36. begin
  37. st:=trim(edit1.Text);
  38. st1:=st+' ';
  39. i:=0;
  40.  
  41. while length(st1)>0 do
  42. begin
  43. i:=i+1;
  44. mas[i]:=copy(st1,1,pos(' ',st1)-1);
  45. delete(st1,1,pos(' ',st1));
  46. n:=i;
  47. end;
  48. max:=mas[1];
  49. nom:=1;
  50. for i:=2 to n do
  51. if length(mas[i])>length(max) then
  52. begin
  53. nom:=i;
  54. max:=mas[i];
  55. end;
  56. max:='';
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68. for i:=1 to length(mas[nom]) do
  69. begin
  70. flag:=false;
  71. for j:=1 to 10 do
  72. if mas[nom][i]=glasn[j] then flag:=true;
  73. if flag=false then
  74. max:=max+mas[nom][i];
  75. end;
  76. mas[nom]:=max;
  77. edit2.text:='';
  78. for i:=1 to n do
  79. edit2.text:=edit2.text+mas[i]+' ';
  80. end;
  81.  
  82. end.


Якакутов Евгений Михайлович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Якакутов Евгений Михайлович (статус: Посетитель)
Вопрос отправлен: 11 июня 2009, 00:21
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Якакутов Евгений Михайлович!
Как я люблю подобные задачи.... называется "я угадаю этот код с трех строк..."
Но попробуем

procedure TForm1.Button1Click(Sender: TObject);
var max,st,st1:string;
j,nom,i:integer;
glasn:array[1..10] of char;
flag:boolean;
begin
//ввели строку, удалили начальные и конечные проблелы
st:=trim(edit1.Text);
//допишем один пробел в конец. Просто что бы упростить алгоритм дальше
st1:=st+' ';
i:=0;
//этот код разделяет строку на слова и заносит их в массив.
while length(st1)>0 do
  begin
    i:=i+1;
    mas[i]:=copy(st1,1,pos(' ',st1)-1);
    delete(st1,1,pos(' ',st1));
    n:=i;
  end;
//этот кусочек кода ищет строку с максимальной длиной
  max:=mas[1];
  nom:=1;
  for i:=2 to n do
   if length(mas[i])>length(max) then
   begin
     nom:=i;
     max:=mas[i]; 
   end;
//готовим массив гласных букв
max:='';
glasn[1]:='а';
glasn[2]:='е';
glasn[3]:='и';
glasn[4]:='о';
glasn[5]:='ы';
glasn[6]:='ю';
glasn[7]:='я';
glasn[8]:='э';
glasn[9]:='у';
glasn[10]:='ё';
 
//перебирая все буквы в этом "самом длинном слове".
 
for i:=1 to length(mas[nom]) do
begin
//Следующие три строки проверяют, является ли текущая буква гласной.
 flag:=false;
 for j:=1 to 10 do
  if mas[nom][i]=glasn[j] then flag:=true;
//и если это не так (то есть она согласная), то добавим в новую строку.
  if flag=false then //ну кто так пишет??? ну не в Индии же живем! надо if not flag then
   max:=max+mas[nom][i];
end;
mas[nom]:=max;
//а теперь изменённый массив выводим в едит2. Для этого вначале "соберем" слова в строку.
edit2.text:='';
for i:=1 to n do
 edit2.text:=edit2.text+mas[i]+' ';
end;
А теперь подсуммируем. Задача наверно звучала где то так.
"В введненом списке слов, разделенных пробелом, найти слово с максимальной длинной и удалить с него все гласные. Получившуюся строку вывести".

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 11 июня 2009, 01:17
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.