Задача «Строки»

Постановка задачи. Сформировать строку из слов исходной строки, не содержащих заданную букву.

Шаг 1. Общая структура программы

Программа на процедурном языке программирования состоит из данных и действий по их обработке. program Strings; { Описание данных – констант, типов и переменных } begin { Обработка данных } end.

Шаг 2. Разработка структуры данных

Из постановки задачи следует, что на вход программы подаётся строка и символ. В результате работы программы необходимо получить новую строку. program Strings; var { Входные данные } d: string; { d – исходная строка } c: char; { c – заданный символ } { Выходные данные } r: string; { r – полученная строка } begin { Обработка данных } end.

Шаг 3. Разработка тестов

№ теста Входные данные Ожидаемые результаты Смысл теста
1 d = ‘Нарушитель был оштрафован на двадцать шиллингов ’
с = ‘а’
r = ‘был шиллингов ’ Некоторые слова содержат заданную букву.
2 d = ‘Нарушитель был оштрафован на двадцать шиллингов ’
с = ‘и’
r = ‘был оштрафован на двадцать ’ Первое и последнее слова содержат заданную букву.
3 d = ‘Нарушитель был оштрафован на двадцать шиллингов ’
с = ‘н’
r = ‘Нарушитель был двадцать ’ Некоторые слова содержат заданную букву.
‘Н’ и ‘н’ – разные символы.
4 d = ‘Нарушитель был оштрафован на двадцать шиллингов ’
с = ‘л’
r = ‘оштрафован на двадцать ’ Некоторые слова содержат заданную букву.
5 d = ‘Нарушитель был оштрафован на двадцать шиллингов ’
с = ‘к’
r = ‘Нарушитель был оштрафован на двадцать шиллингов ’ Ни одно слово не содержит заданную букву.
6 d = ‘ёлка ёж ёмкость’
с = ‘ё’
r = ‘’ Все слова содержат заданную букву.

Шаг 4. Разработка общей структуры программы

Программа должна состять из трёх основных частей – ввод исходных данных, получение результатов, вывод полученных результатов. Однако в данной задаче требуется ввести несколько строк (и соответствующих символов), пока не будет достигнут конец исходного файла. Поэтому эти действия надо будет вложить в цикл. program Strings; var { Входные данные } d: string; { d – исходная строка } c: char; { c – заданный символ } { Выходные данные } r: string; { r – полученная строка } begin { Открытие файла для чтения } { Цикл пока не достигнут конец файла } begin { Ввод исходных данных } { Обработка строки, формирование новой строки } { Вывод результатов } end; { Закрытие файла } end.

Шаг 5. Разработка ввода и вывода

Запрограммируем ввод и вывод согласно входной и выходной форме. Для работы с файлом потребуется файловая переменная типа TextFile. Результаты будем выводить на экран.

В качестве заглушки для обработки данных напишем пока присваивание новой строке значения исходной строки.

Входная форма

Выходная форма

program Strings; var { Входные данные } d: string; { d – исходная строка } c: char; { c – заданный символ } { Выходные данные } r: string; { r – полученная строка } { Промежуточные данные } f: TextFile; { переменная для работы с файлом } begin { Открытие файла для чтения. Пока используем фиксированное имя файла } AssignFile(f, 'input.txt'); Reset(f); while not eof(f) do begin { Ввод исходных данных } readln(f, d); readln(f, c); { Обработка строки, формирование новой строки } r := d; { Вывод результатов } writeln('Исходная строка: ''', d, ''''); writeln('Заданный символ: ''', c, ''''); writeln('Полученная строка: ''', r, ''''); end; { Закрытие файла } CloseFile(f); end.

Шаг 6. Разработка вычислительной части программы

Используем стандартные процедуры и функции для удаления пробелов, стоящих в начале строки, выделения слова, проверки наличия заданного символа, удаления обработанного слова из исходной строки (см. пример в лекции «Строки»).