Структурное программирование и пошаговая детализация. Пример решения задачи
Описание файла
PDF-файл из архива "Структурное программирование и пошаговая детализация. Пример решения задачи", который расположен в категории "". Всё это находится в предмете "алгоритмы и алгоритмические языки" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Вылиток А.А.Структурное программирование и пошаговаядетализация. Пример решения задачиЗадача. Дана последовательность, содержащая от 2 до m слов (m≥2), в каждом из которых от 1 до n(n≥1) строчных латинских букв; между соседними словами – не менее одного пробела, за последнимсловом – точка. Напечатать те слова последовательности, которые отличны от последнего слова исимметричны (т.е. читаются одинаково слева направо и справа налево).Построить структурированную схему и соответствующую этой схеме программу на языке Паскаль,используя метод пошаговой детализации.Реше ниеДля представления слова в программе будем использовать строку длины n (слово=packed array[1..n] ofchar).
В случае необходимости введенное слово будем дополнять справа соответствующим числомпробелов. Поскольку каждое вводимое слово требуется сравнивать с последним словом, все вводимыеслова следует сначала запомнить. Для этого воспользуемся массивом строк S: array[1..m] of слово .Шаг1.Ввести последовательность слов в массив Sи напечатать все симметричные слова,отличные от последнего слова.Шаг2.Решение задачи очевидно разбивается на два последовательных блока: ввести данные в массив;затем, просматривая массив от начала до конца, напечатать те слова, которые удовлетворяют требуемымусловиям.Ввод последовательности словв массив SВывод симметричных слов,отличных от последнегоШаг3а.Детализируем сначала ввод последовательности слов: Очередное слово записывается в строкуS[i], где i – переменная-счетчик слов; счет начинается с 1, по окончании ввода значение i будет равноколичеству введенных слов.
Поскольку последовательность не пуста (есть хотя бы одно слово),организуем ввод, используя циклическую конструкцию с постусловием.Присвоить начальноезначение счетчику(инициализация i)i:=i+1Ввод i-го слова и егозапись в строку S[i]КонецпоследовательностиданетШаг4а.Теперь уточним блоки, входящие в конструкцию, полученную на шаге 3а. Для того, чтобыпервое слово записывалось в S[ 1], очевидно, начальное значение i должно быть нулевым.Для ввода слова понадобится вспомогательная символьная переменная c: char.i:=0Ввод осуществляется посимвольно с помощью оператора read(c).Сначала нужно пропустить лишние пробелы:read(c)c<>’9’данетФрагмент программы, соответствующий этой блок-схеме, на Паскале записывается так:repeat read(c) until c< >’9’ .После пропуска пробелов вводим символы слова (по условию в слове есть хотя бы один символ). Длязаписи очередного введенного символа в i-е слово используем оператор S[i][j]:=c, где j – номерсимвола в слове, нумерация с единицы.
Признак конца слова – очередной символ оказался пробелом илиточкой. Пока не конец слова, записываем очередной символ в массив S[i] и считываем в переменную cследующий символ:j:=1(c<>’9’)and(c<>’.’)даS[i][j]:=cj:=j+1read(c)нетСоответствующий фрагмент на Паскале:j:=1; while (c<>’9’) and (c<>’.’) do begin S[i][j]:=c; j:=j+1; read(c) endТеперь запишем пробелы в оставшиеся позиции текущего слова S[i]. Пробелами нужно заполнитьэлементы массива S[i] с номерами от j до n. Приведем сразу фрагмент на Паскале:for j:=j to n do S[i][j]:= ’9’Если в i-м слове n символов (т.е.
максимально возможное число символов в слове), то перед циклом forзначение j будет равно n+1 и тело цикла for не выполнится ни разу.Теперь мы можем вернуться к блок-схеме Шага 3а и записать соответствующий ей фрагмент на Паскале.Условие «Конец последовательности» в данной схеме можно теперь записать так: c=’.’{ввод последовательности слов в массив S:}i:=0;repeati:=i+1;{ ввод i-го слова: }repeat read(c) until c< >’9’; {пропустили пробелы; в c – первый символ i-го слова}j:=1; while (c<>’9’) and (c<>’.’) do{записать очередной символ слова:}begin S[i][j]:=c; j:=j+1; read(c) end ;{конец массива S[i] заполняем пробелами:}for j:=j to n do S[i][j]:= ’9’until c=’.’ { выходим из цикла, когда дошли до конца последовательности}З А Д А Н И Е .
Детализировать Шаг 3б: «вывод симметричных слов, отличных от последнего»(возможно, используя более мелкие шаги), построить окончательную блок-схему и, приведянеобходимые описания типов и переменных, написать полную программу, решающую поставленнуюзадачу..