Параметры процедурного типа
Для объявления процедурного типа используют заголовок подпрограммы, в котором отсутствует имя, например:
Type proc=procedure (a,b,c:real;Var d:real); func-function(x:real):real;
Значениями переменных процедурных типов являются идентификаторы процедур и функций с соответствующими заголовками:
Var ffunc; f:=funl;...
Процедуры или функции, идентификаторы которых будут передаваться в качестве параметров процедурного типа, по правилам языка необходимо компилировать в режиме дальнего вызова (с указанием директивы компилятора {$Р+}или служебного слова far). В этом режиме при вызове подпрограмм используются длинные 4-байтовые адреса (см. параграф 7.1) в отличие от коротких 2-байтовых адресов, которые применяются для адресации подпрограмм, объявленных в основной программе или ее подпрограммах.
Примечания: 1. Если процедуры или функции описываются в интерфейсной части модуля (см.
параграф 5.2), то по умолчанию они вызываются в режиме дальнего вызова, поэтому специально это оговаривать не надо.2. Стандартные процедуры и функции, описанные в модуле System, по умолчанию являются функциями ближнего вызова. Если имена этих подпрограмм необходимо передавать через параметры, то надо описать собственную подпрограмму с указанием режима дальнего вызова, в теле которой будет находиться вызов стандартной подпрограммы, и использовать ее вместо стандартной подпрограммы.
Пример 5.10. Разработать подпрограмму, которая возвращает массив значений произвольной функции при заданных интервале изменения аргумента [а,Ь] и количестве точек п.
Имя функции будем передавать в подпрограмму через параметр процедурного типа. Массив значений будем описывать как открытый:
Unit SFm;
Interface
Type func=function(x:real):real;
Procedure TabFun(f:func;a, b:real;n:integer;
Var Masfarray of real);
Implementation
Procedure TabFun;
Var h:real; i:integer;
Begin
h:=(b-a)/(n-l);
for i:=0 to n-1 do Masf[i]: =f(a+h *i);
End;
End.
Основная программа должна описать конкретную функцию как функцию дальнего вызова. Для функции sin создается специальная функция дальнего вызова.
Program ex;
Uses SFm;
Var masFl: array[1..10J of real; masF2: array[I..20J of real;
i: integer;
function FI(x:real):real; far;
Begin Fl:=sin(x); end;
function F2(x:real):real; far;
Begin F2:=exp(x)+cos(x); end;
Begin
WriteLnf' Таблица значений функции sin x:);
TabFunfFl, 0,2,10, masFl);
for i:=l to 10 do Write(masFl[i]:7:l);
Writeln;
WriteLn(' Таблица значений функции exp x+cos x:); TabFun(F2t 0,2,20,masF2); for i:=l to 20 do Write (masF2[i]:7:1);
Writeln;
End.
Еще по теме Параметры процедурного типа:
- § 3.4. Параметры социальной структуры организации
- Временные параметры вопроса
- ПАРАМЕТР
- 45. Структура и социально-психологические параметры малой группы
- Функции типа
- Этичное использование типа
- Журналы "обычного русского типа"
- В психологии различают четыре типа памяти.
- Часть I. Откроем тайну типа личности
- Детский дом семейного типа
- Два типа вопроса
- Рождение типа
- В какой фазе развития типа вы находитесь?
- 3) Общества партикуляристского типа достижения.
- 2) Общества универсалистского типа приписывания.
- 4) Общества партикуляристского типа приписывания.