Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_TP.doc
Скачиваний:
13
Добавлен:
22.12.2018
Размер:
1.4 Mб
Скачать

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

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

Их описание похоже на описание переменных в любом блоке. Каждый параметр задается в заголовке, локален с точки зрения данной подпрограммы.

1. Типы формальных параметров должны обозначаться идентификаторами. Не допустим следующий заголовок подпрограмм :

a) PROCEDURE P1(VAR A: ARRAY[ 1..10] OF BYTE);

b) PROGRAM A1;

TYPE MA= ARRAY[ 1..10] OF BYTE;

PROCEDURE COR(VAR A: MA);

Целесообразно в поцедуру передавать массивы, записи и т.д. Для передачи подпрограммы сложных типов массивов, множеств, записи.

2. Явные задания типа формального параметра исключает возможность сопоставления его с любым типом фактического параметра.

3. Три способа задания формальных параметров:

3.1 Параметры, перед которыми отсутствует служебное слово VAR и за которыми следует тип, либо идентификатор типа ( параметры значения ).

3.2 Параметры с VAR и за которыми следует тип (параметры- переменные).

3.3 Передача параметров по ссылке ( с VAR и без типа).

3.1- наиболее простой и распространенный способ передачи .

Пример процедуры: определение суммы квадратов двух чисел (параметры значения).

PROCEDURE S(VAR X,Y:REAL);

BEGIN

X:=X *X;

Y:=Y*Y;

WRITELN('CУММА КВАДРАТОВ=' , X+Y );

END;

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

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

Пример: вычислить сумму и разность квадратов двух чисел.

PROCEDURE D1(X,Y:REAL);

VAR SUM,SUB:REAL;

BEGIN

SUM:=X*X+Y*Y;

SUB:=X*X-Y*Y;

END;

Вычисление суммы и разности квадратов очевидно, однако локальные переменные SUM и SUB, содержащие результат существуют только вданной подпрограмме и при ее окончании исчезают. Следовательно, необходимо использовать эти переменные в механизме формальных параметров.

PROCEDURE D1(X,Y:REAL; SUM,SUB:REAL);

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

END;

Данная подпрограмма вызывается следующим образом:

VAR A,B:REAL;

SUM AB, SUB AB:REAL;

BEGIN

READ(A,B);

D1(A,B,SUM AB,SUB AB);

. . . . . .. . . . . . . . . . . . . . . . . . ..

END;

Параметры SUM и SUB , передаваемые по значению (см. 3.1 без VAR ) , являются локальными в пределах процедуры, и присваивание им любых значений не приводит к получению этих значений SUM AB,SUB AВ.

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

PROCEDURE D1(X,Y:REAL; SUM,SUB:REAL);

Пример передачи параметров переменных: обмен значений между двумя переменными, оформленный в виде процедуры Р; реализуется с помощью промежуточной переменной Т.

PROCEDURE Р(VAR X,Y:REAL);

VAR T:BYTE;

BEGIN

T:=X;

X:=Y;

Y:=T;

END;

BEGIN

P(A,B);

. . . . . . . . . . . . . . . . . . .

P(C,D);