#include <stdio.h>

int main() {
    double fun1(double);
    double fun2(double); 
    double nulpunt(double (*f)(double), double, double);
    double x;
    x=nulpunt(&fun1, -3.0, -2.0);
    printf("De benadering van het nulpunt van fun1 is: %.6lf\n", x);
    printf("De waarde van de functie fun1 is dan: %.6lf\n", fun1(x));
    x=nulpunt(&fun2, 0.0, 5.0);
    printf("De benadering van het nulpunt van fun2 is: %.6lf\n", x);
    printf("De waarde van de functie fun2 is dan: %.6lf\n", fun2(x));
    getchar();
    return 0;
}

double nulpunt(double (*f)(double), double a, double b) {
    double m=(a+b)/2;
    if (fabs(f(m)) < 0.5e-6) {
        return m;
    }    
    else {
        if (f(a)>0 && f(m)<0 || f(a)<0 && f(m)>0) {
            return nulpunt(f, a, m);
        }    
        else {
            return nulpunt(f, m, b);
        }    
    }    
}

double fun1(double x) {
    return x*x*x-2*x+5;
}

double fun2(double x) {
    return x*x-4*x+2;
}

/*
Uitvoer:
De benadering van het nulpunt van fun1 is: -2.094551
De waarde van de functie fun1 is dan: 0.000000
De benadering van het nulpunt van fun2 is: 0.585786
De waarde van de functie fun2 is dan: 0.000000
*/
