Дана строка, содержащая текст на русском языке. Определить, сколько раз в ней встречается самое длинное слово. - Pascal ABC
Формулировка задачи:
Дана строка, содержащая текст на русском языке. Определить, сколько раз встречается в неё самое длинное слово.
Решение задачи: «Дана строка, содержащая текст на русском языке. Определить, сколько раз в ней встречается самое длинное слово.»
textual
Листинг программы
program Project1; const {Разделители слов.} D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13]; var i, Cnt, Len, LenW, LenWMax : Integer; S : String; begin repeat Writeln('Задайте текст:'); Readln(S); {Решение.} Len := Length(S); Cnt := 0; {Количество слов с наибольшей длиной.} LenW := 0; {Длина очередного слова.} LenWMax := 0; {Наибольшая длина слова.} for i := 1 to Len do {Если символ не является разделителем, значит он принадлежит слову.} if not (S[i] in D) then begin {Учитываем текущий символ в длине слова.} Inc(LenW); {Отслеживаем конец слова.} if (i = Len) or (S[i + 1] in D) then begin {Если обнаружено слово, длина которого больше чем длины всех предыдущих слов, то начинаем счёт заново.} if LenW > LenWMax then begin LenWMax := LenW; Cnt := 1; end {Если обнаружено слово, длина которого равна наибольшей среди всех предыдущих слов, то наращиваем счётчик на 1.} else if LenW = LenWMax then Inc(Cnt); {Сброс длины слова.} LenW := 0; end; end; {Ответ.} if Cnt = 0 then Writeln('В тексте нет слов.') else begin Writeln('Наибольшая длина слова: ', LenWMax); Writeln('Количество слов с наибольшей длиной: ', Cnt); end; Writeln('Повторить - Enter. Выход - любой символ + Enter.'); Readln(S); until S <> ''; end.
Объяснение кода листинга программы
- В программе запрашивается текст от пользователя и сохраняется в переменной S.
- Переменная Len содержит количество символов в строке S.
- Переменная Cnt инициализируется нулем. Cnt будет использоваться для подсчета слов с наибольшей длиной.
- Переменная LenW инициализируется нулем. Она будет использоваться для отслеживания длины текущего слова.
- Переменная LenWMax инициализируется нулем. Она будет использоваться для хранения наибольшей длины слова.
- В цикле от 1 до Len происходит следующая проверка: если текущий символ не является разделителем (содержимое S[i] не входит в список разделителей D), то он считается частью слова. Это отслеживается путем увеличения LenW на единицу и установки флага окончания слова (если i равно Len или следующий символ является разделителем).
- Если текущее слово имеет длину больше, чем максимальная длина слова до этого, то начинается новый подсчет слов с наибольшей длиной. Для этого обновляется LenWMax и Cnt устанавливается в 1.
- Если текущее слово имеет длину равную максимальной длине слова до этого, то счетчик Cnt увеличивается на единицу.
- После окончания слова, переменная LenW сбрасывается на ноль.
- После цикла, программа выводит сообщение в зависимости от значения Cnt. Если Cnt равно нулю, то выводится сообщение о том, что в тексте нет слов. В противном случае выводится сообщение с максимальной длиной слова и количеством слов с такой длиной.
- Программа повторяет цикл до тех пор, пока S не станет пустой строкой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д