Equation seconde degres

Résolu
sliverman
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
8 juillet 2008
- 15 oct. 2007 à 19:37
 wilam - 28 sept. 2016 à 02:29
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

12 réponses

Pistol_Pete
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
15 oct. 2007 à 20:18
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+
0
sliverman
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
8 juillet 2008

15 oct. 2007 à 20:39
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 ^^
0
sliverman
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
8 juillet 2008

15 oct. 2007 à 20:47
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;
}
0
Pistol_Pete
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
15 oct. 2007 à 22:03
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mogwai93
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015

16 oct. 2007 à 08:22
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 !!
0
cs_louis14
Messages postés
793
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
10 février 2021
8
16 oct. 2007 à 08:51
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
0
The_Guardian
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

16 oct. 2007 à 17:31
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
0
BunoCS
Messages postés
15266
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2022
103
17 oct. 2007 à 10:40
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...
0
Pistol_Pete
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
17 oct. 2007 à 11:24
Ha qu'est ce j'adorai ma TI83...
0
pkayupe
Messages postés
1
Date d'inscription
samedi 29 octobre 2011
Statut
Membre
Dernière intervention
30 octobre 2011

30 oct. 2011 à 16:24
très jolie le programme marche bien

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

1 nov. 2011 à 00:02
thx;)

Une autruche ne se cuit pas aux petits lardons :p
0
#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;
}
0