Aide sur mon code

Fermé
segawahabwade Messages postés 2 Date d'inscription dimanche 22 février 2015 Statut Membre Dernière intervention 23 février 2015 - 23 févr. 2015 à 20:51
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 23 févr. 2015 à 23:53
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;
}

}
A voir également:

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 23/02/2015 à 21:11
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
23 févr. 2015 à 23:03
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
23 févr. 2015 à 23:24
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
23 févr. 2015 à 23:53
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