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

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

Форум «Всё о Паскале» _ Задачи _ Не могу найти ошибку!

Автор: --==KliM==-- 30.05.2006 13:20

4. Составьте программу удаления "лишних" пробелов (спаренных, начальных и концевых пробелов строки) в полученной строке.

Код

var x:string;
    i:byte;
begin
writeln('vvedi stroku=');
readln(x);
while length(x)>0 and x[1]=' ' do delete(x,1,1);
while x[length(x)]=' ' do delete (x,length(x),1);
i:=1;
while length(x)>0 do begin
i:=pos('  ',x);
if i=0 then break
end;
writeln(x);
end.


ПОМОГИТЕ ПЛИЗЗ! ЗАВТРА ЭКЗАМЕН!! ypriamii.gif

Автор: RaV 30.05.2006 13:51

Цитата
while length(x)>0 and x[1]=' ' do delete(x,1,1);
while x[length(x)]=' ' do delete (x,length(x),1);


Вот этот фрагмент можно сделать в одном цикле:

while (x[1]=' ')or(x[length(x)]=' ') do
begin
if x[1]=' ' then delete(x,1,1);
if x[length(x)]=' 'then delete(x,length(x),1);
end;


А вот это замени совсем
Цитата
while length(x)>0 do begin
i:=pos(' ',x); {в этом цикле твоя ошибка,не правильно построен}
if i=0 then break
end;


на :

for i:=1 to length(x)do if (x[i]=' ')and(x[i+1]=' ') then {перебираем символы в строке}
begin
delete(x,i,1); {Если больше одного пробела(x[i]=' ' и x[i+1]=' ', то удаляем лишний пробел}
i:=i-1; {Возвращаемся на 1 символ назад,т.к. пробелов может быть больше 2х между словами}
end;

Автор: --==KliM==-- 30.05.2006 14:26

ФУХ! СПАСИБО ОГРОМНОЕ! good.gif good.gif good.gif

Автор: RaV 30.05.2006 14:37

Да не зачто! no1.gif

Автор: volvo 30.05.2006 16:12

RaV - последнее предупреждение... Еще раз увижу программу, в которой делается вот ЭТО:

for i:=1 to length(x)do
if (x[i]=' ')and(x[i+1]=' ') then begin
delete(x,i,1);
i:=i-1; { <-- Махинации с управляющей переменной цикла !!! }
end;
- это закончится для тебя В ЛУЧШЕМ СЛУЧАЕ - премодом. Все ясно?

Автор: RaV 30.05.2006 16:26

Понятно