<<
>>

Параметры процедурного типа

Параметры процедурного типа используют тогда, когда нужно передать в подпрограмму имена процедур и функций.

Для объявления процедурного типа используют заголовок подпрограммы, в котором отсутствует имя, например:

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.

<< | >>
Источник: Иванова Г.С. Основы программирования. 2002

Еще по теме Параметры процедурного типа:

  1. § 3.4. Параметры социальной структуры организации
  2. Временные параметры вопроса
  3. ПАРАМЕТР
  4. 45. Структура и социально-психологические параметры малой группы
  5. Функции типа
  6. Этичное использование типа
  7. Журналы "обычного русского типа"
  8. В психологии различают четыре типа памяти.
  9. Часть I. Откроем тайну типа личности
  10. Детский дом семейного типа
  11. Два типа вопроса
  12. Рождение типа
  13. В какой фазе развития типа вы находитесь?
  14. 3) Общества партикуляристского типа достижения.
  15. 2) Общества универсалистского типа приписывания.
  16. 4) Общества партикуляристского типа приписывания.