Equation seconde degres [Résolu]

Signaler
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
8 juillet 2008
-
 wilam -
Bonsoir a tous, alors voila, ( je commence en éléctro des demain le C et le prof nous a dit se qu'on devra savoir faire au bout des 8h, c'est résoudre une équation du second degrès )

Je m'y connais un pe en C et j'aimerai de l'aide car je ne récupère pas x1 et je comprend pas pourquoi

Voila mon code : ( je suis sous dev-c++ )

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

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

     int a, b, c, d;
     double x1, x2, x0;

     printf("Valeur de A : \nA = ");
     scanf("%i", &a);
     printf("Valeur de B : \nB = ");
     scanf("%i", &b);
     printf("Valeur de C : \nC = ");
     scanf("%i", &c);
    
     // Calcul de delta
    
     d = (b*b)-(4*a*c);
    
     if (d<0)
    {
        printf("delta = %i\n\n", d);
        printf("Delta est inferieur a 0, donc il n'y a pas de solutions\n\n");   
   }
    if (d>0)
    {
        printf("delta=%i\n\n", d);
        printf("Delta est superieur a 0, donc il y a pas deux solutions\n\n");
       
        //On calcul les racines
             
        x1=-b+sqrt(d)/2*a;
        x2=-b-sqrt(d)/2*a;
       
        printf("%d", x1);
     }
 
  system("PAUSE");   
  return 0;
}

Merci d'avance
A voir également:

12 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut

x1 et x2 sont des doubles. Si tu veux les afficher il faut écrire:
 printf("%f", x1);

%d correspond à un entier décimal signé et non a un double
A+
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
8 juillet 2008

Merci de ton aide ^^

Maintenant je n'arrive à avoir le bon résultat quand delta = 0

j'ai pris :
a = 4
b = 4
c = 1

et je récupère -8 alors que je devrai avoir -4/8 donc -2/4 et donc -1/2 ^^
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
8 juillet 2008

Et je crois que mes résultat son faux, même pour delta > 0

Voila le code complet :

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

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

     int a, b, c, d;
     double x1, x2, x;

     printf("Valeur de A : \nA = ");
     scanf("%i", &a);
     printf("Valeur de B : \nB = ");
     scanf("%i", &b);
     printf("Valeur de C : \nC = ");
     scanf("%i", &c);
    
     // Calcul de delta
    
     d = (b*b)-(4*a*c);
    
     if (d<0)
    {
        printf("\nDelta = %i\n\n", d);
        printf("Delta est inferieur a 0, donc il n'y a pas de solutions\n\n");   
    }
    if (d>0)
    {
        printf("\nDelta = %i\n\n", d);
        printf("Delta est superieur a 0, donc il y a deux solutions\n\n");
       
        //On calcul les racines
             
        x1 = -b+sqrt(d)/2*a;
        x2 = -b-sqrt(d)/2*a;
       
        printf("Solution 1 = %.2f\n", x1);
        printf("solution 2 = %.2f\n\n", x2);
     }
     if (d==0)
     {
        printf("\nDelta = %i\n\n", d);
        printf("Delta est egale a 0, donc il y a une solution\n\n");
       
        //On calcul la racine
        x = -b/2*a;
       
        printf("Solution = %.2f\n\n", x);
     }
 
  system("PAUSE");   
  return 0;
}
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Lors de tes calcules, tu additionnes des int donc le compilo
donne les resulats en int.
Il faut que tu cast les int en double .
Par exemple, pour delta=0 ca va donner:
x = (double)-b/(double)(2*a);

La sa doit donner 1/2 pour ton exemple.
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015

pour "optimiser" un peu le code :
- rajoute des "else" entre chaque if
car dans ton cas, à l'execution, il va tester les 3 cas à la suite
ici si on est dans 1 cas, on ne peut être dans les 2 autres

- tu peux aussi stocker sqrt(delta) et (2*a) dans une variable temporaire
et donc stocker sqrt (delta) / (2 * a) dans une variable !
car tu les appelles 2 fois de suite
ici, au niveau temps c'est négligeable, mais si un jour tu as beaucoup de calcul du meme genre, tu vas voir les performances !!
Messages postés
793
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
10 février 2021
8
déclare d endouble
double d = double(b*b - 4*a*c)
ensuite la formule de tes solutions est fausse  il manque des parenthèses:
x1 = (-b+ sqrt(d))/(2*a)
x2 = (-b- sqrt(d))/(2*a)

louis14
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

Bonjour,

Oui ton delta était faux en int.
Et que ça marche pas si a=0 ou b=0 que c'est juste 2 tests à faire
et que c'est plus propre

=

Une autruche ne se cuit pas aux petits lardons
Messages postés
15062
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 juin 2021
95
Nostalgie...
Je faisais ça sur ma calculatrice graphique quand j'étais au lycée....

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Ha qu'est ce j'adorai ma TI83...
Messages postés
1
Date d'inscription
samedi 29 octobre 2011
Statut
Membre
Dernière intervention
30 octobre 2011

très jolie le programme marche bien

meilleur
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

thx;)

Une autruche ne se cuit pas aux petits lardons :p
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
float a,b,c,d,s;
printf("give me A , B and C \n");
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
if(a==0){
if(b==0){
if(c==0){
printf("la solution est l'ensemble |R \n");
}else{
printf("il n'ya pas de solution dans l'ensemble |R \n");
}
}else{
printf("la solution est: x=%f \n",-c/b);
}
}else{
if((a+b+c)==0){
printf("il ya deux solution: x1=%f ,et, x2=1 \n",c/a);
}else if((a-b+c)==0){
printf("il ya deux solution: x1=%f ,et, x2=-1 \n",-c/a);
}else{
d=(b*b)-(4*a*c);
if(d<0){
printf("il n'ya pas de solution dans l'ensemble |R \n");
}else if(d==0){
printf("la solution est: x=%f \n",-b/(2*a));
}else{
s=sqrt(d);
printf("il ya deux solution: x1=%f ,et, x2=%f \n",(-b-s)/(2*a),(-b+s)/(2*a));
}
}
}
return 0;
}