Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры
Как заголовок процедуры, так и заголовок функции может содержать список формальных параметров, который имеет следующий формат:
(<описание параметра 1>; < описание параметра 2>;…
< описание параметра n>) .
Описание параметра в списке зависит от способа передачи параметра и возможны следующие категории формальных параметров:
a) параметры – значения:
<имя параметра>: <тип параметра>;
b) параметры – переменные:
Var <имя параметра>: <тип параметра>;
c) параметры – константы:
Const <имя параметра>: <тип параметра>;
d) параметры без типа:
<имя параметра>;
в конце описания любого формального параметра, кроме последнего ставится точка с запятой.
Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме, т.е. количество параметров, их последовательность и типы. Активизация подпрограммы осуществляется с помощью операции вызова подпрограммы, которая имеет следующий синтаксис:
<имя процедуры>(< список фактических параметров >); в случае процедуры;
< имя переменной >:=<имя функции>(< список фактических параметров >); в случае функций вызов функции должен присутствовать в выражении как операнд.
Список фактических параметров содержит список выражений, разделенных запятыми, типы которых позиционно соответствуют типам формальных параметров, указанных в заголовке подпрограммы.
Рассмотрим способы передачи параметров.
Параметры – значения.
Пусть имеется процедура с заголовком:
Procedure Proc1(par1: type1; par2,par3: type2);
В этом случае в ячейку памяти формального параметра передается копия фактического параметра и обратно не возвращается (рис. 9.1).
Параметры – значения являются входными параметрами подпрограммы. В качестве фактического параметра могут использоваться как переменные, так и константы.
Параметры – переменные.
Пусть имеется процедура с заголовком:
Procedure Proc1(Var par1, par2: type1; Var par3: type2);
В этом случае подпрограмме передается адрес фактического параметра. По имеющемуся адресу изменяется содержимое ячеек памяти фактического параметра, т.е. выполняется возврат значения в вызывающую программу. (рис. 9.2).
Параметры – переменные являются выходными параметрами подпрограммы. В качестве фактического параметра могут использоваться только переменные, тип которых совместим с типом того соответствующего формального параметра.
Параметры – константы.
Пусть имеется процедура с заголовком:
Procedure Proc1(Const par1, par2: type1; Const par3: type2);
В этом случае подпрограмме передается адрес фактического параметра. По имеющемуся адресу разрешено только брать значение фактического параметра, а изменять его значение запрещено (рис. 9.3).
В качестве фактического параметра могут использоваться как переменные, так и константы, тип которых совместим с типом того соответствующего формального параметра. Запрещается присваивать значения параметрам – константам и передавать такие параметры другим подпрограммам в качестве фактических параметров.
Параметры без типа.
Бестиповые параметры могут передаваться только по адресу, т. е. как параметры – переменные или параметры – константы. Для параметра без типа в списке формальных параметров тип в описании не указывается.
Пусть имеется процедура с заголовком:
Procedure Proc1(Var par1, par2; Const par3);
Вследствие отсутствия типа, нельзя использовать бестиповые параметры так же, как типизированные параметры. Перед использованием параметра требуется параметр без типа привести к какому-либо типу.
Операция приведения типа имеет следующий вид:
<имя типа>(<имя переменной>) .
Например,
Var a: integer;
R: real;
…………..
R:= real(a) /2;
…………..
где real(a) – операция явного приведения целочисленной переменной в вещественный тип.
|