Программная логика, т. е. сущность основных этапов вычислений и последовательность их выполнения, наиболее четко отражается в блок-схемах, представляющих собой способ графического описания алгоритмов. Отдельным этапам вычислений в блок-схемах соответствуют прямоугольники различных размеров. Прямоугольники соединяются стрелками, показывающими порядок выполнения отдельных вычислений.
Пожалуй, одним из самых существенных элементов блок-схем является блок присваивания, соответствующий этапу, на котором выполняются различные арифметические и логические операции, и при этом результаты записываются в память. Блок присваивания имеет вид прямоугольника, внутри которого помещается специального вида предложение, описывающее необходимые вычисления. В наиболее общей форме блок присваивания выглядит так:
переменная выражение
Здесь переменная — это символическое имя некоторой ячейки памяти, а выражение представляет собой обычно алгебраическое выражение, значение которого присваивается переменной (помещается в память по соответствующему адресу). Стрелкой-«-изображается операция записи в память. Таким образом, приведенный выше блок означает следующее: «Вычислить выражение справа от стрелки и записать результат по адресу, задаваемому символическим именем, расположенным слева от стрелки». В качестве примера мы можем рассмотреть блок
x?y2-2
что соответствует вычислению разности между квадратом числа, находящимся в памяти по адресу у, и числом 2 и записи результата по адресу х. Значение выражения считается определенным только в том случае, когда всем входящим в него переменным уже присвоены значения. В предыдущем примере значение у2—2 невозможно вычислить, если предварительно какое-то значение не было присвоено переменной у. Мы можем написать что-нибудь вроде
Можно также поместить оба предложения в один блок:
В случае когда внутри блока записано более, чем одно предложение, вычисления выполняются в обычном порядке, т.е. сверху вниз.
Первым блоком блок-схемы всегда является блок начало, позволяющий читателю легче определить начало блок-схемы при рассмотрении последовательности вычислений. Блок начало имеет вид кружка с записанным внутри словом START:
Аналогичнаблок конец символизирует окончание блок-схемы:
Информация, вводимая с перфокарт, обозначается на блок-схеме в виде блока, по форме напоминающего перфокарту. Внутри такого блока пишутся имена ячеек, в которые был осуществлен ввод. Так, например, блок
означает «Считать три числа с перфокарт и запомнить первое по адресу х, второе — по адресу у, и третье — по адресу z». Вывод на печать обозначается на схеме в виде блока, по форме напоминающего неровно оторванный лист выдачи. Список имен ячеек, содержимое которых должно быть распечатано, приводится внутри блока.
означает «Распечатать содержимое ячеек а, bи с».
Отдельные блоки блок-схемы соединяются с помощью стрелок. При чтении блок-схемы мы просто просматриваем ее в порядке, определяемом направлением стрелок, предполагая, что при прохождении каждого из блоков выполняются соответствующие ему вычисления. На рис. П.1 приведена блок-схема программы, вводящей с карт два числа, S иТ, вычисляющей их сумму SUM, разность DIF и распечатывающей результаты в порядке S, Т, SUM и DIF.
Простая блок-схема.
При описании на языке блок-схем условных переходов пользуются несколькими вариантами условных обозначений. В данном тексте блоки проверки условий имеют вид ромбов, внутри которых записываются проверяемые условия. Из каждого блока проверки условий исходят две стрелки. Какая стрелка в данный момент соответствует направлению продолжения вычислений, зависит от того, выполнено или нет приведенное в этом блоке условие. Пусть, например, блок- схема содержит следующий блок:
ЭТОТ блок соответствует проверке текущего содержимого ячейки памяти с именем А. Если в момент перехода к этому блоку содержимое А было равно 10, то порядок продолжения вычислений определяется стрелкой ДА. В противном случае нужно идти по стрелке НЕТ.
В некоторых случаях для изображения блоков проверки условий пользуются овалами:
или блоками такого вида:
В данном тексте для представления блоков проверки условий выбран ромб, поскольку его легче начертить от руки.
Проиллюстрируем составление блок-схем на примере блок-схемы программы, предназначенной для решения квадратных уравнений (рис. П.2). Программа считывает с карт значения коэффициентов уравнения
aх2+bх+с=0
При этом предполагается, что а и с не равны 0. Корни уравнения, как известно, определяются по формуле
В блоке проверки условий исследуется значение дискриминанта D=b2—4ас. Если D положителен, то у нас получаются действительные корни, как и отмечено на блок-схеме. Значения корней вычисляются и распечатываются с соответствующим заголовком. (Распечатываемый заголовок на блок-схеме обозначается с помощью последовательности символов, заключенных в кавычки.) В случае когда D отрицателен, вычисляются действительные и мнимые части корней, REAL и IMAG, и также распечатываются с соответствующими заголовками. Просмотрите блок-схему рис. П.2 и убедитесь в том, что если значениями коэффициентов уравнения, вводимых с перфокарт, являются соответственно 1,2 и 5, то в результате работы программы будет распечатана следующая выдача:
Рис. Блок-схема программы для решения квадратных уравнений.
COMPLEX ROOTS REAL PART IS 1 IMAGINARY PART IS 2
Если же коэффициенты равны соответственно 1, 1 и — 6, то полученная выдача будет содержать
REAL ROOTS
2 -3