bonjour a tous,
je débute en programmation ,j ai essayé de transcrire l'algorithme de dichotomie en langage c et ca a donné le code suivant qui marche a peu prés, le problème c est qu il retourne la racine du polynôme seulement si elle est entier ou réel de virgule 0.5 (c est a dire que si la racine est entre 2 et 2.5 ou 2.5 et 3 le programme bug et ne retourne rien ) ,pourtant ma fonction racine retourne un double
merci
Code:#include <stdio.h> #include <math.h> #define nmax 100 double fct_p(double x,int n,double poly[] ) { double result1 = 0; int i; for(i=n;i>=0;i--) { result1 = result1 * x + poly[i]; } return result1; } double rac(int A,int B, int n,double poly[nmax]) { double C; while(A<B) { C = (A+B)/2.0; if (fct_p(C, n, poly) == 0) { return C; } else if(fct_p(C, n, poly)*fct_p(A,n,poly)< 0) { B = C; } else { A = C; } } printf("la valeur introuvable"); return -1; } int main(int argc, char* argv[]) { int n, i, A, B; double poly[nmax]; char y ; do { printf("Donnez le degre de votre polynome: "); scanf(" %d", &n); for(i=0; i<=n; i++) { printf(" _ Coefficient %d : ", i); scanf(" %lg", &poly[i]); } printf("_Donnez la valeur de l'intervalle gauche : "); scanf(" %d", &A); printf("_Donnez la valeur de l'intervalle droit : "); scanf(" %d", &B); if(fct_p(A,n, poly) * fct_p(B, n, poly) > 0) { printf("ERREUR !!"); } else { printf("_ La racine est : %lg\n", rac(A, B, n, poly)); } do { printf("Voulez-vous refaire un autre calcul?? (Y/N):"); scanf(" %c", &y); }while(y != 'Y' && y != 'N'); } while( y== 'Y'); printf("Merci, Au revoir !\n"); return 0; }
-----