Структура подпрограммы-процедуры с параметрами имеет вид
PROCEDURE <имя> (<формальные параметры>);
{ раздел описания (метки, константы, типы, переменные ) }
BEGIN
{ операторы подпрограммы }
END;
Обращение к процедуре производится по имени с указанием фактических параметров, согласованных с формальными параметрами, или без их указания. Возврат из подпрограммы в основную программу происходит к оператору, стоящему следующим за ее вызовом.
Пример программы для вычисления второй и четвертой степеней числа:
PROGRAM PROS;
VAR X, Y, A, A2, A4: INTEGER; {A – исходная переменная,
A2 - A2, A4 - A4 , глобальные переменные}
PROCEDURE STEP24; {процедура без параметров}
BEGIN
A2:=A*A;
A4:=A2*A2;
WRITELN(A:5, A2:5, A4:6);
END;
BEGIN {основная программа}
READ(Y, X);
WRITELN('Число; квадрат; куб');
A := X;
STEP24; {вызов подпрограммы}
A := Y;
STEP24; {вызов подпрограммы}
END.
Любой из формальных параметров процедуры может быть либо параметром-значением, либо параметром-переменной. Формальному параметру-значению (обычно для задания исходных данных) может соответствовать фактический параметр - константа, переменная или выражение. Параметру переменной может соответствовать только переменная. Обычно параметры-переменные используются для передачи результатов в вызывающую программу. Параметрам-переменным в заголовке функции должно предшествовать слово VAR.
Пример: PROCEDURE P(Y, X: REAL; VAR Z1, Z2: REAL);
где Y, X - параметры-значения, Z1, Z2 - параметры-переменные.
Передачу результатов можно проводить и через глобальные переменные. Однако злоупотребление глобальными переменными делает программу запутанной и сложной в отладке. В связи с этим рекомендуется там, где это возможно передавать результаты с помощью параметров-переменных. С другой стороны, нежелательно описание всех формальных параметров параметрами-переменными.
Чем меньше параметров объявлено параметрами-переменными и чем меньше используется глобальных переменных, тем меньше возможность получения непредвиденных программистом побочных эффектов в программе.
При наличии одноименных переменных в программе и подпрограмме в подпрограмме будут доступны только локальные переменные.