Лекция: Механизм параметров

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

Существует два способа передачи данных через список параметров из вызывающей программы в процедуру. Первый способ заключается в том, что процедуре передается некоторое данное в виде его значения, например, если данное числового типа, передается само число. Второй способ заключается в том, что передается не значение данного, а адрес ячейки, где это данное находится (говорят, что передается имя переменной). Таким образом, параметры могут передаваться по значению и по имени. В каких случаях какой способ следует использовать? Обычно входные параметры передаются в процедуру по значению, а выходные – всегда по имени.

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

Отметим, что когда параметры передаются по имени, они занимают в памяти по 4 байта. Подробнее об этом смотри лабораторную работу № 9.

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

..(A,B,C:real;VAR X1,X2:real;VAR N:integer); – формальные,

..(0.762,Alfa,C[3]-1.2,X,Y,Num); соответствующие фактические.

 

 

Для передачи массива в процедуру:

TYPE

Vect = array[1..10] of real;

Mas5x8 = array[1..5,1..8] of integer;

.. .

VAR

C1,C2: Vect;

A: Mas5x8;

Metod: Integer;

.. .

PROCEDURE GetMatr(M:integer; Var X,Y:Vect;

Var Z:Mas5x8;...);

VAR A1,C1:integer;

.. .

Begin

<Операторы тела процедуры >

End;

FUNCTION MinValueMatr( Var Z:Mas5x8; M,N:integer)

:Integer;

VAR MinZ, I, j :integer;

Begin

<Операторы тела функции >

MinValueMatr:= MinZ;

End;

BEGIN

<Операторы основной программы >

.. .

GetMatr(0, C2, C1, A,...); {обращение к процедуре}

.. .

If MinValueMatr(A,5,7) div 2 < 3 then {обращение к функции}

.. .

END.


Разбор контрольного варианта

еще рефераты
Еще работы по информатике