Параметры-переменные и параметры-значения

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;