| 
| 
 | Вопрос # 3 275/ вопрос открыт / | 
 |  Здравствуйте, уважаемые!Дана строка. определить наибольнее количество идухих подряд пробелов.
 Приложение:Переключить в обычный режим program Project1; {$APPTYPE CONSOLE} uses  SysUtils;var s:string; max,i,n:integer; l:byte;beginwriteln('insert string');readln(s);n:=0;for i:=1 to 250 dobegin  begin  while s[i]=' ' do  inc(n); break;  end;  n:=max; if max>n then n:=max;end;write(max);readln;end.  
|  |   Вопрос задал: I{ () T (статус: Посетитель)Вопрос отправлен: 12 октября 2009, 14:49
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Тов. Женька Здравствуйте, I{ () T!
 Что не так? Все не так!
 Приложение:Переключить в обычный режим program Project1; {$APPTYPE CONSOLE} uses  SysUtils; var s:string; max,i,n, p :integer;begin  writeln('insert string');  readln(s);  max := 0;  n := 0;  p := pos(' ', s);  for i := p to length(s) do    begin      if s[i] = ' ' then        begin          inc(n);          if n > max then            max := n;        end      else        n := 0;    end;  writeln(max);  readln;end.
|  | Ответ отправил: Тов. Женька (статус: 3-ий класс)Время отправки: 12 октября 2009, 15:27
 
 |  
 Мини-форум вопросаВсего сообщений: 9; последнее сообщение — 14 октября 2009, 22:17; участников в обсуждении: 5. 12 октября 2009, 15:08: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Лабораторный практикум модератором Ерёмин А.А. 
|   | I{ () T (статус: Посетитель), 12 октября 2009, 15:17 [#1]:program Project1; 
 {$APPTYPE CONSOLE}
 
 uses
 SysUtils;
 var s:string; max,i,n:integer; b:boolean; l:char;
 begin
 writeln('insert string');
 readln(s);
 n:=0;
 b:= true;
 for i:=1 to length(s) do
 begin
 l:=s[i];
 while (l=' ') and b do
 inc(n);
 b:=(l=' ');
 n:=max;
 break;
 end;
 write(max);
 readln;
 end.
 подправил...все равно не выдает результ
 у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | Тов. Женька (статус: 3-ий класс), 12 октября 2009, 15:33 [#2]:А теперь разбор вашего решения. 1. max так и не инициализирован, т.е. значение берется "от балды". А потом это значение "от балды" присваивается n и таким образом замещается кол-во подсчитанных пробелов.
 2. Внутри одного цикла с i (for.. do) вы пытаетесь крутить второй (while ... do), результат, честно говоря, для меня не предсказуем, а что "думает" программа, можно только догадываться.
 3. Слишком усложняете, задача-то простая.
 |  
|   | Вадим К (статус: Академик), 12 октября 2009, 15:43 [#3]:Тов. Женька: Вообще то внутри одного цикла вставлять другой никто не запрещает. Другое дело, что там есть break;, поэтому этот цикл более одного раза никогда не будет выполняться.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Тов. Женька (статус: 3-ий класс), 12 октября 2009, 15:58 [#4]:Разумеется! Не обратил внимания на break, без него бы зациклилось. Другое дело, что в этом конкретном случае второй  цикл смысла не имеет. |  
|   | I{ () T (статус: Посетитель), 12 октября 2009, 17:03 [#5]:этим циклом while умудриться:вот пробежал он один раз по строке этим циклом, запомнил наибольшее число пробелов(наиб. первое попавшееся). потом, т.к. етот цикл в цикле, то думал он будет вот так пробегаться, пока не найдет мах(( у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | Тов. Женька (статус: 3-ий класс), 13 октября 2009, 08:58 [#6]:I{ () T: "этим циклом while умудриться:вот пробежал он один раз по строке этим циклом, запомнил наибольшее число пробелов(наиб. первое попавшееся). потом, т.к. етот цикл в цикле, то думал он будет вот так пробегаться, пока не найдет мах(("
 
 Этот цикл while по строке не бегает. Дело в том, что в этом цикле идет обращение к i-тому символу (только к одному символу) строки s (а не ко всей строке) и в процессе работы этого цикла он никуда не движется, так как i остается неизменным. И программа не зависает только благодаря break.
 |  
|   | min@y™ (статус: Доктор наук), 13 октября 2009, 09:01 [#7]: function GetMaxSpacesCount(const S: string): Cardinal;
var
  Index: Integer;
  Max: Cardinal;
begin
  Result:= 0;
  Max:= 0;
 
  for Index:= 1 to Length(S) do
    if S[Index] = #32
      then Inc(Max)
      else begin
             if Result < Max
               then Result:= Max;
             Max:= 0;
           end;
end;Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Егор (статус: 10-ый класс), 14 октября 2009, 18:53 [#8]:min@y™: вай, красЫва напысАл!
  уважаю
  
 прибавил бы к репутации, но система не даёт
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | min@y™ (статус: Доктор наук), 14 октября 2009, 22:17 [#9]: Цитата (Егор): вай, красЫва напысАл!    уважаю  
 Опыт не пропьёшь, дарагой!
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |