#include #include double func(double x); int main(){ /* Variando opportunamente queste costanti si puo' effettuare il calcolo su intervalli arbitrari... */ const double prec = 0.0001; const double a = 0.; const double b = 3.141592; int n=1,i=0; double h=0.; double In = 1.,Insucc = 0.; double f0,fn; /* Calcolo la funzione agli estremi */ f0 = func(a); fn = func(b); /* Implementiamo l'algoritmo nella sua versione piu' semplice, senza raddoppiare ogni volta gli intervalli...la versione piu' astuta puo' essere un utile esercizio... */ do{ In = Insucc; Insucc = 0.; h = (b-a)/n; for(i=1;i<=n;i++){ Insucc += 2.*func(a+(i*h)); } Insucc = 0.5*h*(Insucc+f0+fn); printf("n=%d\n",n++); }while (fabs(Insucc-In)>=prec); printf("L'integrale vale:%lf\n",Insucc); return 0; } double func(double x){ return (sin(x)*exp(2*x)); }