Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите решить задачу(строки)

Автор: Alexey 17.03.2007 12:27

Есть задача:
найти максимальное число идущих вподряд пробелов в вводимом тексте

заранее спасибо!!!

киньте если есть готовую задачу или идеи...

Автор: Lapp 17.03.2007 13:14

Идея простая.. Примерно так:


for i:=1 to Length(s) do if s[i]=' ' then begin
Inc(n);
if n>m then Inc(m)
end
else n:=0;

Автор: Alexey 23.03.2007 7:31

Воть...Сам решил. Смотрите кому интересно или тоже нужна...


program probel;
uses crt;
var s,e:string;
Begin
clrscr;
writeln('Введите фразу:');
readln(s);
e:=' ';
while length(e)<255 do insert(' ',e,1);
repeat
if pos(e,s)<>0 then write(length(e)) else delete(e,1,1);
until pos(e,s)<>0;
write('Наибольшее число стоящих рядом пробелов в введённой фразе равно ',length(e));
readkey;
end.



P.S. Защитил на отл.

Автор: Lapp 23.03.2007 9:06

Поздравляю!
То, что сам решил - безусловно хорошо!
Но если разберешься с моим советом - будет еще лучше. Этот код (я сейчас грубо прикинул) работает примерно в 150 раз быстрее твоего..

Добавлено через 8 мин.
Кстати, сейчас только обратил внимание - там у тебя в цикле стоит Write, который в принципе не может отработать. Зачем?..
Да и вообще if в цикле почти не нужен.. Единственная ситуация, где он может пригодиться - это когда все 255 символов - пробелы. Но и ее можно избежать, заменив repeat на while.

Автор: 18192123 24.03.2007 1:41

Цитата(Lapp @ 17.03.2007 9:14) *

Идея простая.. Примерно так:

for i:=1 to Length(s) do if s[i]=' ' then begin
Inc(n);
if n>m then Inc(m)
end
else n:=0;


Lapp , объясни пожалуйста, за что у тебя отвечает переменная m?

Автор: Tan 24.03.2007 2:13

Как я понял m это переменная для временного хранения максимального числа последовательности пробелов, с которой впоследствии сравниваются все группы пробелов идущих подряд.