/* double toto( double (*f)(double), double x){
   return(f(x));} comment passer une fonction comme argument à une fonction */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define sqr(x) ((x)*(x))

double f(double x){//exemple d'une fonction pour tester  simpson
  return(x);
}



double simpson( double (*f)(double), double A, double B, int N){// N impair!
    double h=(B-A)/( (double)N +1.0);
    double temp=h*(f(A)+f(B))/3.0;
    int j;
    double x;
    for(j=1;j<N;j=j+2){
	x=A+j*h;
	temp=temp + (4.0*h*f(x)/3.0);}

    for(j=2;j<N;j=j+2){
	x=A+j*h;
	temp=temp + (2.0*h*f(x)/3.0);} 
	return(temp);
    }


main(){
  printf("%g\n",simpson(f,0.0,1.0,1023));//Test

	
}
