[pascal] Ошибка в работе программы

  • Автор темы Wefast
  • Дата начала
W

Wefast

Гость
#1
Программа должна находить самое короткое слово, и удалять лишние пробелы. Так вот если ввести много пробелов в начале, потом слово , потом пробелы, а потом слово опять , то он не выводит самое короткое слово.
Код:


Код:
uses crt;
var s,s1,s2,s3:string;
mx,mn:byte;
begin
clrscr;
textcolor(White);
write('Строка: ');
readln(s);
s:=s+' ';{добавление пробела в конец}
while pos(' ',s)>0 do{удаляем лишние пробелы, пока есть 2 пробела рядом}
delete(s,pos(' ',s),1);{1 удаляем}
mx:=0;mn:=255; {начальное значение}


textcolor(red);
writeln;
writeln('Строка без лишних пробелов: ',s);
while pos(' ',s)>0 do{пока есть пробел в строке}
begin
s1:=copy(s,1,pos(' ',s)-1);{копируем первое слово до пробела}
if length(s1)<mn then{если меньше всех}
begin
mn:=length(s1); {самая маленькая длина}
s2:=s1;	 {запоминаем слово}
end;
delete(s,1,pos(' ',s));{удаляем это слово следующее будет первым}
end;
textcolor(green);
writeln('Самое короткое слово ',s2);
readln
end.
 

hosm

* so what *
18.05.2009
2 442
9
#2
Так вот если ввести много пробелов в начале, потом слово , потом пробелы, а потом слово опять , то он не выводит самое короткое слово.
так как пробел - первый символ строки.
Выбирайте:
1) можно добавить условие проверки s1<>"" внутри цикла.
2) проверить позицию пробела, если строка начинается с пробела, то не обрабатывать как слово, а просто его удалить:
Код:
while pos(' ',s)>0 do{пока есть пробел в строке}
begin
if pos(' ',s) > 1 then // пробел не первый
begin
s1:=copy(s,1,pos(' ',s)-1);{копируем первое слово до пробела}
if length(s1)<mn then{если меньше всех}
begin
mn:=length(s1); {самая маленькая длина}
s2:=s1;	 {запоминаем слово}
end;
end;
// тут первый пробел должен удалиться
delete(s,1,pos(' ',s));{удаляем это слово следующее будет первым} 
end;
 

vital

Больной Компом Детектед
29.01.2006
2 432
42
#3
топискстартер, слушай умную тетю, она в уме паскалевский код компилировать умеет)
 

hosm

* so what *
18.05.2009
2 442
9
#4
племянничек, где твоя шкала предупреждений? :(