#include /* Ce programme calcule la racine d'une fonction d'une variable, */ /* entre deux bornes x_1 et x_2 */ /* fonc(x) : fonction d'une variable, fournie par l'usager */ /* x_1,x_2 : bornes de la recherche en x; x_1 < x_2 */ /* epsilon : niveau de precision recherche */ /* nmax : nombre maximal d'iteration toleres */ main() { /* Declarations ---------------------------------------------------- */ float fonc(float) ; /* Declaration de la fonction fonc(x) */ int k=0 ; /* Compteur d'iterations */ int itermax=40 ; /* Nombre maximal d'iterations */ float x1, x2 ; /* bornes de l'intervalle initial */ float xm ; /* Ceci sera notre racine */ float epsilon=1.e-5 ; /* Precision requise pour la racine */ float pi=3.1519926536 ; /* la valeur de pi */ float fm, f2, delta; /* Variables locales */ /* Executable ------------------------------------------------------ */ x1 = pi+0.1 ; /* Borne gauche */ x2 = 2.*pi-0.1 ; /* Borne droite */ delta = x2-x1 ; while ( delta > epsilon && k < itermax) /* Boucle bissection */ { xm = 0.5*(x1+x2) ; /* Point milieu de l'intervalle */ fm = fonc(xm) ; /* Valeur de fonc(x) en ce point */ f2 = fonc(x2) ; if ( fm*f2 > 0. ) /* Le demi-intervalle droit a la racine */ { x2 = xm ; } /* L'intervalle devient la moitié droite */ else /* ...sinon c'est le gauche qui a la racine */ { x1 = xm ; } /* L'intervalle devient la moitié gauche */ delta = x2-x1 ; k = k + 1 ; printf ("racine de la fonction = %f +/- %f\n", xm,delta) ; } printf ("racine de la fonction = %f +/- %f\n", xm,delta) ; } /* Definition de la fonction dont on recherche la racine */ float fonc (float x) { float f ; /* Variable locale */ f = x * cos(x) - sin(x) ; /* La fonction qu'on calcule */ return f ; }