Формат процедуры:
Procedure Имя[(формальные параметры)];
[Раздел описаний]
Begin
… Раздел операторов
end;
Процедура вызывается по ее имени с указанием фактических параметров:
Имя[(фактические параметры)];
Формальные параметры – это список имен переменных вместе со своим типом, стоящий в круглых скобках при описании подпрограммы. Соответствующий ему список фактических параметров при вызове процедуры указывается без типа. С помощью формальных и фактических параметров данные передаются из вызывающей программы в процедуру и наоборот. Между формальными и фактическими параметрами должно быть однозначное соответствие по количеству параметров, по их типу и порядку следования.
Пример:
Составить процедуру сложения двух целых чисел с выводом суммы на печать.
Procedure Summa(a, b:integer);
Var c: integer; {c – локальная переменная}
begin
c:= a + b;
Writeln('Сумма = ', c:7);
end;
Здесь a и b – формальные параметры. Вызвать эту процедуру для сложения чисел 5 и m можно следующим образом: Summa(5,m);
Здесь 5 и m – фактические параметры. Каждый формальный параметр принимает значение соответствующего фактического параметра, т.е. в процедуре a будет равно 5, а b будет равно m.
|
|
Среди параметров процедуры выделяют параметры-значения и параметры-переменные.
Параметры-значения выполняют функцию ВХОДНЫХ параметров процедуры. Они могут получать из вызывающей программы значения фактических параметров, но не могут передавать свои значения фактическим параметрам в вызывающую программу.
Параметры-переменные выполняют функцию как ВХОДНЫХ, так и ВЫХОДНЫХ параметров процедуры. Они могут получать (из главной программы) значения фактических параметров, изменять их в процедуре и возвращать новые значения фактическим параметрам (в главную программу). Для отличия от параметров-значений перед параметрами-переменными ставится слово Var в списке формальных параметров.
Пример:
Procedure Summa(a, b:integer; Var c:integer);
begin
c: = a+b;
end;
Эту процедуру можно вызвать следующим образом: Summa(5,m,S5m);
Допускается одинаковое обозначение соответствующих формальных и фактических параметров. Например, вызов процедуры Summa может иметь вид: Summa(а,m,С);
В качестве фактических параметров-значений могут быть константы, переменные, выражения. Их тип должен соответствовать типу формального параметра-значения.
В качестве фактических параметров-переменных могут быть переменные и массивы (константы и выражения недопустимы).
Пример.
Отрезок задан координатами [a, b] на оси Х. Составить подпрограмму, определяющую, попадает ли точка на данный отрезок. Сделать проверку для трех точек l, m, n и массива Z из 4-х элементов.
program p13_1;
|
|
Const a=1; b=4.5;
Var l,m,n: real;
z:array[1..4] of real;
i:integer;
procedure otr(x:real); {Раздел описания подпрограммы}
begin
if (x>=a)and(x<=b) then writeln('Попадает')
else writeln('Не попадает');
end;
Begin
Write('Введите координаты 1-й точки:'); readln(l);
otr(l);
Write(' Введите координаты 2-й точки:'); readln(m);
otr(m);
Write(' Введите координаты 3-й точки:'); readln(n);
otr(n);
Writeln('Введите массив точек:');
for i:=1 to 4 do read(z[i]);
for i:=1 to 4 do otr(z[i]);
readln;
end.
Если в процедуру необходимо передать в качестве параметра массив, то фактическим параметром должно быть имя массива, а формальный параметр указывается в списке после слова Var вместе с типом массива. Само же описание массива делается в разделе Type основной программы.
Пример. Найти сумму элементов трех одинаковых по размеру массивов: a, b и c, состоящих из 20 элементов. Нахождение суммы элементов массива оформить в виде подпрограммы-процедуры.
Program p13_2;
Const k = 20;
Type mas = array [1..k] of real;
Var a, b, c: mas;
i: integer; Sa, Sb, Sc: real;
Procedure Sum(X:mas; Var Sx:real);
Var i:integer;
begin
for i:=1 to k do sx:= sx + x[i];
end;
BEGIN {Основная программа}
for i:=1 to k do read(a[i]);
for i:=1 to k do read(b[i]);
for i:=1 to k do read(c[i]);
Вызов этой процедуры может быть такой:
Sum(a,Sa); Writeln('Сумма массива А=', Sa);
Sum(b,Sb); Writeln('Сумма массива B=', Sb);
Sum(c,Sc); Writeln('Сумма массива C=', Sc);
End.
Допускается использование процедур без параметров. В этом случае формальные и фактические параметры отсутствуют.
В процедуре может отсутствовать раздел описаний.