Переменным процедурного типа можно присваивать значения конкретных процедур и функций. Естественно, что процедурная переменная и та процедура, которая присваивается ей в качестве значения, должны иметь одинаковое число формальных параметров, совпадающих по типам. Если переменная имеет тип функции, то для функций кроме формальных параметров должны совпадать типы функций. Те процедуры и функции, которые будут использоваться либо в качестве значений для процедурных переменных, либо в качестве фактических параметров при вызове процедур и функций, должны удовлетворять следующим правилам:
-должны компилироваться с ключом компилятора {$F+}
-не должны быть стандартными процедурами или функциями
-не должны объявляться внутри других процедур или функций.
Например, пусть есть описание функции с таким заголовком:
Function Calc(X,Y: Integer): Integer;
Можно присвоить имя функции некоторой переменной F, если она объявлена так:
var
F: Function(X,Y: Integer): Integer;
...
F:= Calc;
Переменная F имеет процедурный тип. Процедурный тип легко получается из заголовка подпрограммы путем удаления ее имени. Примеры описания процедурных типов:
type
TIntegerFunction = function: Integer;
TProcedure = procedure;
TStrProc = procedure(const S: string);
TMathFunc = function(X: Double): Double;
Какие бывают виды цикла?
Цикл – такая алгоритмическая структура, в которой серия команд выполняется многократно(тело цикла).
1.Цикл с предусловием – пока условие истинно, предписывается выполнять тело цикла. (пока<условие>тело цикла)
2.Цикл с постусловием – предписывает выполнять тело цикла до тех пор, пока не выполнится условие выхода из цикла. (тело цикла, до <условие>)
3.Цикл со счётчиком – предписывает выполнять тело цикла для всех значений некоторой переменной(параметра цикла) в заданном диапазоне. (для i от i1 до i2, тело цикла)