Лабораторная работа: Методология преобразования произвольной программы в структурированную
Цель работы : освоить методологию преобразования произвольной программы в структурированную.
Методические указания
Наиболее известными методами, позволяющими выполнить структурирование программ, являются: метод дублирования кодов программы, метод введения переменной состояния и метод булевых признаков.
Метод дублирования кодов . ?????????? ?????????, ????-????? ??????? ????????? ?? ??????? 1. ? ????????? ???? ????????? ?? ???????? ?????????????????; ?????? ???? ?? ????????????? ?????????? ????? ???? ? ???? ??????.
Чтобы получить структурированную программу, мы воспользуемся дублированием тех модулей, в которые можно войти из нескольких мест. Рассмотрим исходную программу как простую конструкцию типа IF-THEN-ELSE, показанную на рисунке 2.
Рисунок 2 -Упрощенное представление схемы по рисунку 1.
Она может быть расширена до структуры, изображенной на рисунке 3. Окончательно вся программа может быть представлена в виде, показанном на рисунке 4.
????? ???????? ? ????? ?????????, ??????? ????????? ???????
Рисунок 3 - Более подробное представление схемы.
или сети, но не может быть применен к циклическим программам.
????? ???????????? ????? ????? ??????????: ?? ??????? ?????? ??????, ??? ???????? ??????????????????? ??????. ?????? ????? ???????????, ??? ??????????? ?????? ???????? ?? 2-3 ?????????. ? ????? ?????? ???????????? ????? ? ?????????? ????? ?? ??????????? ???????? ????????????? ?? ?????? ?????????. ???? ?? ?????? ??????? ?? ????????????? ?????? ?????, ?? ???????? ????????????. ??? ???? ?????, ????? ??? ???? ???????????? ??? ???????????? ? ??????????? ???????????, ??? ???? ??????????? ?????????? ?? ???????????? ??? ??????????? ?? ?????????, ? ??????? ??? ????????????.
Метод введения переменной состояния . Метод применим к любым программам и допускает автоматическое применение. Процесс преобразования состоит из пяти шагов.
Рисунок 5 - Неструктурированная программа
1. Каждому блоку неструктурированной схемы приписывается номер.
2. В программу вводится новая переменная i целого типа.
3. Функциональные блоки неструктурированной схемы заменяются функциональными блоками, которые выполняют те же самые вычисления и присваивают переменной i целое значение, идентифицирующее номер блока-приемника исходной схеме.
4. Логические блоки исходной схемы преобразуются таким же образом.
?????? ????????????? ????-?????, ?????? ?? ?????, ?????????? ??
Рисунок 6 - Структурированная форма программы
Начальное значение i=1.
Затем последовательно выполняется опрос значений переменной i и т.д.
Рисунок 7 - Схема выполнения программы.
Программная функция циклической программы описывается системой рекурсивных функций. При этом для каждого i-го узла слияния, начинающего цикл, вводится вспомогательная функция f, определяющая функцию всех узлов схемы выполнения, следующих за i-м узлом.
На рисунке 8 приведен пример построения программной функции циклической программы. В данном случае [P] рекурсивно зависит от f1 и f2.
а) циклическая программа
?) ?????? ??????????
в) вывод системы рекурсивных функций
??????? 8 - ?????? ?????????? ??????????? ???????
Недостатки метода:
- разрушается форма и топология исходной блок-схемы;
- снижается эффективность программы, т.к. каждый функциональный блок дополняется операцией присвпаивания значения переменной состояния и значение переменной состояния должно опрашиваться после исполнения каждого блока.
Достоинства метода:
- преобразованная введением переменной состояния форма может быть неограниченно продолжена, не усложняя при этомобщего подхода;
- облегчается документирование программы, т.к. каждому блоку исходной схемы соответствует определенное состояние программы;
- облегчается процесс отладки, если програма не выполняется должным образом, то довольно просто трассировать переменную состояния, что дает ясное прдставление о ходе управления программой.
Метод булевого признака . Существует еще один метод структурирования программ, содержащих циклы. Данный метод требует введения в программу некоторого признака задается в некоторой точке выше цикла; конструкциями типа DO-WHILE или REPEAT-UNTIL осуществляется управление циклом до тех пор, пока названный признак сохраняет заданное значение; некоторыми условиями внутри цикла определяется момент смены значения признака. Таким тбразом, программа продставляется в форме:
--> ЧИТАТЬ ПОЛНОСТЬЮ <--