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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 17:25   #1
qpuTuJlb
Пользователь
 
Аватар для qpuTuJlb
 
Регистрация: 31.03.2012
Сообщений: 67
По умолчанию Не выводит максимальное значение

Добрый день, задали написать программу которая будет находить самое длинное слово, программа запускается и выводит сообщение но без этого самого длинного слова, в чем дело?
Код:
var
s,max:string;
i,p,n:integer;
mas:array[1..100] of string;
c:char;
begin
repeat
i:=0;
p:=pos(' ',s);
if pos(c,copy(s,1,p-1))<>0 then begin
mas[i]:=copy(s,1,p-1);
end;
delete(s,1,p);
until p=0;
n:=i;
if pos(c,copy(s,1,length(s)-1))<>0 then begin
n:=i+1; mas[n]:=copy(s,1,length(s)-1);
end;
for i:=2 to n do begin
if length(mas[i])>length(max) then
max:=mas[i];
end;
Showmessage('Самое длинное слово:'+max);
end;
end.

Последний раз редактировалось Serge_Bliznykov; 24.02.2013 в 17:28.
qpuTuJlb вне форума Ответить с цитированием
Старый 25.02.2013, 07:45   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код:
var
  Str: String;
  StrArr: array [1..100] of string;
  i, j, Max, Count: Integer;
  SpaceFlag: Boolean;
begin
  // Читаем строку
  Str := Edit1.Text;

  // Удаляем двойные пробелы
  Count := Length (Str);
  SpaceFlag := True;
  j := 1;
  for i := 1 to Count do begin
    if Str [i] = ' ' then begin
      if i = Count then Break;
      if (not SpaceFlag) then begin
        Str[j] := Str[i];
        Inc(j);
        SpaceFlag := True;
      end;
    end
    else begin
      Str[j] := Str[i];
      Inc(j);
      SpaceFlag := False;
    end;
  end;
  SetLength (Str, j-1);

  // Заполняем StrArr
  Count := 0;
  i := Pos (' ', Str);
  // отсекаем каждое слово (от начала до ' ')
  while i <> 0 do begin
    Inc (Count);
    StrArr [Count] := Copy (Str, 1, i-1);
    Delete (Str, 1, i);
    i := Pos (' ', Str);
  end;
  // сохраняем 'хвост'
  if Str <> ' ' then begin
    Inc (Count);
    StrArr [Count] := Str;
  end;

  if Count > 0 then begin
    // Находим самую длинную строку
    Max := 1;
    for i := 2 to Count do begin
      if Length (StrArr[i]) > Length (StrArr[Max]) then begin
        Max := i;
      end;
    end;

    // Выводим результат
    Memo1.Lines.Clear;
    for i := 1 to Count do
      Memo1.Lines.Add (StrArr [i]);
    Showmessage('Самое длинное слово: ' + StrArr [Max]);
  end;
end;
---------------------------------------------------------------------------------------------------------
Цитата:
Код:
var
s,max:string;
i,p,n:integer;
mas:array[1..100] of string;
c:char;
begin
// s - не определено
// c - не определено
repeat
i:=0; // почему в теле цикла? (Ведь он у вас обнуляется каждую итерацию)
p:=pos(' ',s);
if pos(c,copy(s,1,p-1))<>0 then begin
// счетчик i нужно увеличивать (i := i + 1)
mas[i]:=copy(s,1,p-1);
end;
delete(s,1,p);
until p=0;
n:=i;
if pos(c,copy(s,1,length(s)-1))<>0 then begin // Зачем length(s)-1
n:=i+1; mas[n]:=copy(s,1,length(s)-1); // Зачем length(s)-1
end;
// max не инициализирован
for i:=2 to n do begin
if length(mas[i])>length(max) then
max:=mas[i];
end;
Showmessage('Самое длинное слово:'+max);
end;
=>
Код:
var
  s,max:string;
  i,p,n:integer;
  mas:array[1..100] of string;
  c:char;
