Дана строка, содержащая текст на русском языке. Определить, сколько раз в ней встречается самое длинное слово. - 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.

Объяснение кода листинга программы

  1. В программе запрашивается текст от пользователя и сохраняется в переменной S.
  2. Переменная Len содержит количество символов в строке S.
  3. Переменная Cnt инициализируется нулем. Cnt будет использоваться для подсчета слов с наибольшей длиной.
  4. Переменная LenW инициализируется нулем. Она будет использоваться для отслеживания длины текущего слова.
  5. Переменная LenWMax инициализируется нулем. Она будет использоваться для хранения наибольшей длины слова.
  6. В цикле от 1 до Len происходит следующая проверка: если текущий символ не является разделителем (содержимое S[i] не входит в список разделителей D), то он считается частью слова. Это отслеживается путем увеличения LenW на единицу и установки флага окончания слова (если i равно Len или следующий символ является разделителем).
  7. Если текущее слово имеет длину больше, чем максимальная длина слова до этого, то начинается новый подсчет слов с наибольшей длиной. Для этого обновляется LenWMax и Cnt устанавливается в 1.
  8. Если текущее слово имеет длину равную максимальной длине слова до этого, то счетчик Cnt увеличивается на единицу.
  9. После окончания слова, переменная LenW сбрасывается на ноль.
  10. После цикла, программа выводит сообщение в зависимости от значения Cnt. Если Cnt равно нулю, то выводится сообщение о том, что в тексте нет слов. В противном случае выводится сообщение с максимальной длиной слова и количеством слов с такой длиной.
  11. Программа повторяет цикл до тех пор, пока S не станет пустой строкой.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы