Найти длину самого короткого слова - Free Pascal (567)
Формулировка задачи:
Задан текст. Найти длину самого короткого слова.
Решение задачи: «Найти длину самого короткого слова»
textual
Листинг программы
uses crt;
const rz=[' ','.',',',';',':','?','!']; {разделители слов, можно добавить}
var s,s1,sk:string;
len,k,i,ik,f:byte;
begin
clrscr;
writeln('Введите текст:');
readln(s);
for i:=1 to length(s) do{заменим разделители на запятые}
if s[i] in rz then s[i]:=',';
s:=s+',';{добавим к ней запятую}
while pos(',,',s)>0 do{удалим лишние запятые}
delete(s,pos(',,',s),1);
if s[1]=','then delete(s,1,1);{1 удаляем}
sk:='';{короткое слово, пока его нет}
k:=255;{длина короткого слова}
while pos(',',s)>0 do{пока есть пробелы}
begin
len:=pos(',',s)-1;{длина очередного слова}
s1:=copy(s,1,len);{само слово}
if len<k then{если меньше предыдущих}
begin
sk:=s1; {запомним}
k:=len; {его длина}
end;
delete(s,1,pos(',',s));{удаляем проверенное слово, следующее первое}
end;
write('Самое короткое слово: ',sk);
readln
end.
Объяснение кода листинга программы
- Установка начального значения переменных:
- s - для хранения введенного текста;
- s1 - для хранения текущего слова;
- sk - для хранения самого короткого слова;
- len - для хранения длины текущего слова;
- k - для хранения длины самого короткого слова;
- i, ik, f - для использования в циклах.
- Ввод текста с помощью функции readln(s).
- Замена разделителей на запятые с помощью цикла for и условного выражения if.
- Добавление запятой в конец строки s с помощью оператора
+=. - Удаление лишних запятых с помощью цикла while и функции delete.
- Проверка наличия запятой в начале строки s с помощью условного выражения if и удаление ее при наличии.
- Начало цикла while, который будет выполняться до тех пор, пока есть пробелы в строке s.
- Вычисление длины текущего слова с помощью функции pos и вычитание 1 из результата.
- Копирование текущего слова в строку s1 с помощью функции copy.
- Проверка условия if: если длина текущего слова меньше k, то присваиваем значения переменным sk и k, чтобы запомнить текущее слово как самое короткое.
- Удаление текущего слова из строки s с помощью функции delete.
- Завершение цикла while.
- Вывод самого короткого слова на экран с помощью функции write.
- Чтение символа Enter с помощью функции readln.