В процедурном программировании используются ряд новых ключевых слов и возможностей для построения многострочных пользовательских процедур:
- PROG - оператор последовательного выполнения операторов, функций и прочих определяющих конструкций, записанных в качестве параметров и выполняемых до тех пор, пока не встретятся на пути вычислительного процесса операторы EXIT или RETURN;
- LOOP - оператор цикла последовательно выполняет, стоящие за ним операторы до тех пор, пока не встретятся на пути вычислительного процесса операторы EXIT или RETURN, которые цикл заканчивают, возвращая при этом последнее значение вычисленного оператора и/или переменной ЦИКЛА;
- EXIT - где бы не встретился этот оператор, продолжение вычислительного процесса начнется со следующего за ним оператора;
- RETURN(*) - оператор заканчивающий процедуру или цикл, возвращая значения переменных, перечисленных в списке аргументов (*).
В пределах контекстов PROG и LOOP используются как внутренние так и внешние переменные, которым могут назначаться и/или присваиваться новые значения. По выходу из этих процедур значения внутренних переменных возвращаются к исходным, а внешние сохраняются измененными.
Для демонстрации процедурного программирования приведем программу, определяющую процедуру гамма-коррекции матрицы размером (51x51) с целыми положительными числами от нуля до 255. Результатом работы процедуры с именем Mgam(Misx, ?, Mnew) должна оказаться новая матрица с целыми числами и тем же самым диапазоном их представления (см. раздел 5.3.2).
Текст процедуры можно записывать в командную строку, как определение любой функции с фактическими параметрами, или в виде многострочной записи в командную строку, которая инициируется из меню последовательным обращением:
Options Display Multi-line Expression Entry.
Текст, записанный шрифтом Times New Roman можно выделить из электронного первоисточника целиком, через буфер перенести в многострочную командную строку и оттуда вывести на поле алгебры.
Mgam(Misx, ?, Mnew) :=
PROG(
Mo := Misx,
Mn := VECTOR(VECTOR(0, i, 1, 51), j, 1, 51),
“создание_рабочего_массива”,
i := 1,
LOOP(
“начало_цикла_по_i”,
j := 1,
LOOP(
“начало_цикла_по_j”,
ko := Moij,
Mnij := FLOOR(255*(ko/255)^?),
IF(j < 51,
j :+ 1,
exit) ) ,
IF(i < 51,
i :+ 1,
exit) ),
RETURN Mnew := Mn,
exit)