Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИНФОРМАТИКА.Ч1.doc
Скачиваний:
15
Добавлен:
16.11.2019
Размер:
2.9 Mб
Скачать

9.6. Структурный подход к разработке алгоритмов

Реальные алгоритмы и вычислительные процессы представляют собой совокупность всех рассмотренных базовых структур. Все базовые структуры имеют один вход и один выход. Таким образом, любую базовую структуру можно представить в виде функционального модуля, также имеющего один вход и один выход (рис. 22). Для графического изображения функциональных модулей в схемах алгоритмов используется символ предопределённого процесса.

Рис. 22. Преобразование базовых структур

Совокупность функциональных модулей, в свою очередь, может образовывать рассмотренные выше базовые структуры, которые также могут быть представлены в виде функциональных модулей (в качестве примера на рисунке 22 приведено преобразование базовой структуры следования, состоящей из функциональных модулей в один функциональный модуль). Говоря другими словами, одна базовая структура может быть вложена в другую базовую структуру. Последовательное объединение базовых структур в функциональные модули в конечном итоге приводит к тому, что любой алгоритм может быть представлен одним функциональным блоком-модулем. При этом преобразование является дуальным, т.е. возможно и обратное преобразование.

При разработке любого алгоритма первоначально определяются исходные данные, требуемый результат и основные этапы, приводящие к решению поставленной задачи. При дальнейшей разработке необходимо придерживаться принципа постепенной детализации функциональных модулей, из которых составлялся первоначальный вариант алгоритма. Такая разработка алгоритмов получила название нисходящего («сверху вниз») проектирования, пример которого показан на рисунке 23.

Рис. 23. Нисходящее проектирование

Процесс проектирования начинается с составления спецификации и проектирования головного алгоритма. Затем для каждого функционального модуля головного алгоритма в свою очередь определяются спецификации и выполняется проектирование. Процесс продолжается до достижения приемлемого уровня детализации. При этом, в отличие от восходящего проектирования, заключающегося в объединении функциональных модулей в единый алгоритм, изменение в спецификациях, вызванных изменениями в более высокой иерархии алгоритма, менее вероятно.

Таким образом, функциональный модуль представляет собой совокупность логически связанных операций или функциональных модулей, выполняющих некоторое законченное действие. В теории алгоритмов доказано, что любой алгоритм можно представить композицией всего лишь четырёх базовых структур: СЛЕДОВАНИЕ, ВЕТВЛЕНИЕ, ЦИКЛ-ДО и ЦИКЛ-ПОКА. Строгое структурное проектирование определяет использование только этих структур (при этом следует отметить, что рассмотренная выше структура обход не является базовой). Однако в практике проектирования алгоритмов часто возникают типовые ситуации, такие, например, как досрочный выход из цикла, обход и прочие. Они легко преобразуются в структурные схемы, однако часто при этом теряется наглядность алгоритма (рис. 24).

Рис. 24. Преобразование неструктурного алгоритма

Поскольку нестандартные алгоритмы также имеют один вход и выход, то нестрогое структурное проектирование допускает их разумное использование.

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

Вывести на печать таблицу значений функции , где значение x изменяется в диапазоне от до с шагом ; для функции, имеющей вид:

Разработка алгоритма начинается с выделения основных этапов. Первоначально можно выделить два этапа: ввод исходных данных и вычисление таблицы значений функции. Проанализировав задачу и определив исходные данные для её решения, составим спецификацию на алгоритм для первого уровня детализации.

Назначение: построение таблицы значений функции.

Метод решения: неизвестен (определяется функциональным модулем).

Входные данные: n, y, xmin, xmax, x.

Выходные данные: определяются функциональным модулем.

Построим алгоритм по данной спецификации (рис. 25а). Выполним детализацию функционального модуля 3. Построение таблицы значений функции f (x, y) состоит из цикла с параметром x. В теле цикла, в зависимости от значения x, вычисление ведётся по одному из двух выражений, т.е. внутри цикла имеет место ветвление (на данном этапе можно было бы ограничиться лишь циклом, однако предлагаемый уровень детализации не ухудшает наглядность алгоритма).

Назначение: построение таблицы значений функции.

Метод решения: ветвление в цикле.

Входные данные: n, y – для вычисления выражений; xmin, xmax, x – параметры цикла.

Выходные данные: значения f(x, y) для каждого значения х.

Алгоритм, раскрывающий функциональный модуль 3 и разработанный с учётом вышеприведённой спецификации, приведён на рисунке 25б. Дальнейшей детализации требуют блоки 3 и 4. Алгоритмы для расчёта суммы в обоих случаях идентичны и представляют собой цикл, в котором выполняется суммирование и вычисление очередного значения y.

Назначение: вычисление значения функции.

Метод решения: суммирование в цикле.

Входные данные: n – верхний предел суммирования;

x – значение первой переменной;

y – значение второй переменной.

Выходные данные: значение f(x, y).

Перед началом цикла (рис. 25в, г) обнуляется значение переменной f, а значение переменной z, введенной для рекуррентного подсчёта yi, приравнивается значению y. Переменная z введена для того, чтобы не изменилось исходное значение y.

Рис. 25. Подетальная разработка алгоритма