begin
  s := Edit1.Text;
  c := '1';

  i:=0;
  repeat
    p:=pos(' ',s);
    if pos(c,copy(s,1,p-1))<>0 then begin
      Inc(i);
      mas[i]:=copy(s,1,p-1);
    end;
    delete(s,1,p);
  until p=0;
  n:=i;
  if pos(c,copy(s,1,length(s)))<>0 then begin
    n:=i+1;
    mas[n]:=copy(s,1,length(s));
  end;
  max := mas[1];
  for i:=2 to n do begin
    if length(mas[i])>length(max) then
      max:=mas[i];
  end;

  Memo1.Lines.Clear;
  for i := 1 to n do
    Memo1.Lines.Add (mas [i]);
  Showmessage('Самое длинное слово:'+max);
end;

Последний раз редактировалось Sibedir; 25.02.2013 в 08:28.
Sibedir вне форума Ответить с цитированием
Старый 25.02.2013, 18:32   #3
qpuTuJlb
Пользователь
 
Аватар для qpuTuJlb
 
Регистрация: 31.03.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Код:
var
  s,max:string;
  i,p,n:integer;
  mas:array[1..100] of string;
  c:char;
begin
  s := Edit1.Text;
  c := '1';

  i:=0;
  repeat
    p:=pos(' ',s);
    if pos(c,copy(s,1,p-1))<>0 then begin
      Inc(i);
      mas[i]:=copy(s,1,p-1);
    end;
    delete(s,1,p);
  until p=0;
  n:=i;
  if pos(c,copy(s,1,length(s)))<>0 then begin
    n:=i+1;
    mas[n]:=copy(s,1,length(s));
  end;
  max := mas[1];
  for i:=2 to n do begin
    if length(mas[i])>length(max) then
      max:=mas[i];
  end;

  Memo1.Lines.Clear;
  for i := 1 to n do
    Memo1.Lines.Add (mas [i]);
  Showmessage('Самое длинное слово:'+max);
end;
Что это?
Код:
c := '1';
Сообщение выводит слово где есть цифра 1 а не то которое самое длинное
qpuTuJlb вне форума Ответить с цитированием
Старый 25.02.2013, 21:21   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так будет проще, но знаки препинания считаются частью слова. Можно концовки выделенных слов анализировать на наличие этих знаков и отбрасывать их
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s,s1,s2: String;
    i: Integer;
begin
  s:='Добрый день, задали написать программу которая будет находить самое длинное слово, программа запускается и выводит сообщение но без этого самого длинного слова, в чем дело?';
  s2:='';
  while s<>'' do begin
    i:=Pos(' ',s);
    if i=0 then i:=Length(s)+1;
    s1:=Copy(s,1,i-1);
    s:=Trim(Copy(s,i+1,Length(s)-i));
    if Length(s1)>Length(s2) then s2:=s1;
  end;
  Label1.Caption:=s2;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2013, 00:10   #5
qpuTuJlb
Пользователь
 
Аватар для qpuTuJlb
 
Регистрация: 31.03.2012
Сообщений: 67
По умолчанию

спасибо, все заработало
qpuTuJlb вне форума Ответить с цитированием
Старый 26.02.2013, 05:49   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Что это?
А это ваш же код но подправленный. Вы сами придумали c. Я просто подумал, что вам этот c и массив нужны будут. А вообще да, прямое решение задачи у Аватар'а.
Sibedir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Минимальное и максимальное значение Swatch SQL, базы данных 13 01.11.2012 10:33
Максимальное значение счетчика Tailrag Microsoft Office Excel 0 25.01.2012 11:39
Максимальное значение типа tools Помощь студентам 1 09.01.2010 03:15
Максимальное значение edit1.text KoBRaAndrey Общие вопросы Delphi 7 07.10.2009 05:40
Максимальное значение по дате ZUZA Microsoft Office Excel 5 05.07.2008 19:30