Параметры-переменные и параметры-значения
Begin
Begin
Обращение к процедуре
Структура процедуры
Процедуры
End.
Begin
Begin
Sum:=0;
for j:=1 to k do
Sum:=Sum+z[j];
end;
for i:=1 to 30 do read(p(i));
for i:=1 to 20 do read(t(i));
r:=sum(p,20)/sum(t,30);
write('r=',r);
Процедура универсальна и используется в тех случаях, когда необходимо в подпрограмме получить не одинрезультат.
Процедура состоит из заголовка процедуры и ее тела. Заголовок процедуры имеет вид:
PROCEDURE имя (VAR P1:T1; P2:T2;... Pn:Tn);
где PROCEDURE (процедура) и VAR (переменная) - ключевые слова;
имя - имя процедуры, задаваемое пользователем;
Pi - необязательный список формальных параметров;
Ti - тип параметров;
Пример 9.
PROCEDURE ML (VAR Z:REAL; X:REAL);
Заголовок процедуры с именем ML, формальными параметрами которой будут переменные Х и Z типа real.
Общая структура процедуры может быть записана так
PROCEDURE имя (VAR P1:T1; P2:T2;... Pn:Tn);
раздел описаний
BEGIN
оператор
...
оператор
END;
Здесь список формальных параметров - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.
Обращение к процедуре осуществляется самостоятельным оператором. Он имеет вид
имя (d1,d2,...dn);
имя - имя вызываемой процедуры;
di - фактические параметры, которым соответствуют формальным по количеству, типу, и месту расположения.
Фактическими параметрами здесь могут быть константы, переменные, арифметические выражения, элементы массива, массивы.
Поскольку процедура универсальна ее можно использовать для всех предыдущих примеров, в которых применялась функция. Приведем программу с использованием процедуры для примера 4, вычисления площади фигуры многогранника(рис.2).
Пример 10.Использование процедуры в программе на языке Pascal.
Program pl;
var a,b,c,d,e,f,k,Sfig,S1,S2,S3: real;
Procedure Str(a,b,c,:real;Var S:real);
var p: real;
p:=(a+b+c)/2;
S:=SQRT(p*(p-a)*(p-b)*(p-c));
end;
write('введите стороны:a,b,c,d,e,f,k');
readln(a,b,c,d,e,f,k);
Str(a,b,c,S1);
Str(b,d,e,s2 );
Str(c,f,k,S3);
Sfig:=S1+S2+S3;
writeln('площадь фигуры:',Sfig);
end.
Отличие данной программы от приведенной в примере 4 в том, что в головной программе пришлось ввести три дополнительных переменных S1,S2,S3, и дополнительный формальный параметр в заголовке процедуры - S, которому и присваивается результат вычисления площади треугольника в процедуре. Чтобы тот результат был доступен в головной программе, в заголовке при его объявлении используется ключевое слово VAR .В программе 3 обращения к процедуре Str, каждое из которых является самостоятельным оператором головной программы. Результат выполнения процедуры присваивается последнему в списке параметру, т.е. при первом обращении S1- площадь треугольника со сторонами a,b,c;
при втором S2-площадь треугольника со сторонами b,d,e; а при третьем - S3 - площадь треугольника со сторонами c,f,k.
Среди параметров подпрограмм выделяют параметры значения и параметры- переменные.
Параметры- значения выполняют роль входных параметров, т.е. могут получать значения практических параметров, но не могут передавать свои значения.
Параметры - переменные выполняют, как правило, роль выходных параметров процедуры, которые передаются в основную программу. Следовательно, фактические параметры, определяющие результат, должны описываться как переменные.
Для выделения параметров- переменных в списке формальных параметров перед ними ставится слово VAR.
Определение формального параметра тем или иным способом существенно только для вызывающей программы: если формальный параметр объявлен как параметр- переменная, то при вызове процедуры или функции ему должен соответствовать фактический параметров в виде переменной нужного типа; если формальный параметр объявлен как параметр- значение, то при вызове ему может соответствовать произвольное выражение.
Другими словами можно сказать так: переменная, описанная как параметр- переменная, передаваемая в процедуру или функцию, может изменять свое значение внутри процедуры или функции, которое сохраняется при из процедуры или функции, в то время как переменная, описанная как параметры- значения, передаваемая в процедуру или функцию, может изменять свое значение только внутри той процедуры или функции куда она была передана и возвращает свое первоначальное значение при выходе из процедуры или функции.
Пример 11: Вычислить сумму и произведение N целых чисел. N=48, N=123, N=28. Анализ примера показывает, что в нем трижды требуется вычислить сумму и произведение N чисел поэтому решение задачи можно выполнить, выделив вычисление суммы и произведения в подпрограмму. Так как результатом вычисления в подпрограмме являются две величины - сумма и произведение, то здесь необходимо использовать процедуру.
Рис. E Схема алгоритма для примера 11
Program PPR;
VARS1,S2,S3,P1,P2,P3:INTEGER;
Procedure SumPR(k:integer; VAR x,y: integer)
VAR i: integer;