ВУЗ:
Составители:
Рубрика:
57
for i:=1 to 99 do result:=result+f(xmin+dx*i)*dx;
end;
Здесь конкретный вид функции f не имеет никакого значения, до-
статоч но лишь потребовать, чтобы она принимала один параметр и воз-
вращала значение типа Real. Осуществляется это путем объявления f
указателем на функцию соответствующего вида. С его помощью алго-
ритму можно будет передавать адреса различных подпрограмм, созда-
ваемых пользователем по мере необходимости.
Объявление процедурного указателя сводится к определению с о-
ответствующего процедурного типа. Последнее выглядит как заголовок
подпрограммы, отличаясь от него только отсутствием конкретного им е-
ни. В нашем случае тип указателя f нужно определить так:
type Integrand = function(x: Real): Real; // тип "Интегранд"
Теперь следует либо объявить глобальную переменную f нового
типа:
f: Integrand;
либо, что более предпочтительно, добавить в заголовок функции Integral
еще один параметр:
function Integral(f: Integrand; xmin, xmax: Real): Real;
В первом случае, кстати, можно было обойтись и без явного задания
имени типа, включив его определение прямо в объявление переменной f :
f: function(x: Real): Real;
Предположим теперь , что в нашем распоряжении имеются три
функции:
function Constant(x: Real): Real; // константа
begin result:=1; end;
function Polynomial(x: Real): Real; // многочлен
begin result:=x*x-x+2; end;
function Trigonometric(x: Real): Real; // тригонометрическая функция
begin result:=sin(x)+cos(x); end;
Тог да следующий код
f:=Constant; WriteLn(Integral(f,0,1));
f:=Polynomial; WriteLn(Integral(f,0,1));
f:=Trigonometric; WriteLn(Integral(f,0,1));
for i:=1 to 99 do result:=result+f(xmin+dx*i)*dx;
end;
Зд ес ь конкрет ны й в ид функции f не им еет никакогоз начения, д о-
с т аточнол иш ь пот ребов ат ь , чтобы она приним ал а од ин парам ет р и в оз -
в ращал а з начение т ипа Real. Ос ущес т в л яет с я э то пут ем объяв л ения f
указ ат ел ем на функцию с оот в ет с т в ующего в ид а. С его пом ощь ю ал го-
рит м у м ожно буд ет перед ав ат ь ад рес а раз л ичны х под програм м , с оз д а-
в аем ы хпол ь з ов ат ел ем пом ере необход им ос т и.
Объяв л ение процед урногоуказ ат ел я с в од ит с я к опред ел ению с о-
от в ет с т в ующегопроцед урногот ипа. Пос л ед нее в ы гл яд ит как з агол ов ок
под програм м ы , отл ичаяс ь от неготол ь коот с ут с т в ием конкрет ногоим е-
ни. В наш ем с л учае т ип указ ат ел я f нужноопред ел ит ь т ак:
type Integrand = function(x: Real): Real; // тип "Интегранд"
Т еперь с л ед ует л ибо объяв ит ь гл обал ь ную перем енную f нов ого
т ипа:
f: Integrand;
л ибо, чтобол ее пред почт ит ел ь но, д обав ит ь в з агол ов ок функции Integral
еще од ин парам ет р:
function Integral(f: Integrand; xmin, xmax: Real): Real;
В перв ом с л учае, кс т ат и, м ожно бы л о обойт ис ь и без яв ного з ад ания
им ени т ипа, в кл ючив егоопред ел ение прям ов объяв л ение перем енной f:
f: function(x: Real): Real;
Пред пол ожим т еперь , что в наш ем рас поряжении им еют с я т ри
функции:
function Constant(x: Real): Real; // константа
begin result:=1; end;
function Polynomial(x: Real): Real; // многочлен
begin result:=x*x-x+2; end;
function Trigonometric(x: Real): Real; // тригонометрическая функция
begin result:=sin(x)+cos(x); end;
Тогд а с л ед ующий код
f:=Constant; WriteLn(Integral(f,0,1));
f:=Polynomial; WriteLn(Integral(f,0,1));
f:=Trigonometric; WriteLn(Integral(f,0,1));
57
Страницы
- « первая
- ‹ предыдущая
- …
- 55
- 56
- 57
- 58
- 59
- …
- следующая ›
- последняя »
