Консультация № 161047
21.02.2009, 01:13
0.00 руб.
0 10 1
Пожалуйста помогите найти ошибку. Программа должна выводить на экран самое короткое слово в тексте

Приложение:
program a1;
uses crt;
var str:string;
slovo,slovomin:string;
i:integer;
begin
clrscr;
write('vvestu text: ');
readln(str);
i:=1;
slovomin:='';

while i<=length(str) do
begin
if str[i]<>' ' then
begin
slovo:='';
while (str[i]<>' ') do
begin
slovo:=slovo+str[i];
if (i=length(str)) then
break;
i:=i+1;
end;
if slovomin = '' then slovomin := slovo;
if length(slovo)<length(slovomin) then
slovomin:=slovo;
end;
inc(i);
end;
write('slovo min : ',slovomin);
readln;
end.

Обсуждение

давно
Профессор
401888
1232
21.02.2009, 09:15
общий
А что конкретно Вас не устраивает в программе? Она написана для текста, где слова разделены одним пробелом. И в таком тексте нормально находит и выводит самое короткое слово. Поясните, что Вам нужно.
Неизвестный
21.02.2009, 11:26
общий
В том то и дело, что не находит и не выводит на экран при проверке, может я что-то пропустила или допустила ошибку?
давно
Профессор
401888
1232
21.02.2009, 11:49
общий
Не знаю, я просто скопировал приведенный код и запустил программу. При вводе стороки типа 1234 564 1568 выводит результат 564.
Неизвестный
21.02.2009, 11:56
общий
Ребенку нужно вводить эту программу с клавиатуры в институте, а программа при проверке выдает всю строку. Я уже не знаю что делать, занималась программированием очень давно, а тут сестра попросила, не смогла отказать. Может подскажите что делать?
давно
Профессор
401888
1232
21.02.2009, 12:06
общий
Если бы программа не работала, я бы подсказал. Но она работает! Посмотрите, может где-то вместо символов '' - пустая строка, вводит ' '-пробел и наоборот. Или воообще не вводит пробелы. Дайте Ваш ящик или аську, я отправлю вам саму программу.
Неизвестный
21.02.2009, 12:15
общий
Ящик yranija@yandex.ru
давно
Профессор
401888
1232
21.02.2009, 12:26
общий
это ответ
Здравствуйте, Orlova Svetlana Stanislavovna!
Поскольку программа Ваша работает,то лишь немного ее усовершенствовал. Сейчас можно вводить практически любой текст, несколько пробелов подряд, основные разделители слов, можно добавить.
Комментирую только то, что изменил.
Прилагаю саму программу, возможно Вы неправильно ввели ее текст.


Приложение:
program a1;
uses crt;
const rz=['.',',',';',':','?','!'];{список разделителей}
var str:string;
slovo,slovomin:string;
i:integer;
begin
clrscr;
writeln('Vvedite text:');
readln(str);
for i:=1 to length(str) do
if str[i] in rz then str[i]:=' ';{заменим разделители на пробелы}
while pos(' ',str)>0 do {если 2 пробела подряд, то 1 удаляем(между апострофами обязательно 2 пробела!, инче удалите все пробелы, и не будет слов)}
delete(str,pos(' ',str),1);
if str[length(str)]=' 'then{если в конце строки оказался пробел, удаляем его}
delete(str,length(str),1);
i:=1;
slovomin:='';
while i<=length(str) do
begin
if str[i]<>' ' then
begin
slovo:='';
while (str[i]<>' ') do
begin
slovo:=slovo+str[i];
if (i=length(str)) then break;
i:=i+1;
end;
if slovomin = '' then slovomin := slovo;
if length(slovo)<length(slovomin) then
slovomin:=slovo;
end;
inc(i);
end;
write('slovo min : ',slovomin);
readln
end.

Неизвестный
21.02.2009, 12:47
общий
Спасибо огромное.!!! Нашла ошибку, действительно вчера набирала поздно, пропустила пробел.
Неизвестный
21.02.2009, 17:05
общий
Какой пробел, если не секрет? У меня тоже программа (просто скопированная) нормально компилируется и нормально работает, и при вводе строки нормально ищет и выводит самую короткую строчку...
Неизвестный
22.02.2009, 20:07
общий
Вот она проклятая while (str[i]<>' ') do, я то её сюда кинула из набранной на компьютере работы, а набирала в программе, смотря в свои черновики. Мда чувствуешь себя прям таки , я ведь с Паскалем последний раз дело имела лет семь назад в институте. Как говориться тихо шифером шурша крыша едет неспеша. Огромное все спасибо!!! И простите что с такой глупостью побеспокоила.
Форма ответа