Programmer en C
Khalfe
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
rodryo86 Messages postés 153 Date d'inscription Statut Membre Dernière intervention -
rodryo86 Messages postés 153 Date d'inscription Statut Membre Dernière intervention -
Bonjour,aidez moi pour elaborer un programme qui perment de resoudre une equation du second degré
<ax²+bx+c=0>
Merci,j'attend votre aide les amis.
<ax²+bx+c=0>
Merci,j'attend votre aide les amis.
A voir également:
- Programmer en C
- Programmer sms - Guide
- Programmer mail gmail - Guide
- Programmer en basic sous windows 10 - Télécharger - Édition & Programmation
- Mettre en veille un programme - Guide
- Apprendre a programmer - Guide
10 réponses
Bonjour Khalfe,
Pour votre problème, je vous propose une fonction:
//
// On fait passer a,b et c en paramètres, et on récupère x1 et x2 (solution 1 et solution 2)
// On fait passer les adresses de x1 et x2 à la fonction
// La fonction renvoie -1 s'il n'y a pas de solution, 0 si il y a une solution
//
// La fonction requiert pour la fonction "sqrt": #include "math.h"
//
int resoud_equation_n2(double a,double b,double c,double *x1,double *x2)
{ double discriminant;
discriminant=b*b-4*a*c; // b²-4ac
if (discriminant<0.0) {
// Pas de solution à l'équation
return(-1);
}
if (discriminant==0.0) {
// Solution double: x1==x2== -b/(2a)
*x1=-b/(2*a);*x2=*x1;
} else {
// Deux solutions à l'équation
// x1=(-b+√discriminant)/(2a)
// x2=(-b-√discriminant)/(2a)
*x1=(-b+sqrt(discriminant))/(2*a);
*x2=(-b-sqrt(discriminant))/(2*a);
}
return(0);
}
Voici un exemple d'utilisation pour 4x²+2x+1=0
double x1,x2;
if (resoud_equation_n2(4,2,1,&x1,&x2)!=-1) {
printf("Solutions pour l'équation: x1=%f x2=%f",x1,x2);
} else {
printf("Pas de solution");
}
Cordialement,
el_linwin
Pour votre problème, je vous propose une fonction:
//
// On fait passer a,b et c en paramètres, et on récupère x1 et x2 (solution 1 et solution 2)
// On fait passer les adresses de x1 et x2 à la fonction
// La fonction renvoie -1 s'il n'y a pas de solution, 0 si il y a une solution
//
// La fonction requiert pour la fonction "sqrt": #include "math.h"
//
int resoud_equation_n2(double a,double b,double c,double *x1,double *x2)
{ double discriminant;
discriminant=b*b-4*a*c; // b²-4ac
if (discriminant<0.0) {
// Pas de solution à l'équation
return(-1);
}
if (discriminant==0.0) {
// Solution double: x1==x2== -b/(2a)
*x1=-b/(2*a);*x2=*x1;
} else {
// Deux solutions à l'équation
// x1=(-b+√discriminant)/(2a)
// x2=(-b-√discriminant)/(2a)
*x1=(-b+sqrt(discriminant))/(2*a);
*x2=(-b-sqrt(discriminant))/(2*a);
}
return(0);
}
Voici un exemple d'utilisation pour 4x²+2x+1=0
double x1,x2;
if (resoud_equation_n2(4,2,1,&x1,&x2)!=-1) {
printf("Solutions pour l'équation: x1=%f x2=%f",x1,x2);
} else {
printf("Pas de solution");
}
Cordialement,
el_linwin
Il faut aussi remplacer les "2a" par "2*a", il manque le cas "a==0 et b==0" les scanf n'ont pas beaucoup d'utilité...
#include <math.h> int main(void){ float b,a,c,delta,x1,x2; printf("Entrer la premiere valeur (a):"); scanf("%f",&a); printf("Entrer la deuxieme valeure (b):"); scanf("%f",&b); printf("Entrer la troisieme valeure (c):"); scanf("%f",&c); if(a==0 && b==0){ printf("Il n'y a pas de solution\n"); return 0; } if(a==0 && b!=0){ x1=(-c)/b; printf("On a une seule solution:%f\n",x1); return 0; } if(b==0 && c==0 && a!=0){ printf("L'unique solution est 0"); return 0; } if(b==0 && c!=0 && a!=0){ printf("Pas de solution"); } if(a!=0 && b!=0){ delta=b*b-4*a*c; if(delta<0){ printf("Pas de solutions réelles"); return 0; } if(delta==0){ x1=(-b)/(2*a); printf("On a une racine double:%f\n",&x1); return 0; } if(delta>0){ x1=-((b-sqrt(delta))/(2*a)); x2=-((b+sqrt(delta))/(2*a)); printf("On a deux racines differentes:%f et %f\n",&x1,&x2); return 0; } } return 0; }
Bonjour;
Merci a el_liwin et a tous ;en faite c'est compris et j'aimerais que mon programme resout l'equation <ax²+bx+c=0>
dans le cadre generale c'est a dire pour chacun des cas suivants : si (a=0) ,si ( a<>0),si (b=0),si ( b<>0) ,si (c=0) et si (c<>0).
Je compte sur vous.
Merci a el_liwin et a tous ;en faite c'est compris et j'aimerais que mon programme resout l'equation <ax²+bx+c=0>
dans le cadre generale c'est a dire pour chacun des cas suivants : si (a=0) ,si ( a<>0),si (b=0),si ( b<>0) ,si (c=0) et si (c<>0).
Je compte sur vous.
Il t'a tout donné. Sa fonction fonctionne pour tous les cas. Essaye de comprendre un peu le code qu'il t'a gentiment donné pour faire ton travail avant de faire des commentaires dessus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
si a==0, alors ce n'est plus une équation du second degrés, et il n'y a qu'une solution, facile à obtenir. C'est le seul cas non traité par el _linwin
Je tiens juste à préciser que lorsque le discriminant est inférieur à 0, il n'y a pas de solution réelle, mais ça n'empêche pas les solutions complexes.
Je tiens juste à préciser que lorsque le discriminant est inférieur à 0, il n'y a pas de solution réelle, mais ça n'empêche pas les solutions complexes.
Bonjour à tous,
A Char Snipeur: effectivement, le cas où a==0 n'est pas traité, car n'étant plus une équation du second degré. Cependant, il est facile de modifier la fonction pour traiter le cas. Concernant le ca où le discriminant est inférieur à 0, oui il y a des solutions complexes, mais commes les nombres complexes ne sont pas ma tasse de thé...
Ceci dit, si Khalfe souhaite intégrer la gestion de ce cas, il lui devrait être assez aisé d'ajouter le code nécessaire et ajouter l'inclusion #include <complex.h>, qui est fournie en standard avec n'importe quel compilateur C/C++.
Cordialement,
el_linwin
A Char Snipeur: effectivement, le cas où a==0 n'est pas traité, car n'étant plus une équation du second degré. Cependant, il est facile de modifier la fonction pour traiter le cas. Concernant le ca où le discriminant est inférieur à 0, oui il y a des solutions complexes, mais commes les nombres complexes ne sont pas ma tasse de thé...
Ceci dit, si Khalfe souhaite intégrer la gestion de ce cas, il lui devrait être assez aisé d'ajouter le code nécessaire et ajouter l'inclusion #include <complex.h>, qui est fournie en standard avec n'importe quel compilateur C/C++.
Cordialement,
el_linwin
Bonjour a tous,
Ok,merci pour tous en faite g suis pas trops poussé en programmation g suis débutant et g me debrouille tout seul j'ais essayé le programme de el_win mais le compilateur me signal toujours une erreure .Et voici,j'avais elaboré au part avant un programme là aussi le compilateur me signal erreur,veuillez m'aidez a corrigez l'erreur; verifiez là et voici le programme:
#include <math.h>
int main(void)
{
float b,a,c,delta,x1,x2;
printf("Entrer la premiere valeur:");
scanf("%f",&a);
printf("Entrer la deuxieme valeure :");
scanf("%f",&b);
printf("Entrer la troisieme valeure :");
scanf("%f",&c);
if(a==0);{
x1==(-c)/b;
printf("On a une seule solution:%f\n",x1);
scanf("%f\n",x1);}
if((b==0)&&(c==0));{
printf("Tout est dans R");}
if((b==0)&&(c!=0));{
printf("Pas de solution");}
}
else;{
delta==b*b-4*a*c;
if(delta<0);{
printf("Pas de racine");}
if(delta==0);{
x1==(-b)/(2a);
printf("On a une racine double:%f%f\n",&x1);}
scanf("%f\n",&x1);
if(delta>0);{
x1==-((b-sqrt(delta))/(2a));
x2==-((b+sqrt(delta))/(2a));
printf("On a deux racine differentes:%f\n%f\n",&x1,&x2);}
scanf("%f%f\n",&x1,&x2);}
}
return 0;
}
Ok,merci pour tous en faite g suis pas trops poussé en programmation g suis débutant et g me debrouille tout seul j'ais essayé le programme de el_win mais le compilateur me signal toujours une erreure .Et voici,j'avais elaboré au part avant un programme là aussi le compilateur me signal erreur,veuillez m'aidez a corrigez l'erreur; verifiez là et voici le programme:
#include <math.h>
int main(void)
{
float b,a,c,delta,x1,x2;
printf("Entrer la premiere valeur:");
scanf("%f",&a);
printf("Entrer la deuxieme valeure :");
scanf("%f",&b);
printf("Entrer la troisieme valeure :");
scanf("%f",&c);
if(a==0);{
x1==(-c)/b;
printf("On a une seule solution:%f\n",x1);
scanf("%f\n",x1);}
if((b==0)&&(c==0));{
printf("Tout est dans R");}
if((b==0)&&(c!=0));{
printf("Pas de solution");}
}
else;{
delta==b*b-4*a*c;
if(delta<0);{
printf("Pas de racine");}
if(delta==0);{
x1==(-b)/(2a);
printf("On a une racine double:%f%f\n",&x1);}
scanf("%f\n",&x1);
if(delta>0);{
x1==-((b-sqrt(delta))/(2a));
x2==-((b+sqrt(delta))/(2a));
printf("On a deux racine differentes:%f\n%f\n",&x1,&x2);}
scanf("%f%f\n",&x1,&x2);}
}
return 0;
}
Bonjour Khalfe,
Voici la version corrigée de votre code:
Attention: a=b est une assignation, alors que a==b est un test d'égalité.
Cordialement,
el_linwin
Voici la version corrigée de votre code:
#include <math.h> int main(void) { float b,a,c,delta,x1,x2; printf("Entrer la premiere valeur:"); scanf("%f",&a); printf("Entrer la deuxieme valeure :"); scanf("%f",&b); printf("Entrer la troisieme valeure :"); scanf("%f",&c); if(a==0);{ x1=(-c)/b; printf("On a une seule solution:%f\n",x1); scanf("%f\n",x1);} if((b==0)&&(c==0));{ printf("Tout est dans R");} if((b==0)&&(c!=0));{ printf("Pas de solution");} } else;{ delta=b*b-4*a*c; if(delta<0);{ printf("Pas de racine");} if(delta==0);{ x1=(-b)/(2a); printf("On a une racine double:%f%f\n",&x1);} scanf("%f\n",&x1); if(delta>0);{ x1=-((b-sqrt(delta))/(2a)); x2=-((b+sqrt(delta))/(2a)); printf("On a deux racine differentes:%f\n%f\n",&x1,&x2);} scanf("%f%f\n",&x1,&x2);} } return 0; }
Attention: a=b est une assignation, alors que a==b est un test d'égalité.
Cordialement,
el_linwin
Les solutions proposées sont peut être les bonne mais.
Tout comme il est mieux de t'apprendre à pêcher que de te donner du poisson,je te conseillerais de te mêttre au C en fait de devenir un zero :-)). Suis le tutos de m@teo21 sur www.siteduzero.com.
Après,tu resolveras des problèmes de ce genre comme un grand s'est sûr!!!
Bonne visite du site!!!
Tout comme il est mieux de t'apprendre à pêcher que de te donner du poisson,je te conseillerais de te mêttre au C en fait de devenir un zero :-)). Suis le tutos de m@teo21 sur www.siteduzero.com.
Après,tu resolveras des problèmes de ce genre comme un grand s'est sûr!!!
Bonne visite du site!!!