Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФУНКЦІЇ ЗДАВАТИ.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
611.33 Кб
Скачать

11.9.2. Вказівник на функцію як параметр функцій

Найчастіше вказівники на функції використовуються як формальні параметри у функціях вищого (в алгоритмічно-структурному розумінні) рівня. Це дає змогу ство­рювати функції, які опрацьовують або використовують певний тип інших функцій без огляду на їх конкретні імена та внутрішнє наповнення.

Розглянемо функцію, призначену для обчислення середнього значення довільної математичної' функції однієї змінної, аргумент і значення якої мають дійсний тип. 'Значення відповідної математичної'функції повинні обчислюватися у к послідовних і очках проміжку [хО, хк].

/' Функція обчислення середнього значення математичної функції, заданої вхазівнихом pf, ва інтервалі [хО,хк] "/

•define К 100 /* кількість точок аналізу Функції */

double AverFunValue (double хО, double xk, double('pf)(double))

і

double x, dx, fsum ■ 0; dx = (xk-xO)/<K-l); /* віддаль між точками аналізу */

for (х-хО, xk+=dx/10; х < xk; x*«dx)

fsum+- (*pf)(x); /* сумування значень функції */

return fsum / K;

Функція AverFunValue () мас три параметри: перші два задають межі проміжку, а третій - pf вказує на математичну функцію, для якої обчислюється середнє значен­ня. В оголошенні pf та в звертаннях до математичної функції використано операцію розадресації вказівника на функцію:

doublet * pf) (double) - оголошення вказівника;

(" pf) (х) - звертання до функції. В обох випадках можна було скористатися спрощеними формами:

double pf (double) - для оголошення вказівника;

pf (х) - для звертання до функції.

аЗвернемо увагу на ще одну осо5ливість програми: в загоповку циклу значення кінцевої межі проміжку хк дещо посувається вправо: хк +- dx/10. Це зроблено для того, щоб через імовірне нагромадження похибки, викликаної багаторазовим додаванням дійсного значення кроку dx, не пропустити останню точку проміжку.

Проілюструємо використання функції AverFunValue (ї прикладом програми, яка обчислює середнє значення двох математичних функцій funl() та fun2() на проміжку, заданому користувачем.

/•••*•** /

/• Обчислення середнього значення двох математичних функцій «/ /■•*••**•**»•*■■*.*•****.**•• **•***************•******«**»****/

•include <stdio.h> •include <math.h> •define K 100

double funl (double); /* прототипи функцій */

double fun2 (double);

double AverFunValue (double, double, double (') (double)) ;

int main (void)

<

double a, b; /* межі проміжку */

printf <"Чпінтервал -> "); scanf ('■%lf%lf", sa JbJ;

printf <"\n Середнє значення Фунхції_1 -> %+.41f,

AverFunValue(a, b, funi));

printf ("\n Середнє значення фунхції_2 -> %+.41f\n",

AverFunValue(a, b, fun2));

return 0;

)

/* функція, що визначає середнє значення математичної функції,

заданої вказівником pf, на інтервалі аналізу [x0,xkl */

double AverFunValue (double х0, double xk, double('pf)(double)) і

double x, dx, fsjm-0; dx-(xk-xO)/(K-l);

for (x-xO, xk+-dx/10; x<xk; x+-dx)

fsum+- (*pf)(x); return fsum / K;

)

double funl (double x) /* перша математична функція */

{

return sin(2*x) - 0.85'cos(x+1.4);

)

double fun2 {double x! /* друга математична функція •/

I

if (x>-0)

return 3*cos(1.5-x); else

return cos(x)*cos(x);

)

Приклад виконання:

Інтервал -> -0.6 2.7

Середнє значення фунхції_1 -> +0.3418 Середнє значення функції_2 -> -0.3252

У викликах функції AverFunValue ( ), що виконуються в main (}, третім парамет­ром вказується ім'я тієї математичної функції програми, для якої обчислюється середнє значення. Можна явно вказати, шо передається саме адреса функції, записавши перед її іменем знак & . Два наступні виклики рівнозначні:

AverFunValue(a, b, funl) ■ AverFunValue(a, b, tfunl)