Процедура или функция может быть вызвана из любого места основного блока программы или из тела другой процедуры или функции. При вызове указывается имя процедуры или функции и список фактических параметров.
Процедура вызывается как обычный оператор, вызов функции может быть осуществлен только в составе некоторого выражения. Участок программы, где происходит вызов процедуры или функции называют точкой вызова процедуры или функции.
При вызове процедуры или функции производятся следующие действия:
· в точке вызова управление передается процедуре или функции;
· выделяется область памяти для процедуры или функции;
· производится подстановка значений фактических параметров в формальные, если таковые имеются;
· выполняется тело процедуры или функции;
· управление передается инициализатору вызова (главной программе, процедуре или функции).
Замечание: если в теле процедуры или функции А используется процедура или функция В, то процедура или функция В должна быть объявлена либо выше А, либо в описательной части А.
Пример.
Построить функцию находящую большее из трех.
Function Max2(x,y:Real):Real;
Var temp:Real;
Begin
if x>y then temp:=x
else temp:=y;
Max2:=temp;
End;
Function Max3(x,y,z:Real):Real;
Var temp,Max2:Real;
Begin
Temp:=max2(max2(x,y),z);
Max3:=temp;
End;
При работе с процедурами и функциями различают локальные и глобальные объекты программы.
Глобальным называют объект программы, описанный в описательной части основной программы.
Локальным называют объект программы, описанный в описательной части процедуры или функции.
Глобальный объект доступен любому объекту программы, локальный доступен только в пределах процедуры или функции. Соответственно возможно использование глобального объекта внутри процедуры или функции без описания его внутри процедуры или функции. При использовании глобальных переменных в теле процедуры или функции следует соблюдать осторожность, т.к. это может привести к нежелательным побочным эффектам.
Допускается совпадение имен локальных и глобальных переменных, а так же имен глобальных переменных и параметров процедур и функций.
Если имена локальной и глобальной переменной совпадают, то значение глобальной переменной сохраняется и после завершения работы процедуры или функции, остается таким же как до вызова процедуры или функции.
Пример.
Program T;
Var p,q,s:Real;
Procedure P1;
Var p11,q1:Real;
Begin
…
end;
Function F1:Real;
Var p,q:Real;
Function F2:Real;
Var s1,p3:Real;
Begin
…
end;{F2}
Begin
…
end.{F1}
Глобальные переменные: p,q,s.
Локальные переменные: p1,q1,p,q (внутри F1);
s1,p3 (внутри F2).
Переменная s доступна внутри p1, F1, F2; p11 только внутри P1.
Локальная переменная p функции F1 доступна внутри F1 и F2.