§ 1.5 Структурное программирование
Практика программирования показала необходимость научно обоснованной методологии разработки и документирования алгоритмов и программ. Эта методология должна касаться анализа исходной задачи, разделения её на достаточно самостоятельные части и программирования этих частей по возможности независимо друг от друга. Такой методологией, зародившейся в начале 70-х годов и
получившей в последнее время широкое распространение, является структурное программирование. По своей сути оно воплощает принципы системного подхода в процессе создания и эксплуатации программного ЭВМ. В основу структурного программирования положены следующие достаточно простые положения:
1. Алгоритм и программа должны составляться поэтапно (по шагам).
2. Сложная задача должна разбиваться на достаточно простые, легко воспринимаемые части, каждая из которых имеет только один вход и один выход.
3. Логика алгоритма и программы должна опираться на минимальное число достаточно простых базовых управляющих структур.
Использование
этих положений позволяет внести
определённую
систему в труд программиста и составлять
удобочитаемые
алгоритмы (и программы), которые легко
изучать и проверять. Фундаментом
структурного программирования
является теорема
о структурировании.
Эта
теорема
устанавливает, что, как бы сложна ни
была задача, схема
соответствующей программы всегда может
быть
представлена с использованием весьма
ограниченного
числа элементарных управляющих структур.
Элементарные структуры могут соединяться
между собой, образуя
более
сложные структуры, по тем же самым
элементарным
схемам. Базовыми элементарными структурами
являются
структуры, изображенные на рис. 1.3. Они
обладают
функциональной полнотой, т. е. любой
алгоритм может
быть реализован в виде композиции этих
трёх конструкций.
Каждая из конструкций имеет свое
название.
Рис.1.3 Базовые элементарные структуры.
Так, первая из них
(рис. 1.3, а) называется структурой типа
последовательность (или просто
последовательностью), вторая (рис.
1.3, б) — структурой выбора (разветвлением),
третья (рис. 1.3, в) — структурой цикла с
предусловием. При словесной записи
алгоритма указанные структуры имеют
соответственно следующий смысл:
«выполнить S
;
выполнить S
»,
«если P, то выполнить S
,
иначе выполнить S
»,
«до тех пор, пока Р, выполнять S», где
Р — условие; S, S
,
S
— действия.
Рассматривая схему программы, можно выделить в ней части (фрагменты), достаточно простые и понятные по структуре. Представление этих фрагментов укрупненными блоками существенно облегчает восприятие алгоритма (а в дальнейшем и программы) в целом. Достаточно часто структурное программирование подразумевает использование более трех базисных структур. Применительно к языку Паскаль, в котором наиболее полно нашли свое отражение идеи структурного программирования, целесообразно при проектировании алгоритмов дополнительно использовать еще четыре элементарные структуры: сокращенную запись разветвления (рис. 1.4 а); структуру варианта (рис. 1.4 б); структуру повторения или цикла с параметром (рис. 1.4 в); структуру цикла с постусловием (рис. 1.4 г). Каждая из структур, показанных на рис. 1.3 и 1.4, имеет один вход и один выход. В языке Паскаль имеются средства (операторы), позволяющие непосредственно реализовать в программе любую из этих структур, поэтому правильное использование типовых структур в процессе разработки
алгоритма обеспечивает упрощение последующих этапов решения задачи на ЭВМ.
В качестве примера
структурного подхода к проектированию
алгоритма рассмотрим задачу табулирования
функции, т. е. вычисление некоторой
функции z
=z(x)
одной переменной х,
изменяющейся от начального значения
x
с
постоянным шагом h
до конечного значения x
-сокращенно
обозначается х=
х
(
h
)
x
.
Пусть функция z(x) имеет вид
z(x)=
,
sin x, если х ≤ а,
где
у
= x
,
если а < х
< b,
если х ≥
b;
х = -3; h =1;
x =10; а=0; b=3,85.
Рис. 1.4 -Дополнительные элементарные структуры.
Рис. 1.5 - Нисходящее проектирование схемы алгоритма табулирования функции z = z(х)
Процесс нисходящего проектирования схемы алгоритма табулирования функции z = z(х) показан на рис. 1.5. На первом уровне детализации схема (блоки 1.1—1.5) отражает процесс табулирования функции в наиболее общем виде. Для этого используются структуры типов последовательность и цикл с постусловием (подробнее о проектировании алгоритмов и программ циклической структуры см. § 3.2). Далее осуществляется детализация блока 1.3, который представляется в виде последовательности блоков 2.1-2.3 второго уровня. Так как функция у = у(х), входящая в качестве аргумента в определение функции z = z(х), является сложной, то она определяется разветвляющейся структурой, детализация которой осуществлена на 3-м и 4-м уровнях. Проведенную детализацию блоков, осуществляющих определение функции у = у(х), можно пояснить с помощью зависимостей
y = sinx, если х ≤ а,
y (x), если х > а,
где y = х , если х < b,
,
если х ≥ b,
которые легко обеспечивают применение структуры разветвления.
Подставляя вместо блоков, которые подлежат детализации, соответствующие структуры более низкого уровня, получаем окончательную схему алгоритма табулирования функции z = z(х), изображенную на рис. 1.6.
Рис. 1.6 - Схема алгоритма табулирования функции z = z(x)
1.6 Структурограммы
Способ изображения алгоритма с помощью структурограммы (схемы Насси-Шнейдермана) реализует в себе требования структурного программирования в схемах алгоритмов. Он позволяет изображать схему передач управления не с помощью явного указания линий потоков информации, а с помощью представления вложенности структур. Некоторые из используемых в этом способе графических символов (блоков) соответствуют изображению символов на схемах. Для изображения алгоритмов допускается использование следующих блоков:
Блок обработки (вычислений). Каждый символ структурограммы является блоком обработки. Каждый прямоугольник внутри любого символа представляет собой также блок обработки (рис. 1.7 а).
Блок следования. Этот символ объединяет ряд следующих друг за другом блоков обработки (рис, 1.7 б).
Блок решения. Этот символ применяется для обозначения структуры типа разветвления. Условие располагается в верхнем треугольнике, варианты решения — по сторонам треугольника, а процессы обработки обозначаются прямоугольниками (рис. 1.7 в).
4. Блок варианта. Этот символ представляет собой расширение блока решения. Те варианты выхода из этого блока, которые можно сформулировать точно, размещаются слева. Остальные объединяются в один, называемый выходом по несоблюдению условий, и располагаются справа. Если можно перечислить все возможные случаи, правую часть можно оставить незаполненной или совсем опустить (рис. 1.7 г).
5. Блок цикла с предусловием. Этот символ обозначает циклическую конструкцию с проверкой условия в начале цикла. Условие продолжения цикла размещается в верхней полосе, сливающейся с левой полосой, указывающей границу цикла. Данная структура может быть использована также для обозначения цикла с параметром. При этом вверху указывают закон изменения параметра цикла (рис. 1.7, д).
6. Блок цикла с постусловием. Этот символ аналогичен блоку цикла с предусловием, но условие располагается внизу. Это условие окончания цикла (рис. 1.7, е).
Каждый блок имеет форму прямоугольника и может быть вписан в любой внутренний прямоугольник любого другого блока. Блоки заполняются элементами словесной записи тем же способом, что и алгоритмы, изображенные с помощью предложений на естественном языке или с использованием математических обозначений.
Рис. 1.7 - Блоки структурограмм.
Примеры применения структурограмм для описания алгоритмов нахождения наибольшего общего делителя и поиска максимума и минимума в конечной последовательности чисел приведены на рис. 1.8.
В ряде случаев для упрощения и наглядности алгоритма применяются модификации структурограмм. Для этого используют символы структурограмм одновременно с символами схем или символами других способов описания алгоритмов.
Например, на рис. 1.9 показана модифицированная структурограмма
алгоритма
поиска
максимума и минимума в последовательности
чисел а
,
а
,
…, а
.
В
структурограмме отдельно изображены
блоки ввода исходных данных и печати
рез
ультатов, а также упрощено изображение блока решения с условием а < min.
Рис.1.9 - Модифицированная структурограмма.
