Иллюстрированный самоучитель по Turbo Pascal

Процедурные типы. Параметры-функции и параметры-процедуры.

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

Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например:

type
Prod = Procedure (a, b, c: Real; var d: Real);
Proc2 = Procedure (var a, b);
Ргос3 = Procedure;
Func1 = Function: String;
Func2 = Function (var s: String): Real;

Как видно из приведенных примеров, существует два процедурных типа: тип-процедура и тип-функция.

Пример 8.3 иллюстрирует механизм передачи процедур в качестве фактических параметров вызова. Программа выводит на экран таблицу двух функций:

sin1(х) = (sin(x) + 1) * ехр(-х)
cos1(x) = (cos(x) + 1) * exp(-x).

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

Пример 8.3.

Uses CRT;
type
Func = Function (x: Real): Real;
{----------------}
Procedure PrintFunc (XPos: Byte; F:Func);
{Осуществляет печать функции F. (XPos – горизонтальная позиция начала вывода) }
const
np = 20; {Количество вычислений функций}
var
х: Real; i: Integer;
begin {PrintFunc}
for i: = 1 to np do
begin
x: = i * (2 * pi / np);
GotoXY (XPos, WhereY);
WriteLn (x:5:3, F(x):18:5)
end
end; {PrintFunc}
{-----------------}
Function Sin1fx: Real): Real; far;
begin
sinl: = (sin(x) + 1) * exp(-x)
end;
Function Cos1(x: Real): Real; far;
begin
cosl: = (cos(x) + 1) * exp(-x)
end;
{---------------}
begin {основная программа}
ClrScr; {Очищаем экран}
PrintFunc (1, sin1); GotoXY (1.1); {Переводим курсор в левый верхний угол}
PrintFunc (40, cos1)
end.

Обратите внимание: для установления правильных связей функций SIN1 и COS1 с процедурой PRINTFUNC они должны компилироваться с расчетом на дальнюю модель памяти. Вот почему в программу вставлены стандартные директивы FAR сразу за заголовками функций. В таком режиме должны компилироваться любые процедуры (функции), которые будут передаваться в качестве фактических параметров вызова.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.