Programmer en C
Fermé
Khalfe
Messages postés
33
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
12 juin 2009
-
27 juil. 2008 à 15:38
rodryo86 Messages postés 153 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 16 juillet 2018 - 28 juil. 2008 à 17:12
rodryo86 Messages postés 153 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 16 juillet 2018 - 28 juil. 2008 à 17:12
A voir également:
- Programmer en C
- Programmer sms - Guide
- Programmer mail gmail - Guide
- Programmer en basic sous windows 10 - Télécharger - Édition & Programmation
- Programmer un mail outlook - Guide
- Mettre en veille un programme - Guide
10 réponses
el_linwin
Messages postés
521
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
27 juil. 2008 à 15:59
27 juil. 2008 à 15:59
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
Hobit53
Messages postés
3
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
5 août 2008
1
28 juil. 2008 à 17:01
28 juil. 2008 à 17:01
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; }
Khalfe
Messages postés
33
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
12 juin 2009
1
27 juil. 2008 à 21:06
27 juil. 2008 à 21:06
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.
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
28 juil. 2008 à 08:51
28 juil. 2008 à 08:51
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
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 juil. 2008 à 10:02
28 juil. 2008 à 10:02
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.
el_linwin
Messages postés
521
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
28 juil. 2008 à 10:53
28 juil. 2008 à 10:53
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
Khalfe
Messages postés
33
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
12 juin 2009
1
28 juil. 2008 à 16:41
28 juil. 2008 à 16:41
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;
}
el_linwin
Messages postés
521
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
28 juil. 2008 à 16:45
28 juil. 2008 à 16:45
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
el_linwin
Messages postés
521
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
28 juil. 2008 à 17:06
28 juil. 2008 à 17:06
Bonjour Hobit53,
Bien vu !
Cordialement,
el_linwin
Bien vu !
Cordialement,
el_linwin
rodryo86
Messages postés
153
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
16 juillet 2018
16
28 juil. 2008 à 17:12
28 juil. 2008 à 17:12
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!!!