Параметри-змінні
Для того, щоб результат обчислень у тілі процедури зручно було використати в програмі, треба не фіксувати змінну, якій присвоюється одержане значення, а зробити її також параметром. Позначимо цю змінну, наприклад, res і введемо її в список формальних параметрів процедури. Однак параметр res суттєво відрізняється від формальних параметрів r1 і r2. Він у тілі процедури повинен бути не значенням, а деякою змінною, яка існує
поза тілом процедури. І щоб процедура могла присвоїти значення такій змінній, треба забезпечити безпосередній доступ до цієї змінної з процедури, а для цього потрібно, щоб відповідний параметр був параметром-змінною.
Параметр-змінну від параметра-значення відрізняє службове слово var, записане перед параметром-змінною у списку формальних параметрів. Після формального параметра-змін-ної, як звичайно, зазначають його тип.
На відміну від формального параметра-значення, для якого фактичним параметром може бути будь-який вираз відповідного типу, для формального параметра-змінної фактичним параметром може бути тільки змінна відповідного типу.
Тепер програму можна записати так:
program maxe(input, output);
var
x, у, u, v: real;
procedure max2d(r1, r2: real; var res: real);
begin
if r1>r2 then res:=r1
else s:=r2
end;
begin
read(x, y);
max2d(x+y, x*y, u);
max2d(0.5, u, v);
writeln('u=', u,' v=', v)
end.
У цьому випадку виконання оператора-процедури max2d(x+y, x*y,u) рівносильне виконанню еквівалентного блоку:
var
r1, r2: real;
begin
r1:=x+y; r2:=x*y; if r1>r2 then u:=r1 else u:=r2
end
Отже, оскільки формальний параметр оголошений параметром-змшною, то процедура одержує безпосередній доступ до змінної, заданої як відповідний фактичний параметр. Завдяки цьому процедура може безпосередньо змінювати значення цієї змінної і таким чином передавати в програму одержаний у її тілі результат. Кажучи точніше, у випадку звертання до процедури, що як формальний параметр містить параметр-змінну, їй передається вказівка на змінну, задану як фактичний параметр, і процедура використовує цю вказівку для доступу до цієї змінної.