Вопрос 61. Каковы правила структурного программирования?
Структурное программирование основано на использовании блок-схем (отчетливо выражено в языке Паскаль).
Разрешается использовать только три базовые структуры – следование, ветвление, цикл.
Используемые в алгоритме структуры должны располагаться друг за другом, образуя линейную цепочку (выход из предыдущей структуры – вход в следующую).
При написании алгоритмов и программ следует использовать модульный принцип (модуль – отдельная алгоритмическая единица, выполняющая четко определенные функции).
Вопрос 62. Каковы этапы решения задач на эвм?
Постановка задачи (условия и цели).
Построение математической модели (осуществляется перевод словесного описания задачи на математический язык).
Выбор и обоснование метода решения.
Планирование последовательности арифметических, логических и др. действий для реализации выбранного метода (разработка блок-схемы).
Составление программы (язык программирования, организация данных, алгоритм).
Тестирование и отладка программы.
Исполнение программы на компьютере.
Анализ полученных результатов (в случае чего, корректировка с п2-5)
Сопровождение программы (доработка, составление документации)
63. Что включает алфавит языка Паскаль?
латинские буквы от a до z (строчные и заглавные);
разделители: запятая, точка с запятой, точка, двоеточие, ‘ апостроф, кавычки, скобки, символ ;
знаки арифметических действий: + (сложение), — (вычитание), * (умножение), / (деление);
знаки операций отношений: > (больше), < (меньше), >= (больше или равно), (не равно), = (равно)
64. Какие типы данных имеются в Паскале?
4.2 Основные правила структурного программирования
Функциональная вершина используется для представления функции F: X—>Y. Предикатная вершина используется для представления функции (или предиката) р: Х—> F>, т. е. логического выражения, передающего управление по одной из двух возможных ветвей. Объединяющая вершина представляет передачу управления от одной из двух входящих ветвей к одной выходящей ветви.
Структурная блок-схема — это блок-схема, которая может быть выражена как композиция из четырех элементарных блок-схем, изображенных на рис. 4.2. Сравнительно просто доказать, что любая программа для вычислительной машины может быть «представлена» блок-схемой. Как было показано Бомом и Якопини, верно (хотя далеко не очевидно) и то, что любая блок-схема может, в свою очередь, быть представлена структурной блок-схемой. Из этого результата немедленно следует, что для разработки любого алгоритма достаточно четырех элементарных блок-схем, приведенных на рис. 4.2.
Когда структурная блок-схема служит как представление программы, В интерпретируется как булевское выражение, a S1 и S2 интерпретируются как программные операторы (или процедуры).
Блок-схемы на рис. 4.2 а, б, в и г называют структурами управления программы. Схема на рис. 4.2 а называется композицией и записывается в виде S1; S2. Схема на рис. 4.2 б называется выбором (или альтернативой) и записывается в виде if В then SI else S2. Блок-схемы на рис. 4.2 в и г называются итерацией (или повторением) и записываются соответственно как while В do S1 и do SI while S.
Следует отметить, что часто употребляемый упрощенный оператор if В then Si, блок-схема которого приведена на рис. 4.3, представляет собой частный случай оператора if — then-else.
Тут мы сделаем замечание такого плана, в каждом языке существует определенное множество операторов, которые представляют собой некоторую модификацию представленных здесь конструкций. Так в языке Турбо-Бейсик операторами цикла являются операторы
Важная особенность заключается в том, что каждая из этих четырех программных структур управления имеет один вход и один выход. Отсюда следует, что у любой блок-схемы, составленной из этих элементов, также будет один вход и один выход. На рис. 4.4 в качестве иллюстраций приводится несколько примеров структурных блок-схем, построенных из данных элементов: лингвистически эти блок-схемы могут быть описаны следующим образом:
If В then if С then SI; S2
Обратите внимание на то, что в предыдущих блок-схемах совершенно отсутствует оператор goto.
Строго говоря, под структурным программированием понимается процесс разработки алгоритмов с помощью структурных блок-схем.
Однако в более широком плане структурное программирование допускает большее разнообразие элементарных структур управления, чем те, которые были предложены Бомом и Якопини (т. е. те, которые изображены на рис. 42). Дело в том, что, хотя эта совокупность структур управления достаточна для построения любой программы для вычислительной машины, само построение не обязательно окажется простейшим или наиболее естественным. Проиллюстрируем это на некоторых примерах.
Первый пример (рис. 4.5) соответствует ситуации, обрабатываемой на Турбо-Бейсике оператором SELECT. END SELECT. Лингвистически эту блок схему можно выразить в виде:
Если же такую конструкцию представить в виде совокупности операторов IF, то можно утонуть в рассуждениях относительно условий пересылки.
Кроме того, может возникнуть ситуация, когда обычный переход является лаконичным, простым и ясным средством, в то время как другие подходы сравнительно неудачны. Хотя более строгие формы структурного программирования исключают применение оператора goto, блок-схемы, в которых оператор goto используется достаточно аккуратно, могут сохранить свойство структурных блок-схем: один вход и один выход.
Еще один пример простой неструктурированной блок-схемы, которая может встречаться в программировании, приведен на рис. 4.6а. На рис. 4.6 б указан один из способов структурирования этой блок-схемы, хотя получаемый результат и нельзя считать вполне естественным. Заметим, что лингвистический оператор для неструктурированной блок-схемы на рис. 4.6 а требует применения оператора goto. Например,
тогда как лингвистический оператор для структурированной блок-схемы на рис. 4.6 б его не содержит. Например,
Вообще, структурное программирование определяет процесс разработки алгоритмов в терминах «квазиструктурирован-ных» блок-схем, в которых элементарные структуры управления являются, как правило, структурами Бома и Якопини. Впрочем, допускаются и другие структуры «простого типа» при условии, что они обладают свойством «один вход и один выход».
Как отмечалось выше, программирование сверху-вниз—это процесс пошагового разбиения алгоритма на всё более мелкие части с целью получить такие элементы, для которых можно легко написать конкретные команды. На рис. 4.7 этот процесс иллюстрируется для случая блок-схемы на рис. 4.4б.
Теперь попытаемся дать определение структурного программирования
Структурное программирование сверху-вниз — это процесс программирования сверху вниз, ограниченный использованием структурных блок-схем. Идея весьма проста. Предположим, что требуется разработать алгоритм для некоторой конкретной функции f. Пусть далее можно доказать, что f есть композиция двух других (надо полагать, более простых) функций g и h, т.е. f(x)=h(g(x)), как показано на рис. 4.8. Тогда проблема разработки алгоритма для f сводится к проблемам разработки алгоритмов для g и h. Пусть далее можно доказать, что функция g равна некоторой функции i, когда заданный параметр х неотрицателен, или равна некоторой другой функции j, когда х отрицателен. Тогда алгоритм для вычисления g можно выразить в форме конструкции if-then-else (рис. 4.9).
Поэтому, если алгоритмы для функций i и j построены, то правильный алгоритм для функции g строится автоматически.
Разработанные таким методом «сверху-вниз» алгоритмы обладают в некотором смысле свойством правильности, вследствие встроенного в них павила «шаг за шагом». В связи с этим в них, как правило, меньше ошибок, и их правильность доказывается легче.
В структурном программировании сверху-вниз на каждом шаге процесса разработки спрашивается, нельзя ли текущую функцию (подфункцию) выразить как композицию двух (или более) других функций.