Нужна помощь с передачей функции в качестве параметра

Есть функция f(x) представляющая собой многочлен второй степени. Необходимо посчитать определенный интеграл по методу Симпсона(но это не суть проблемы, т.к. функции для них я написал). Единственное, мне надо передать функцию F в качестве параметра в функцию integral, а как это сделать я не совсем понимаю.

    double f(double cofA, double cofB, double c, double x) 
{
    double f = cofA * x * x + cofB * x + c;
    return f;
}

double Integral(double cofA,double cofB,double c, double a, double b)
{
    double h = (b - a) / 2;
    double Integral = h / 3 * (f(cofA, cofB, c, a)+4* f(cofA, cofB, c, (a+b)/2)+ f(cofA, cofB, c, b));
    return Integral;
}

Я думал сделать так :

 double Integral(double cofA,double cofB,double c, double a, double b,
double f1= f(cofA, cofB, c, a),double f2= f(cofA, cofB, c, (a+b)/2),double f3= f(cofA, cofB, c, b))

Но вижуалка ругается и говорит, что cofA, cofB, c, a,b не инициализированы


Ответы (2 шт):

Автор решения: dIm0n

Попробуйте так:

double f(double cofA, double cofB, double c, double x) 
{
    double f = cofA * x * x + cofB * x + c;
    return f;
}

double Integral(double cofA,double cofB,double c, double a, double b,
double (*f) (double, double, double, double))
{
    double h = (b - a) / 2;
    double Integral = h / 3 * (f(cofA, cofB, c, a)+4* f(cofA, cofB, c, (a+b)/2)+ f(cofA, cofB, c, b));
    return Integral;
}
→ Ссылка
Автор решения: EzikBro

В принципе я не вижу особой причины передавать функцию f в Integral как аргумент вместе с ее коэффициентами, но тогда посмотрите в сторону решения с помощью структуры:

struct Function
{
    vector<double> coef;

    Function()
    {
        coef = { 0 };
    }

    Function(vector<double> koef)
    {
        coef = koef;
    }

    double calc(double x)
    {
        double res = coef[0];
        for (int i = 1; i < coef.size(); i++)
        {
            res = res * x + coef[i];
        }
        return res;
    }
};

double integral(Function& f, double a, double b)
{
    double h = (b - a) / 2;
    double res = h / 3 * (f.calc(a) + 4 * f.calc((a + b) / 2) + f.calc(b));
    return res;
}
→ Ссылка