Процедуры
Любая процедура состоит из заголовка и тела процедуры. Тело процедуры оформляется по тем же правилам, что и основная программа, т.е. состоит из раздела описания переменных и раздела операторов. Однако заканчивается тело процедуры символом ‘;’.
Общий вид описания процедуры
Список формальных параметров служит для связи процедуры с основной программой. В списке перечисляются входные и выходные параметры с указанием их типов. Входные параметры являются исходными данными для процедуры, а выходные параметры определяют результаты вычислений процедуры, которые передаются в основную программу.
В Турбо Паскале допускается запись заголовка процедуры без списка параметров:
PROCEDURE <имя>;
Обращение к процедуре
Описание процедуры само по себе никаких действий не вызывает. Чтобы выполнить процедуру, в нужной точке основной программы необходимо записать оператор вызова процедуры.
Общий вид оператора вызова процедуры
<имя процедуры>(<список фактических параметров>);
Фактические параметры заменяют формальные параметры при выполнении процедуры. В качестве фактических параметров могут быть константы, переменные или выражения.
Глобальные и локальные переменные
Переменные, описанные в основной программе, являются глобальными. Такие переменные можно использовать в любой точке программы, в том числе и в процедуре.
Локальные переменные определяются в разделе описания VAR внутри процедуры. Они имеют смысл только в процедуре и недоступны основной программе.
Пример программы с процедурой
Вычислить значение:
,где
заданное вещественное число.Введем обозначения:
; .В этой задаче требуется многократно реализовать алгоритм возведения в целую степень. Целесообразно использовать процедуру, в которой данный алгоритм можно формально описать как алгоритм накопления произведения.
, где номер шага вычисления (умножения); число шагов вычислений.
При описании процедуры надо с помощью списков параметров связать формальный параметр
с основанием степени, параметр с показателем, а результат выполнения процедуры - с фактическим результатом. Поскольку в задаче требуется вычислить три операции возведения в степень (), то в основной программе надо записать три оператора вызова процедуры.Программа
Program Primer_1;
Var
a, r1, r2, r3, z: real;
Procedure ST (x: real; n: integer; var P: real);
var
i: integer;
begin
P := 1;
for i := 1 to n do P := P * x;
end;
Begin {начало основной программы}
writeln(‘Введите число а’);
read (a);
ST(a, 5, r1);
ST(1/a, 5, r2);
ST(a, 7, r3);
Z := (r1 + r2) / (2 * r3);
writeln(‘Z=’, Z:6:2);
End.
В заголовке процедуры с именем ST указаны два входных формальных параметра (x, n) и один выходной (P).
Выполнение программы всегда начинается с операторов основной программы. В данном случае после ввода заданного числа () последовательно вызывается три раза процедура ST. При каждом вызове происходит соответствующая замена формальных параметров (x, n) на фактические, и вычисленный результат через формальный параметр Р присваивается фактическим переменным r1, r2, r3 соответственно. Далее вычисляется значение Z, и результат выводится на экран.
Согласование параметров
Формальные и фактические параметры должны быть согласованы друг с другом по количеству, типу и порядку следования. Это означает, что количество формальных параметров должно быть равно количеству фактических параметров, и каждый формальный параметр должен иметь тот же тип и занимать в списке то же место, что и соответствующий ему фактический параметр.
Механизм замены параметров
В списке формальных параметров выделяется два вида параметров: параметры-значения и параметры-переменные. Механизм замены для каждого вида параметров различен.
Параметры-значения играют роль входных
параметров. Фактическим параметром, соответствующим параметру-значению, может быть константа, переменная или выражение. Параметры-значения являются локальными переменными для процедуры. Для них в памяти компьютера временно выделяются ячейки, в которые передаются копии вычисленных значений фактических параметров. При выполнении процедуры параметры-значения могут изменяться, однако соответствующие им фактические параметры остаются без изменения.
Параметры–переменные являются выходными параметрами процедуры. Перед параметрами-переменными в списке ставится служебное слово VAR. В качестве соответствующих им фактических параметров могут быть только переменные. При вызове процедуры происходит замена имени параметра-переменной на имя фактической переменной, т.е. в процедуру передается адрес фактической переменной. Все действия в процедуре выполняются непосредственно над фактическим параметром, а не его копией. Поэтому любое изменение формального параметра-переменной приводит к изменению соответствующего ему фактического параметра.
Рассмотрим два примера, иллюстрирующих понятие параметра-значения и параметра-переменной.
Пример 1.
Program P1;
Var
x: integer;
Procedure Z (y: integer);
begin
y := 1;
end;
Begin
x := 0;
Z(x); {вызов процедуры}
writeln(‘x=’, x);
End.
В описанной процедуре Z формальный параметр y является параметром-значением, поэтому его изменение в процедуре (y := 1;) не влияет на значение фактического параметра x. После выполнения программы на экран будет выведено: x = 0.
Пример 2.
Program P2;
Var
x: integer;
Procedure Z (var y: integer);
begin
y := 1;
end;
Begin
x := 0;
Z(x);
writeln (‘x=’, x);
End.
В данной процедуре Z формальный параметр y является параметром-переменной, поэтому его значение после выполнения процедуры присваивается фактическому параметру x. На экран будет выведено: x = 1.