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
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.
A voir également:

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
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
1
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
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;
}
1
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
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.
0
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
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
0

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
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.
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 à 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
0
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
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;
}
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
Bonjour Khalfe,

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
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 à 17:06
Bonjour Hobit53,

Bien vu !


Cordialement,
el_linwin
0
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
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!!!
0