Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Механизм передачи параметров




Как было показано в приведенных выше примерах программ с использованием процедур и функций, в заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название "формальные" эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения (выражений) и имен. Этот список указывается после имени подпрограммы и заключается в круглые скобки.

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

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

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

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

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

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

procedure Abort(Msg: string);

function Step(N: integer; X: real): real;

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

Пример программы с использованием передачи параметров по значению:

program Pr1;

var

А,В: real;

{Процедура вычисления квадратов двух чисел и вывода на экран их суммы}

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

begin

Х:=Х*Х;

Y:=Y*Y;

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

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

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

А:=1.5;

В:=3.4;

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

end.

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

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

procedure Example(var M,N: integer; var Y: real);

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

Пример программы, использующей параметры-переменные:

program Sum_Sub_Square;

var

A,В: real;

SumAB, SubAB: real;

{Процедура с параметрами-переменными Sum, Sub}

procedure Sum_Sub(X,Y: real; var Sum, Sub: real);

begin

Sum:=X*X+Y*Y;

Sub:=X*X-Y*Y;

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

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

А:=1.5;

В:=3.4;

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

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

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

end.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...