|
Вопрос # 3 275/ вопрос открыт / |
|
Здравствуйте, уважаемые!
Дана строка. определить наибольнее количество идухих подряд пробелов.
Приложение: Переключить в обычный режим- program Project1;
-
- {$APPTYPE CONSOLE}
-
- uses
- SysUtils;
- var s:string; max,i,n:integer; l:byte;
- begin
- writeln('insert string');
- readln(s);
- n:=0;
- for i:=1 to 250 do
- begin
- 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|