МЕХАНИЗМ ПЕРЕДАЧИ ПАРАМЕТРОВ
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Как было показано ранее, в заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Этот список указывается после имени подпрограммы и заключается в круглые скобки. Список формальных параметров, указываемых в заголовке подпрограммы, может включать в себя:

· параметры значения (эти параметры в основной программе подпрограммой не меняются);

· параметры переменные (эти параметры подпрограмма может изменить в основной программе);

· параметры константы;

· не типизированные параметры, параметры-процедуры и параметры функции.

В списке должны быть перечислены имена формальных параметров и их типов. Имя параметра отделяется от типа двоеточием, а параметры друг от друга - точкой с запятой.

Между формальными и фактическими параметрами должно быть полное соответствие:

· формальных и фактических параметров должно быть одинаковое количество;

· порядок следования формальных и фактических параметров должен быть один и тот же;

· тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.

При обращении к подпрограмме, формальные параметры заменяются на соответствующие фактические параметры вызывающей программы.

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

Параметры значения используются только для передачи исходных данных из основной программы в подпрограмму (процедуру или функцию), в списке формальных параметров они перечисляются через запятую с обязательным указанием их типов.

Если формальный параметр объявлен как параметр-значение, то фактическим параметром может быть произвольное выражение. При вызове подпрограммы фактические параметры вычисляются и используются как начальные значения формальных параметров, т.е. осуществляется подстановка значений. Если формальный параметр определен как параметр-значение, то перед вызовом процедуры это значение вычисляется, полученный результат помещается во временную память и передается процедуре. Даже если фактический параметр - простейшее выражение в виде переменной или константы, то все равно процедуре будет передана лишь копия этой константы или переменной. В процессе выполнения программы формальные параметры могут изменяться, но это ни как не отразится на соответствующих фактических параметрах, которые сохранят те значения, которые имели до вызова подпрограммы, так как меняются не они, а их копия. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу.

Пример 7.1. Вычисление квадратов двух чисел и вывода на экран их суммы.

Program Prim7_1;

var A,B : real;


Procedure SumSqr(X,Y:real);{X,Y - формальные параметры }

begin

X:=X*X;

Y:=Y*Y;

Writeln(' Сумма квадратов =',X+Y);

end; { Конец процедуры }

begin {Начало главной программы}

A:=1.5; B:=3.5;

SumSqr(A,B); {Вызов процедуры с передачей ей значений фактических параметров}

end.

При вызове процедуры SumSqr с фактическими параметрами А и В значения этих параметров копируются в соответствующие формальные параметры X и Y, и дальнейшее преобразование этих формальных параметров ни как не влияют на значения переменных А и В.


Параметры переменные

Параметры-переменные используются для определения результатов выполнения процедуры и в списке формальных параметров перечисляются после слова VAR с обязательным указанием типа. Каждому формальному параметру, объявленному как параметр-переменная, должен соответствовать фактический параметр в виде переменной соответствующего типа, например:

Procedure Prim(var M,N : integer; var Y : real);

Если формальный параметр определен как параметр-переменная, то при вызове процедуры ей передается сама процедура, а не ее копия, и изменение параметр переменной приводит к изменению фактического параметра в вызывающей программе. Следовательно, исходные данные в процедуру из программы могут передаваться как через параметры-значения, так и через параметры-переменные, а результаты работы процедуры возвращаются в вызывающую программу только через параметры переменные. Пример.

Program Prim7_2;

var

A,B : real;

SumAB, SubAB : real;


Procedure SumSub(X,Y : real; var Sum, Sub : real);

begin

Sum:=X*X+Y*Y;

Sub:=X*X-Y*Y;

end;


begin {Начало главной программы}

A:=1.5;

B:=3.4;

SumSub(A,B,SumAB,SubAB); {Вызов процедуры с передачей ей фактических параметров-значений А и В и параметров-переменных SumAB и SubAB}

Writeln('Сумма квадратов чисел А и В = ',SumAB);

Writeln('Разность квадратов чисел А и В = ',SubAB);

end.



Дата: 2019-05-28, просмотров: 186.