Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(ЯВУ)-Паскаль.doc
Скачиваний:
63
Добавлен:
31.03.2015
Размер:
1.08 Mб
Скачать

9.3. Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры

Как заголовок процедуры, так и заголовок функции может содержать список формальных параметров, который имеет следующий формат:

(<описание параметра 1>; < описание параметра 2>;…

< описание параметра n>) .

Описание параметра в списке зависит от способа передачи параметра и возможны следующие категории формальных параметров:

  1. параметры – значения:

<имя параметра>: <тип параметра>;

  1. параметры – переменные:

Var<имя параметра>: <тип параметра>;

  1. параметры – константы:

Const<имя параметра>: <тип параметра>;

  1. параметры без типа:

<имя параметра>;

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

Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме, т.е. количество параметров, их последовательность и типы. Активизация подпрограммы осуществляется с помощью операции вызова подпрограммы, которая имеет следующий синтаксис:

<имя процедуры>(< список фактических параметров >); в случае процедуры;

< имя переменной >:=<имя функции>(< список фактических параметров >); в случае функций вызов функции должен присутствовать в выражении как операнд.

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

Рассмотрим способы передачи параметров.

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

Пусть имеется процедура с заголовком:

Procedure Proc1(par1: type1; par2,par3: type2);

В этом случае в ячейку памяти формального параметра передается копия фактического параметра и обратно не возвращается (рис. 9.1).

Рис. 9.1

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

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

Пусть имеется процедура с заголовком:

Procedure Proc1(Var par1, par2: type1; Var par3: type2);

В этом случае подпрограмме передается адрес фактического параметра. По имеющемуся адресу изменяется содержимое ячеек памяти фактического параметра, т.е. выполняется возврат значения в вызывающую программу. (рис. 9.2).

Рис. 9.2

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

Параметры – константы.

Пусть имеется процедура с заголовком:

Procedure Proc1(Const par1, par2: type1; Const par3: type2);

В этом случае подпрограмме передается адрес фактического параметра. По имеющемуся адресу разрешено только брать значение фактического параметра, а изменять его значение запрещено (рис. 9.3).

Рис. 9.3

В качестве фактического параметра могут использоваться как переменные, так и константы, тип которых совместим с типом того соответствующего формального параметра. Запрещается присваивать значения параметрам – константам и передавать такие параметры другим подпрограммам в качестве фактических параметров.

Параметры без типа.

Бестиповые параметры могут передаваться только по адресу, т. е. как параметры – переменные или параметры – константы. Для параметра без типа в списке формальных параметров тип в описании не указывается.

Пусть имеется процедура с заголовком:

Procedure Proc1(Var par1, par2; Const par3);

Вследствие отсутствия типа, нельзя использовать бестиповые параметры так же, как типизированные параметры. Перед использованием параметра требуется параметр без типа привести к какому-либо типу.

Операция приведения типа имеет следующий вид:

<имя типа>(<имя переменной>) .

Например,

Var a: integer;

R: real;

…………..

R:= real(a) /2;

…………..

где real(a) – операция явного приведения целочисленной переменной в вещественный тип.