Такие параметры в списке формальных параметров представляются ключевыми словами procedure и function.
Примеры.
procedure p(procedure a);
Здесь процедура p имеет один параметр-процедуру a.
procedure q(function s: real; b: real);
Процедура q имеет два параметра: параметр-функцию s и параметр-значение b.
procedure q(function f(i: integer): real);
Здесь формальный параметр f – функция от одного целого аргумента, результат f – вещественный.
Если вызывается процедура (функция), имеющая параметр-процедуру (функцию), то соответствующий фактический параметр должен совпадать по типу результата с формальной процедурой (функцией). Программисту необходимо внимательно следить за совпадением типов результатов, т.к. в случае нарушения этого правила никакой диагностики не выдается, а программа работает неверно. Поясним на примере.
Обратиться к процедуре q(function f(i: integer): real) можно так: q(sinus(k)); где sinus(k) есть sin(k). Если k имеет тип integer, тогда sinus(k) – типа real. Это совпадает с типами i и f в заголовке q. Нельзя, однако, обратиться к q с функцией abs(k), а именно q(abs(k)); в этом случае тип формального параметра f – real, а тип фактического abs(k) – integer, т.е. формальный и фактический параметры не совпадают по типу.
Задача. Составить процедуру выдачи таблицы произвольной вещественной функции. Процедура должна иметь следующие формальные параметры: вещественную функцию, нижнюю границу документа, шаг по аргументу.
procedure tab(function f: real; low, up, step: real);
var
x: real;
j: integer;
begin
x := low;
for j := 0 to trunc((up – low) / step) do begin
writeln(x:10, f(x):10);
x := x + step
end
end;
Выражение trunc((up – low) / step) дает число точек, в которых выполняется функция f (при счете от 0).
Если к функции tab обратиться оператором
tab(sin, 0.0, 6.4, 0.33);
то будет напечатана таблица функции sin x для x от 0 до 6.4 с шагом 0.33. Алгоритмы, употребляемые наиболее часто различными пользователями, оформляются в виде процедур и функций, и составляют библиотеку стандартных программ (модулей).
При использовании параметров-процедур и параметров-функций надо иметь в виду возможные осложнения.