Процесс разработки алгоритмов и программ достаточно сложен и содержит некоторые элементы творчества. Для одной и той же задачи возможно множество алгоритмов ее решения, различающихся сложностью и эффективностью, и как правило, программы, реализующие различные алгоритмы отличаются сложностью, эффективностью и количеством допущенных логических ошибок. На выявление логических ошибок, а также на модификацию разрабатываемых участков программы уходит значительная часть времени программистов. Поэтому разрабатываемые алгоритмы должны быть простыми и понятными, легко проверяемы и допускать возможность ее модификации без существенной перестройки всей конструкции.
Для достижения указанных свойств при разработке алгоритмов придерживаются особой методики, называемой структурным подходом. Суть этого подхода - применение некоторых базовых структур алгоритмов. Применение их снижает вероятность появления ошибок при разработке алгоритмов, повышает надежность, упрощает понимание и модификацию алгоритмов. При структурном подходе к конструированию алгоритмов алгоритмы как бы составляются из следующих базовых структур: следование, развилка, выбор, цикл, каждая из которых имеет один вход и один выход.
Алгоритм решения любой логической задачи можно составить только из них. При описании структур употребляются специальные обозначения для действий обработки информации, проверки условия, выбора действия и слияния соединительных линий (Рис.3.14).
Функциональный узел включает действие, которое необходимо выполнить. Решение по условию определяет порядок выхода (выбирается один из выходов, но не оба сразу) в соответствии с тем, какое значение принимает результат проверки условия: "истина" или "ложь". Решение по коду определяет порядок выхода (выбирается один из выходов) в соответствии с тем, какое значение принимает код.
№ п. | Название | Обозначение | Примечание |
![]() | Узел обработки или функциональный узел | ||
![]() | Решение по условию | Р – некоторое логическое условие | |
![]() ![]() | Решение по коду | К – значение кода | |
![]() | Узел слияния |
Рис.3.14 Обозначения, принятые при описании структур алгоритмов
Узел слияния изменений данных не предусматривает. Это просто соединение с двумя входами и одним выходом. Если требуется соединение произвольного без преобразования сигналов количества входов, то такую конструкцию можно представить в виде последовательности узлов слияния (рис.3.15).
Ниже приведены изображения базовых структур.
Следование. Эта базовая структура состоит из двух функциональных блоков, размещенных и выполняемых последовательно друг за другом (Рис. 3.16).
Любое обозначение обработки можно заменить следованием, но, повторяя эту замену, можно изобразить последовательное исполнение любого количества функций. Следование - это такая структура, в которой ряд операции выполняется в линейном порядке.
Развилка - состоит из логического элемента и одного или двух функциональных узлов. Эта структура обеспечивает выбор между двумя ветвями. Развилка может быть двух видов: полная условная конструкция, когда в каждой ветви присутствует функциональный узел и неполная условная конструкция, когда функциональный узел присутствует только в одной из ветвей. Каждая из ветвей ведет к общей точке слияния. Выбираемые пути могут обозначаться метками: истина/ложь (T/F), да/нет, +/- и т.п. Полная условная конструкция схематически может быть представлена рисунком 3.17. Неполная условная конструкция имеет место тогда, когда одному из результатов проверки не требуется выполнение функционального блока (рис.3.18).
![]() |
Выбор - состоит из логического узла проверки состояния кода и множества функциональных узлов. Эта структура обеспечивает выбор из множества n ветвей, каждая из которых может содержать функциональный узел, либо быть пустой. Все ветви сливаются в одной точке. Схематически базовая структура выбор изображено на рис.3.19.
В зависимости от состояния кода выбирается та или иная ветвь.
Базовая структура цикл может быть двух видов: цикл - пока и цикл - до. Базовая структура цикл - пока имеет вид рис.3.20. Вначале проверяется условие Р. Если Р истинно, то многократно выполняется действие S. Если условие становится ложным, то цикл завершается. Действие S циклически выполняется при последовательных значениях по крайней мере одного параметра. Так как условие проверяется до действия S, то оно может ни разу не выполниться. При выполнении действия S параметры условия Р должны изменяться, иначе программа зациклится.
Базовая структура цикл - до имеет вид на рис.3.21.
цикл - до обеспечивает многократное выполнение действия S также, как и цикл - пока, за исключением двух моментов.
1. Проверка условия производится после выполнения действия S, поэтому действие S выполняется хотя бы один раз.
2. цикл - до завершается, когда Р истинно, а цикл - пока тогда, когда Р ложно.
Любой алгоритм может быть разработан с использованием только базовых структур. Функциональные узлы S1, S2 и S, в свою очередь, могут представлять собой любую базовую структуру. Конструируемые таким образом алгоритмы имеют четкую и ясную структуру, легко поддаются проверке.
Пример: Алгоритм поиска большего из трех чисел (А, В, С). Алгоритм представляет собой следование двух развилок (рис.3.22). В первой (полная конструкция) отыскивается большее из двух чисел А и В. Большее из них становится значением переменной Y. Во второй (неполная конструкция) значение Y сравнивается с третьм числом, и если Y < С, то Y заменяется значением С.
![]() |
Рассмотренные структуры: Следование, Развилка, Цикл, Выбор - могут сочетаться в любой последовательности, составлять несколько уровней вложенности одна в другую. Например, в схеме рис.3.23 функциональные узлы S1 и S2 представляют собой структуры Следование рис.3.24,а,б. В свою очередь узлы S12 и S22 представляют собой соответственно структуры Цикл-пока (структура типа whiledo) и Цикл-до (структура типа dountil) рис.3.25. В результате развернутая схема будет иметь вид рис.3.26. Следовательно, любой функциональный узел может быть заменен любой базовой структурой.