Programme en C : équation second degré [Résolu/Fermé]

Messages postés
33
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
24 avril 2013
- - Dernière réponse :  desire - 8 sept. 2017 à 01:50
Bonjour,

je viens de réaliser un programme en c qui traite une équation du seconde degré, et j'ai besoin d'une correction s'ils vous plaît.

Le programme est :

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{

double a=0,b=0,c=0, delta=0;
double rst1=0, rst2=0, rst3=0 ;
printf("Entrer une valeur pour a : ");
scanf("%ld", &a);
printf("Entrer une valeur pour b : ");
scanf("%ld", &b);
printf("Entrer une valeur pour c : ");
scanf("%ld", &c);
if (a==0){
if (b==0) {
if (c==0) {
printf("tout reel est solution") ;}
else {
printf("il n'y a pas de solution"); }
else {
rst1 = -c/b ;
printf("la solution est %ld", rst1);}
else {
delta = b*b - 4*a*c ;
if (delta < 0) {
printf("il n'y a pas de solution dans les reels");}
else {
rst2 = (-b + sqrt(delta))/ (2*a) ;
rst3 = (-b - sqrt(delta))/ (2*a) ;
printf("il y deux solutions egales a %ld et %ld", rst2, rst3) ; }


system("PAUSE");
return 0;
}


Merci d'avance

Afficher la suite 

3 réponses

Meilleure réponse
49
Merci
tiens, je t'offre une solution plus simple!
#include <stdio.h>
#include <stdlib.h>

int main(void)

{
float x1, x2, delta, a, b, c;
printf("Entrez les valeurs des: a, b, c \n");
scanf("%f %f %f",&a, &b, &c);

delta = (b*b)-(4*a*c);

if (delta == 0.0)
{
x1 = -b /(2*a);
printf("la solution unique est xs = %.2f \n",x1);
}
if (delta > 0.0)
{
x1 = (-b - sqrt(delta))/(2*a);
x2 = (-b + sqrt(delta))/(2*a);
printf("les deux racines sont : x1 = %.2f et x2 = %.2f \n",x1, x2);
}
if (delta < 0.0)

printf("l'equation n admet pas de solution");

return 0;
}

Dire « Merci » 49

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 69484 internautes nous ont dit merci ce mois-ci

fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1609 -
Plus simple mais moins complet...
il faut #include <math.h> pour que sqrt fonctione
je vous remercie
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1609
2
Merci
Bonjour

Dans les scanf, il faut mettre %lf (L minuscule) puisque tes variables sont des doubles.
Dans les printf, il faut mettre %f pour la même raison.
Tu as oublié d'inclure l'entête math.h, vu que tu utilises la fonction sqrt. Par ailleurs, il ne faudra pas oublier de lier la bibliothèque lmath à la compilation (-lm sur gcc).

Cdlt,
scaravenger
Messages postés
2710
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
30 janvier 2015
539 -
Il doit manquer au moins 3 accolades"}"
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1609 -
Je dirais plutôt 1 seule : fermeture du if(a==0)).
Messages postés
2
Date d'inscription
dimanche 22 février 2015
Statut
Membre
Dernière intervention
23 février 2015
-1
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;
}

}
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1609 -
Cela date de 3 ans...
Sinon plusieurs erreurs :

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 : <code c>ici tu mets ton code</code>
Cdlt,