Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_5_7.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
349.7 Кб
Скачать

6.5.2. Описание функции. Указатель функции

Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function, идентификатор (имя) функции, необязательный список формальных параметров, заключенный в круглые скобки, и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре аналогичный программе:

Function <имя>[(<список формальных параметров>)]:<тип результата>;

Const ...;

Type ...;

Var ...;

Begin

<операторы>

End;

<имя> - любой допустимый идентификатор, напр., Fun1;

<список формальных параметров> - последовательность идентификаторов (имен) формальных параметров и их типов, напр., Step:real, Mas: Type_mas, ..., разделенных запятой;

<тип результата > - тип возвращаемого функцией результата, напр. Integer, Real, и др.

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

Обращение к функции осуществляется по имени с указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам, указанным в заголовке, и иметь тот же тип.

Рассмотрим пример вычисления выражения Z=(A5+AM)/2, в котором возведение в степень выполняется функцией Step.

{Программа вычисления выражения Z=(A**5+A**M)/2}

Рrogram DemoFunc;

Var A,Z: Real;

{Функция вычисления степени. N, X - формальные параметры,

результат, возвращаемый функцией в точку вызова,

имеет вещественный тип}

Function Step(N: integer; X:real): Real;

{Описание локальных переменных функции}

Var

I: Byte; {локальная переменная для организации цикла}

Y: Real; {локальная переменная для хранения произведения

одинаковых сомножителей}

Begin

Y:=1;

{Цикл вычисления N-й степени числа X}

For I:=1 to N do Y:=Y*X;

{Присваивание функции результата вычисления степени}

Step:=Y

End;

{Начало основной программы}

Begin

Write('Введите значение числа А и показатель степени M');

Readln(A,M);

{Вызов функции Step с передачей ей фактических параметров}

Z:=(Step(5,A)+Step(M,A))/2;

Writeln('Для А =', A, ' M=', M, 'значение выражения равно', Z)

End.

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

6.5.3. Локализация имен в Turbo Pascal

В Turbo Pascal допускается любой уровень вложенности процедур и функций. Для сложных программ имеются правила локализации имен, определяющие область действия для любого имени.

Любое имя (константы, типа, переменной, процедуры или функции) определено только в пределах той процедуры или функции, в которой оно описано. Область действия распространяется на все внутренние процедуры или функции.

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