Equation seconde degres [Résolu]

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

Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 15 oct. 2007 à 20:18
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
sliverman 83 Messages postés vendredi 17 juin 2005Date d'inscription 8 juillet 2008 Dernière intervention - 15 oct. 2007 à 20:39
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
sliverman 83 Messages postés vendredi 17 juin 2005Date d'inscription 8 juillet 2008 Dernière intervention - 15 oct. 2007 à 20:47
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
Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 15 oct. 2007 à 22:03
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
mogwai93 361 Messages postés mardi 31 décembre 2002Date d'inscription 19 mars 2015 Dernière intervention - 16 oct. 2007 à 08:22
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
cs_louis14 788 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 16 oct. 2007 à 08:51
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
The_Guardian 318 Messages postés vendredi 25 mai 2007Date d'inscription 19 octobre 2007 Dernière intervention - 16 oct. 2007 à 17:31
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
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 18 octobre 2018 Dernière intervention - 17 oct. 2007 à 10:40
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
Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 17 oct. 2007 à 11:24
0
Merci
Ha qu'est ce j'adorai ma TI83...
Commenter la réponse de Pistol_Pete
pkayupe 1 Messages postés samedi 29 octobre 2011Date d'inscription 30 octobre 2011 Dernière intervention - 30 oct. 2011 à 16:24
0
Merci
très jolie le programme marche bien

meilleur
Commenter la réponse de pkayupe
The_Guardian 318 Messages postés vendredi 25 mai 2007Date d'inscription 19 octobre 2007 Dernière intervention - 1 nov. 2011 à 00:02
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.