/* Resolution d'une equation du second degre dans R */ #include #include /* Saisie des coefficients de l'equation */ void saisie (double *a, double *b, double *c); /* resolution de l'equation: la valeur retournee donne le nombre de solutions, * qui se trouvent dans *x1 et *x2, la valeur 3 indique que tout R * est solution */ int resoudre (double a, double b, double c, double *x1, double *x2); /* Affichage de la resolution avec la convention de la fonction resoudre */ void affiche (int v, double x1, double x2); int main() { int val; double a, b, c, x1,x2; saisie(&a, &b, &c); val = resoudre(a, b, c, &x1, &x2); affiche(val, x1, x2); return 0; } void saisie(double *a, double *b, double *c) { printf("a = "); scanf("%lf",a); printf("b = "); scanf("%lf",b); printf("c = "); scanf("%lf",c); } int resoudre(double a, double b, double c, double *x1, double *x2) { double delta; if (a == 0.0) { if (b == 0.0) { if (c == 0.0) { return 3; } else { return 0; } } else { *x1 = -c/b; return 1; } } else { delta = b*b - 4*a*c; if (delta < 0) { return 0; } else if (delta == 0) { *x1 = -b / 2*a; return 1; } else { *x1 = (-b + sqrt(delta)) / 2*a; *x2 = (-b - sqrt(delta)) / 2*a; return 2; } } } void affiche(int v, double x1, double x2) { switch(v) { case 0: printf("pas de solution reelle\n"); break; case 1: printf("une seule solution: x1 = %f\n", x1); break; case 2: printf("deux solutions: x1 = %f et x2 = %f\n", x1, x2); break; case 3: printf("l\'ensemble de solutions est R\n"); break; } }
Pages: 1 2