Функциональный определяется как заголовок процедуры и функции со списком формальных параметров, но без имени.После объявления функционального типа его можно использовать для описания формальных параметров — имен процедур и функций.тКроме того, необходимо написать те реальные процедуры или функции, имена которых будут передаваться как фактические параметры. Эти процедуры и функции должны компилироваться в режиме дальней адресации с ключом {$F+}.универсальная процедура печати значения для любых функций при х изменяющимся от А до Б с шагом h
Type Fan=function (x:real):real; {P+}end;
Function F1(x:real):real; Far;{компиляция в режиме дальнего вызова} Begin F1:=sinx*cosx;end;
Function F2(x:real):real; Far;{компиляция в режиме дальнего вызова} Begin F1:=sqr(sqr(x))+sqr(x); end; {P-}
Procedure TAB (F:fan; A,B,H:real);Var x:real; I,n:word; Begin n:=round((B-A)/H);x:=A; For i:=0 to n do begin writeln(x:12,F(x):14); x:=x+h; end; end;
Begin tab(f1,0,1,0,1); tab(F2,5,7,0,1); end.
Процедурные типы — это нововведение фирмы Borland (в стандартном Паскале таких типов нет). Основное назначение этих типов — дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к другим процедурам и функциям. Для объявления процедурного типа используется заголовок процедур, в котором опускается ее имя, например:
Type Proc = Procedure (a, b, с : real; Var d : real); Proc2 = Procedure (var a, b);
Var р1 : Proc; ар : array [1..N] of Proc2;
Переменным процедурных типов допускается присваивать в качестве значений имена соответствующих подпрограмм. После такого присваивания имя переменной становится синонимом имени подпрограммы. В отличие от стандартного Паскаля, в Турбо Паскале разрешается использовать в передаваемой процедуре как параметры-значения, так и параметры-переменные.
Процедурная переменная занимает в памяти 4 байта (2 слова). В первом хранится смещение, во втором — сегмент (т.е. указатель на код подпрограммы).