Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_пас_3.doc
Скачиваний:
111
Добавлен:
04.11.2018
Размер:
13.31 Mб
Скачать

1.5. Конструирование сложных алгоритмов

При построении сложных алгоритмов будем, по-прежнему, пользоваться только базовыми конструкциями. Это сделает алгоритм понятным, удобным для модификации и записи на языке программирования.

Существует несколько стратегий конструирования сложных алгоритмов. Мы будем использовать стратегию “сверху - вниз”. При таком подходе исходная задача разбивается на подзадачи. Каждая подзадача в свою очередь, анализируется и может быть разбита на подзадачи следующего уровня. Процесс декомпозиции заканчивается, когда все подзадачи могут быть реализованы простыми алгоритмами. Таким образом, получается иерархия алгоритмов.

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

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

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

Чтобы построить такую таблицу, надо задать х значение х-нач и для этого фиксированного значения рассчитать и напечатать ряд значений f(x,y) для последовательности значений у от у-нач до у-кон. Затем изменить значение х на следующее и опять считать f(x,y) для всех значений у. И так до тех пор, пока не будет построена таблица для всех возможных пар х,у.

Алгоритм верхнего уровня для решения этой задачи представлен на рис.7 а). Он состоит из одного цикла. В блоке подготовки этого цикла задается начальное значение переменной х. В теле цикла стоит оператор печати текущего значения х и абстракция, которая раскрывается блок-схемой на рис. 7 б). Раскрытие этой абстракции представляет собой также циклический алгоритм, в котором изменяется переменная у, вычисляется и печатается значение функции f(x,y).

Рис. 7

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

2. От алгоритма к программе

Чтобы выполнить алгоритм на ЭВМ, надо представить его в виде текста на языке программирования, т.е. в виде программы. Программа включает в себя кроме алгоритма описание всех данных, используемых алгоритмом.

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