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 1053 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 1053 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 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
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 1
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 15480 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 12 juin 2024 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 1053 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
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
Rejoignez-nous