Equation seconde degres [Résolu]

Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Dernière intervention
8 juillet 2008
- - Dernière réponse :  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
Afficher la suite 

Votre réponse

12 réponses

Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Dernière intervention
9 juillet 2013
0
Merci
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+
Commenter la réponse de Pistol_Pete
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Dernière intervention
8 juillet 2008
0
Merci
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 ^^
Commenter la réponse de sliverman
Messages postés
83
Date d'inscription
vendredi 17 juin 2005
Dernière intervention
8 juillet 2008
0
Merci
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;
}
Commenter la réponse de sliverman
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Dernière intervention
9 juillet 2013
0
Merci
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.
Commenter la réponse de Pistol_Pete
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Dernière intervention
19 mars 2015
0
Merci
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 !!
Commenter la réponse de mogwai93
Messages postés
788
Date d'inscription
mardi 8 juillet 2003
Dernière intervention
8 mars 2017
0
Merci
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
Commenter la réponse de cs_louis14
Messages postés
318
Date d'inscription
vendredi 25 mai 2007
Dernière intervention
19 octobre 2007
0
Merci
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
Commenter la réponse de The_Guardian
Messages postés
14287
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
13 décembre 2018
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Dernière intervention
9 juillet 2013
0
Merci
Ha qu'est ce j'adorai ma TI83...
Commenter la réponse de Pistol_Pete
Messages postés
1
Date d'inscription
samedi 29 octobre 2011
Dernière intervention
30 octobre 2011
0
Merci
très jolie le programme marche bien

meilleur
Commenter la réponse de pkayupe
Messages postés
318
Date d'inscription
vendredi 25 mai 2007
Dernière intervention
19 octobre 2007
0
Merci
thx;)

Une autruche ne se cuit pas aux petits lardons :p
Commenter la réponse de The_Guardian
0
Merci
#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;
}
Commenter la réponse de wilam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.