Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_5__Постановка_и_алгоритмизация_решения_э...docx
Скачиваний:
10
Добавлен:
27.11.2019
Размер:
97.49 Кб
Скачать

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

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

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

На практике редко удается представить схемы алгоритмов решения задачи в виде линейной структуры. Часто возникает необходимость описывать анализ исходных данных или промежуточных результатов, для того чтобы на его основе указать дальнейшее направление вычислений. Алгоритм такого процесса называется алгоритмом разветвляющейся структуры, а направления, по которым он может следовать, – ветвями.

Каждое разветвление появляется вследствие проверки некоторого логического условия, при выполнении которого выбирается одна ветвь, а при невыполнении – другая. В каждой конкретной ситуации процесс реализуется только по одной ветви, а выполнении остальных исключается.

Характерной особенностью большинства используемых на практике алгоритмов является их цикличность, т.е. неоднократное выполнение отдельных частей вычислительного процесса. Участок, многократно повторяемый так, что после выполнения последнего действия требуется переход к выполнению первого действия (как правило, с другими числовыми данными), называется циклом. Вычислительные процессы, содержащие циклы, именуются циклическими. По способу определения числа повторений цикла выделяются алгоритмы с явно заданным числом повторений (арифметические циклы) и числом повторений которое заранее неизвестно и не может быть вычислено (итерационные циклы). Исходя из структуры циклы разбиваются на простые (не содержащие внутри других циклов) и сложные. Любой цикл, включающий один или несколько других циклов, называется сложным, или вложенным. Охватывающий их цикл принято называть внешним, а входящие во внешний цикл – внутренними.

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

Часто структурный подход отождествляется с таким конструированием алгоритмов, при котором применяются три основные базовые структуры: СЛЕДОВАНИЕ, РАЗВИЛКА, ПОВТОРЕНИЕ. Доказано,что алгоритм решения любой логической задачи можно составить только их них. Этот результат установлен Боймом и Якопини. При описании структур употребляются специальные обозначения для обработки, проверки, слияния, а также соединительные линии.

Д ействие, которое необходимо выполнить, обозначается прямоугольником (“процесс”), в который входит и из которого выходит только одна линия управления. Этот прямоугольник называется узлом обработки или функциональным узлом.

Действие f, указываемое в нем, является типичным оператором присваивания. Термин «функциональный узел» здесь особенно уместен, так как любой оператор присваивания по своему воздействию на данные полностью эквивалентен математической функции.

Операция проверки обозначается символом, который называется предикатным узлом. Он представляет собой ромб («решение»), в который входит одна линия управления, а выходит две. Внутри него помещается имя предиката Р (условие, которое следует проверять):

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

Естественно, кроме того, ввести узел с двумя входами и одним выходом. Он изображается на блок-схеме точкой в месте соединения путей управления и называется узлом слияния:

Изменений данных он также не предусматривает. Это просто соединение, как правило, с двумя входами и одним выходом. Фактически же он может содержать более двух входных линий. Узлы с произвольным количеством входов можно представить в виде последовательности узлов слияния:

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

Следование. Это самая важная из структур, обозначающая, что два условия должны быть выполнены друг за другом:

один вход

один вход

S1

S2

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

Развилка. Эта структура (ЕСЛИ – ТО – ИНАЧЕ) обеспечивает выбор между двумя альтернативами. Делается проверка и затем выбирается один из путей. Каждый из них (альтернативы ТО и ИНАЧЕ) ведет к общей точке слияния. Выбираемые пути могут обозначаться метками истина/ложь (T/F), да/нет, +/– и т.п. развилка может быть двух видов: полная условная конструкция и неполная.

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

S1

P

один вход

один выход

S2

Если значение условия Р «истина», то выполняется действие S1, если “ложь” – S2.

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

+

-

+

-

один выход

Иногда неполную условную конструкцию называют обходом. Можно указать блок без действий и пометить его пусто.

один выход

Одно или оба действия допустимо заменять другими структурами. Например, внутри структуры ЕСЛИ – ТО – ИНАЧЕ можно повторно употреблять структуру ЕСЛИ – ТО – ИНАЧЕ.

S1

P2 P

+

-

P1

S2

S3

Однако глубина вложенности не должна быть слишком большой, иначе блок-схема потеряет наглядность и станет трудночитаемой.

Выбор. Структура ВЫБОР (типа case) – это обобщение развилки. Она рациональна в том случае, если с помощью одной проверки нужно выбрать одну из нескольких альтернатив. Изобразить ее можно следующим образом:

Как и в структуре ЕСЛИ – ТО – ИНАЧЕ, пути после разных действий сходятся в одной точке. Управление от точки входа всегда попадает в точку выхода, выбор пути при этом полностью определяется проверкой.

С

-

+

труктура ВЫБОР эквивалентна структуре с вложением ЕСЛИ – ТО – ИНАЧЕ, изображенной ниже.

1?

Цикл (или повторение). Базовая структура ЦИКЛ может быть двух видов: ЦИКЛ – ПОКА и ЦИКЛ – ДО. Базовая структура ПОВТОРЕНИЕ – ЦИКЛ – ПОКА (типа whiledo) имеет вид

Вычисляется логическое выражение Р, если оно истинно, то выполняется действие S и снова вычисляется Р. Такая итеративная деятельность продолжается до тех пор, пока проверяемое условие истинно. Как только оно становится ложным, происходит выход из этой структуры.

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

Базовая структура ПОВТОРЕНИЕ ЦИКЛА-ДО (структура типа dountil) имеет следующий вид:

Структура ЦИКЛ – ДО предоставляет те же возможности, что и ЦИКЛ – ПОКА, за исключением двух моментов:

А) в ней проверка производится после выполнения блока S, а в структуре ЦИКЛ – ПОКА – перед ним; таким образом, ЦИКЛ – ДО независимо от значения Р будет выполняться хотя бы один раз;

Б) ЦИКЛ – ДО завершается, когда Р становится истинным, а ЦИКЛ – ПОКА – когда Р становится ложным, т.е. выполняется до истинности условия.

Структура ЦИКЛ – ДО эквивалентна следованию из действия S и ЦИКЛ – ПОКА:

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

Три рассмотренные структуры – СЛЕДОВАНИЕ, РАЗВИЛКА, ПОВТОРЕНИЕ могут сочетаться одна с другой. Следовательно, где бы в блок-схеме ни появился отдельный прямоугольник, он может быть заменен любой из базовых структур.

Вопросы для самоконтроля

1. Дайте определение понятию «алгоритм».

2. Назовите свойства алгоритма и охарактеризуйте их.

3. Перечислите этапы решения экономических задач.

4. Перечислите способы описания алгоритма и охарактеризуйте их.

5. Назовите формы представления алгоритма.

6. В чем особенность условной структуры алгоритма?

7. Что представляет собой циклическая структура алгоритма?