Pascal: дана строка. слова разделены пробелами. определить количество слов заданной длины

Поляков Евгений Александрович

Учитель информатики высшей категории

Проверено учителем

Для решения этой задачи на языке Pascal наиболее эффективным подходом является перебор строки посимвольно с накоплением текущей длины слова. Когда встречается пробел или конец строки, мы сравниваем накопленную длину с искомым значением. Ниже представлен полный код программы с подробными комментариями. Программа на Pascal (Free Pascal / Delphi) pascal

program CountWordsByLength; var inputString: string; targetLength, currentWordLength, wordCount, i: integer; begin // Ввод исходных данных writeln('Введите строку:'); readln(inputString); writeln('Введите искомую длину слова:'); readln(targetLength); // Инициализация переменных wordCount := 0; currentWordLength := 0; // Добавляем пробел в конец строки, чтобы корректно обработать последнее слово inputString := inputString + ' '; for i := 1 to length(inputString) do begin // Если текущий символ не пробел, увеличиваем счетчик длины слова if inputString[i] <> ' ' then begin currentWordLength := currentWordLength + 1; end else begin // Если встретили пробел, проверяем длину законченного слова if currentWordLength = targetLength then begin wordCount := wordCount + 1; end; // Сбрасываем длину слова для следующей итерации currentWordLength := 0; end; end; // Вывод результата writeln('Количество слов длины ', targetLength, ': ', wordCount); readln; end. 
Use code with caution.Разбор алгоритма

  1. Обработка последнего слова: Самая частая ошибка — забыть обработать последнее слово, если за ним не следует пробел. В данном коде мы искусственно добавляем пробел к строке inputString := inputString + ' ', чтобы условие if inputString[i] <> ' ' сработало как триггер завершения слова для всех элементов.
  2. Счетчик длины: Переменная currentWordLength увеличивается на единицу каждый раз, когда встречается любой символ, отличный от пробела.
  3. Сравнение: Как только программа натыкается на пробел, она сверяет currentWordLength с targetLength. Если они равны, инкрементируется общий счетчик wordCount.
  4. Устойчивость к пробелам: Данный алгоритм корректно обрабатывает ситуацию с несколькими пробелами подряд. В этом случае currentWordLength будет равен 0, что не совпадет с targetLength (если искомая длина больше нуля), и лишние срабатывания исключаются.

Альтернативный метод (через функцию Pos и Copy) Если вы используете современный диалект Pascal, можно разбивать строку на подстроки, используя пробел как разделитель, однако посимвольный перебор, представленный выше, является классическим и наиболее производительным решением для учебных задач. Я могу помочь вам переписать этот код с использованием встроенных функций обработки строк (например, Split), если вы используете среду Lazarus или Delphi. Хотите рассмотреть такой вариант?

Форма ответа

Ваш аватар