Виды параметров процедур и функций
Begin
Begin
Begin
Локализация имен
End.
Begin
End.
Begin
Var
Var
Begin
Begin
Begin
Var
Var
Begin
Begin
Var
Var
Обращение к процедурам или функциям
End.
Begin
Var
End.
Begin
Var
i: integer;
for i:=1 to n do y:=y * x;
stepen3:=y;
function stepen4: real;
n, i: integer;
y: real;
for i:=1 to n do y:=y * x;
stepen4:=y;
Вызов процедуры выполняется по имени, которое используется в основной программе или подпрограмме в виде отдельно записанного оператора вызова процедуры:
<имя процедуры>(<список фактических параметров (через «,»)>)
Вызов функции выполняется аналогично. При этом имя функции записывается в выражении. В простейшем случае выражение может состоять только из имени функции.
Пример обращения к процедурам
program pr1;
m:integer;
q, z: real;
Procedure stepen1(n: integer; x: real; var y: real);
i: integer;
y:=1;
for i:=1 to n do y = y * x;
end;
…
if m = 0 then z:=1 else
if m > 0 then stepen1(m, a, z) else stepen1(-m, a, z);
write(z);
end;
program pr1;
m:integer;
x, y: real;
Procedure stepen2;
i: integer;
y: real;
y:=1;
for i:=1 to n do y = y * x;
end;
…
if n = 0 then y:=1 else
if n > 0 then stepen2 else
n:= -n;
x:=1 / x;
end;
stepen2;
write(y);
end;
Пример обращения к функции:
program primer3;
m:integer;
a, z:real;
function stepen3(n:integer; x: real): real;
i: integer;
y:real;
for i:=1 to n do y:=y * x;
stepen3:=y;
read(a, m);
if m = 0 then z:=1 else
if m > 0 then z:=stepen3(m, a, z) else z:=stepen3(-m, a, z);
write(z);
Каждый идентификатор переменной характеризуется областью действий именуемой областью видимости имени.
Область видимости идентификатора – это та часть программы в которой можно ссылаться на данный идентификатор.
Область действия идентификатора: от точки объявления и до конца блока, в котором он объявлен.
program GlobalAndLocalvar;
var i:integer;
procedure p1;
procedure p2; {внутренняя процедура дла р1}
var i:integer; {локальная переменная}
i:=2;
writeln(‘Вывод из р2:’, i:2 );
end;
i:=1;
writeln(‘Вывод из р1:’, i:2 );
end;
i:=0;
p1;
writeln(‘Вывод из Global:’, i:2 );
Результаты
Вывод из Р2: 2
Вывод из Р1: 1
Вывод из Global: 1
Параметры процедур и функций бывают 4-х видов:
1) Параметры – значения
2) Параметры – переменные (в списке параметров зап. var)
3) Параметры – процедуры
4) Параметры – функции
В ВР вместо 3 и 4 видов введен процедурный тип + 2 дополнительных вида
5) Параметры – константы
6) Нетипизированные параметры – переменные
Между списками формальных и фактических параметров должно быть полное соответствие. Отличие между формальными параметрами в способе обмена данными между вызывающей программой и подпрограммой.
Параметры – значения
procedure(a, b ,c:real);
Передаются по значению
Передача параметров-значений выполняется по следующим правилам
1) Основная программа отводит место для хранения A, B, C
2) В момент вызова процедура отводит место для хранения формальных параметров a, b, c в соответствии с их описанием.
3) Передача фактического значения в процедуру (копирование значений фактических параметров, в область памяти, где размещаются формальные параметры).
4) После этого связь между основной программой и процедурой прерывается
При вызове процедуры или функции вместо параметров – переменных можно записывать выражения.
Например:
bq(2 + x, 0.5. 3);
Параметры – переменные
procedure(var d:real);
Разница между параметрами – значениями и параметрами – переменными хорошо видна на примере программы:
program param;