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   -
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   Statut Membre Dernière intervention   90
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   69
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   90
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   90
 
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   Statut Membre Dernière intervention   90
 
Bonjour Hobit53,

Bien vu !


Cordialement,
el_linwin
0
rodryo86 Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   16
 
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