Turbo Pascal позволяет вводить переменные специального вида, значениями которых могут служить подпрограммы. Т.е позволяет интерпретировать процедуры и функции как значения, которые можно присваивать переменным и передавать в качестве параметров.
Определение такого типа аналогично заголовку подпрограммы, но без указания имени.
Type {процедурный тип}
PROC= Procedure (« список форм. параметров »);
PP= Procedure;
{функциональный тип}
FUN= Function( <список форм. параметров > ) : <тип результ. >
Имена форм. параметров играют чисто иллюстративную роль. А важно их количество и типы, а так же тип результата для функций.
- Элементами процедурного типа являются процедуры и функции, заголовки которых совпадают с заголовками в разделе Type.
- Допустимы операторы присваивания , в правых частях
которых находятся идентификаторы других процедурных переменных или идентификаторы подрограмм.
- Переменная процедурного типа в различные моменты выполнения программы может иметь в качестве значения различные подпрограммы.
Пример.
Type OP= Function (x,y: real): real;
VAR Proces: OP;
Function Sum (a, b:real):real; Far;
Begin Sum:=a+b; End;
Function Delen (a, b:real):real; Far;
Begin Delen:=a / b; End;
Begin ………………
If vslov Then Proces:= Sum
Else Proces:= Delen;
Write( Proces(25.2, 2.5+x));
………………………
End.
Конструкция Proces(25.2, 2.5+x) вызовет активизацию той функции, которая была присвоена переменной Proces.
Переменные процедурных типов можно использовать в качестве параметров процедур и функций.