Aide sur mon code
segawahabwade
Messages postés
2
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
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;
}
}
#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
-
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 tonmain
, déplaces-le. Idem pour tonsystem("PAUSE");, que je remplacerais volontiers par ungetchar();
. - Tu utilises
sqrt
mais n'as pas#include <math.h>
. -
%lf
c'est pour des typesdouble
et nonfloat
, 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 tonif (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 - Tu n'as pas besoin de l'en-tête
-
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,-
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
etc
ne subissent pas de calculs, donc un 0 tapé par l'utilisateur sera un vrai 0 enfloat
.Jamais de %lf dans un printf().
Raaaah, si tout le monde compilait avec-Wall -Werror -pedantic
... -
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.
-