Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чернов Шафеева.doc
Скачиваний:
47
Добавлен:
21.05.2015
Размер:
1.39 Mб
Скачать

2.7.3. Вызов подпрограмм

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

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

2.7.4. Процедуры

Структура описания процедуры с параметрами имеет вид

PROCEDURE <имя>(формальные параметры);

{ раздел описания (метки, константы, типы, переменные ) }

BEGIN

{операторы подпрограммы}

END;

Обращение к процедуре производится по имени с указанием фактичес­ких параметров или без их указания. Возврат из подпрограммы в в основную программу происходит к следующему за ее вызовом оператору.

Пример программы вычисления второй и четвертой степеней числа:

PROGRAM PROS;

VAR X, Y, A, A2, A4: INTEGER; {A – исходная переменная, A2 - A2, A4 - A4 ,

глобальные переменные}

PROCEDURE STEP24; {процедура без параметров}

BEGIN

A2:=A*A;

A4:=A2*A2;

WRITELN(A:5, A2:5, A4:6);

END;

BEGIN {основная программа}

READ(Y, X);

WRITELN('Число; квадрат; куб');

A:=X;

STEP24; {вызов подпрограммы}

A:=Y;

STEP24; {вызов подпрограммы}

END.

Любой из формальных параметров процедуры может быть либо парамет­ром значением, либо параметром переменной. Формальному параметру  значению (обычно для задания исходных данных) может соответствовать фактический параметр  константа, переменная или выражение. Параметру­ переменной может соответствовать только переменная. Обычно параметры-­переменные используются для передачи результатов в вызывающую програм­му. Параметрам-переменным в заголовке функции должно предшествовать слово VAR.

Пример: PROCEDURE P(Y, X:REAL; VAR Z1,Z2:REAL);

{где Y,X  параметры-значения, Z1,Z2  параметры-переменные}.

Передачу результатов можно производить и через глобальные пере­менные.

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

Чем меньше параметров объявлено параметрами-переменными и чем меньше используется глобальных переменных, тем меньше возможность по­лучения непредвиденных программистом побочных эффектов в программе.

При наличии одноименных переменных в основной программе и подпрограмме локальные переменные закрывают глобальные.

2.7.5. Функции

Функция описывается в программе следующей структурой:

FUNCTION <имя>(формальные параметры):<тип>;

{ раздел описаний: переменные, типы, метки}

BEGIN

{ операторы функции }

<имя>:= <выражение> {имени функции присваивается значение}

END;

Функция передает в вызывающую программу единственное значение, которое хранится под ее именем. В качестве переменных могут использоваться параметры-переменные и параметры-значения. <Тип> функции должен соответствовать значению, которое вычисляется в данной подпрограмме (типу результата). В вызывающую подпрограмму передается значение функ­ции данного типа.

Вызов функции в программе производится не обособленно, как в про­цедуре, а в выражении указывается имя функции со списком параметров.

Пример. Вычислить вторую и N-ю степени числа Х.

PROGRAM FUNC;

VAR X : REAL; N: INTEGER;

FUNCTION STEPEN(M: INTEGER; A: REAL): REAL;

VAR P: REAL;

I: INTEGER;

BEGIN

P:=1;

FOR I:=1 TO M DO P:=P*A;

STEPEN:=P;

END;

BEGIN

READ(X,N);

WRITELN('X=', X, 'квадрат', STEPEN(2,X));

WRITELN('X=', X, 'степень', STEPEN(N,X));

END.