Aide sur mon code

segawahabwade Messages postés 2 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    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
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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,
    0
    1. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      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
      ...
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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.
      0