2013-11-07 3 views
1

Я немного новичок в c-программировании, я пытаюсь интегрировать функцию с правилом трапеции. Моя функция такова:Вызов функции как переменной в другой функции

extern double integrate_trapezoid(double function,double min, double max, double subdivisions) 
{ 
    double h = (max-min)/subdivisions; 
    s=0; 
    for (k=0; k < (subdivisions) ; k++) 
    { 
     s = s + (h/2) * (function(min + k*h) + function(min + (k+1)*h)); 
    } 
    return s; 
}  

Мой вопрос в том, как передать общие функции этой функции? Я хочу, чтобы эта функция integrate_trapezoid могла интегрировать любую функцию, в которой я нуждаюсь.

Спасибо! Omer

+1

Пропустить указатель функции. –

ответ

1

Вы передаете function как function pointer.

E.g.

double integrate_trapezoid(double (*function)(double),double min, double max, double subdivisions) 
{ 
    ... 
    (*function)(someValue); 
    ... 
} 

... 

double someFunction(double value) { ... } 

... 

integrate_trapezoid(&someFunction, ...); 
+0

Стоит добавить, что функции и указатели функций могут свободно перемещаться, поэтому будут выполняться 'function (someValue)' и 'integrrate_trapezoid (someFunction, ...)'. –

+0

Чтобы сделать код читаемым - используйте typedef - 'typedef double (* integrate_func_t) (double);' – ugoren

+0

Спасибо! Оно работает! – Ohm

Смежные вопросы