#include #include #define PAS_M1 0.1 #define PI 3.141592653589793238462643383279502884197 typedef struct encadrement encadrement; struct encadrement { double min; double min_val; double max; double max_val; }; double moyenne_M1(double r) { double a=0.0; double limite=acos(10.0/r); double somme=0; int nombre=0; while( a < limite ) { somme+=10.0*cos(a); a+=PAS_M1; nombre++; } if ( nombre < 1 ) return 0; return somme/nombre; } double moyenne_M2(double r) { double ret=(PI-acos(10.0/r))*r+r; return ret; } double valeur(double r) { return (moyenne_M1(r)*acos(10.0/r)+ (moyenne_M2(r))*(PI-acos(10.0/r)))/PI; } encadrement encadrer_min(double a,double valeur_a,double b,double valeur_b,int limite) { double c; double valeur_c; double d; double valeur_d; double e; double valeur_e; encadrement solution; if ( limite < 0 ) { solution.min=a; solution.min_val=valeur_a; solution.max=b; solution.max_val=valeur_b; return solution; } c=(a+b)/2.0; valeur_c=valeur(c); if ( valeur_c > valeur_a ) return encadrer_min(a,valeur_a,c,valeur_c,limite-1); else if ( valeur_c > valeur_b ) return encadrer_min(c,valeur_c,b,valeur_b,limite-1); else { d=(a+c)/2.0; valeur_d=valeur(d); if ( valeur_d > valeur_c ) return encadrer_min(d,valeur_d,b,valeur_b,limite-1); e=(c+b)/2.0; valeur_e=valeur(e); if ( valeur_e > valeur_c ) return encadrer_min(a,valeur_a,e,valeur_e,limite-1); else return encadrer_min(d,valeur_d,e,valeur_e,limite-1); } } int main (void) { encadrement encadre; encadre=encadrer_min(10,valeur(10),30,valeur(30),200); printf("entre f(%.20lf)=%.10lf et f(%.20lf)=%.10lf\n", encadre.min,encadre.min_val,encadre.max,encadre.max_val); /*/ double r=10; while ( r <= 30 ) { printf("%lf : %lf\n",r,valeur(r)); r=r+1; } //printf("%lf",valeur(r));/*/ system("PAUSE"); return 0; }