Aide sur mon code

je voudrais un aide sur ce programme suivant, je suis un débutant de cette module. Merci

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main(){
float X1 , X2 , X0, a , b , c , delta, i;
printf("donner les coefients de l'equation \n");
scanf("%lf %lf %fl", &a, &b, &c);
if(a == 0 && b == 0 && c == 0 ){
printf("tous réels est solution \n");}
else {
if( a == 0){
X1 = -c/b;
printf("la solution est %lf , X1 \n");}
delta = (b*b) - (4*a*c);
if(delta == 0){ X0 == -b/(2*a) ;
printf(" On une racine double qui est %lf\n", X0 );}
else{
if(delta >0){X1 = (-b -sqrt(delta))/(2*a); X2 = (-b -sqrt(delta))/(2*a);
printf(" l'equation admet 2 racines distints réels qui sont %lf et %lf \n", X1 , X2);}
else{
if( delta <0 ){ X1 = (-b -i*sqrt(-delta))/(2*a) ; X2 = (-b + i*sqrt(-delta))/(2*a);
printf("l'equation admet deux solutions complexes qui sont %lf et %lf", X1 , X2);}}
system("PAUSE");
return 0;
}

}

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    BONJOUR
    La politesse, on l'oublie trop souvent...
    Tu as posté ton code, bonne idée! Mais utilise les balises < code> que le forum met à disposition la prochaine fois.
    • Tu n'as pas besoin de l'en-tête
      errno.h
      ici, tu peux l'enlever.
    • Il manque une accolade fermante à la fin de ton programme.
    • Le
      return 0;
      n'est pas toujours exécuté, or il doit être à la toute fin de ton
      main
      , déplaces-le. Idem pour ton
      system("PAUSE");
      , que je remplacerais volontiers par un
      getchar();
      .
    • Tu utilises
      sqrt
      mais n'as pas
      #include <math.h>
      .
    • %lf
      c'est pour des types
      double
      et non
      float
      , change le type de tes variables; en plus tes calculs de nombres seront plus précis.
    • Tu as inversé le L et F au dernier paramètre de format de
      scanf
      !
    • Tu as oublié de faire un gros
      else
      pour ton
      if (a == 0)
      , qui engloberait le reste des cas possibles.
    • Il manque un retour à la ligne dans ton dernier
      printf
      .

    Après niveau calculs je sais pas, j'ai pas encore vu les complexes pour la résolution de polynômes, bien que je saisisse le principe.
    from human import idiocy
    del idiocy
    1. Contributeur
      Rah que ça énervant les double posts...

      Je remets ici ce que j'avais mis dans l'autre post :

      scanf("%lf %lf %fl", &a, &b, &c);
      a, b et c sont des float. Pas des doubles.

      if(a == 0 && b == 0 && c == 0 ){
      La comparaison de flottants n'a pas de sens. Il vaut mieux vérifier que a, b et c sont suffisamment proches de 0.

      X1 = -c/b;
      Badaboum si b vaut 0...

      delta = (b*b) - (4*a*c);
      Vaut mieux mettre un else juste au dessus.

      printf(" l'equation admet 2 racines distints réels qui sont %lf et %lf \n", X1 , X2);}
      Jamais de %lf dans un printf().

      X1 = (-b -i*sqrt(-delta))/(2*a) ;
      Le compilateur risque de râler.

      Note : la prochaine fois, merci d'utiliser la balise "code".
      Exemple :
      ici tu mets ton code

      Cdlt,
      1. Contributeur
        La comparaison de flottants n'a pas de sens. Il vaut mieux vérifier que a, b et c sont suffisamment proches de 0.
        Certes, mais dans ce cas précis,
        a
        b
        et
        c
        ne subissent pas de calculs, donc un 0 tapé par l'utilisateur sera un vrai 0 en
        float
        .
        Jamais de %lf dans un printf().
        Raaaah, si tout le monde compilait avec
        -Wall -Werror -pedantic
        ...
      2. Contributeur
        donc un 0 tapé par l'utilisateur sera un vrai 0 en float
        Le C n'impose pas la représentation des flottants. Du coup, on peut avoir des surprises parfois.
        Par exemple, si l'utilisateur rentre 0.1, tu ne pourras pas faire : if(a==0.1), ça risque de ne pas fonctionner. Pour le 0, ça marchera effectivement la plupart du temps des plateformes, mais rien ne te garantie que la portabilité du fonctionnement.