sliverman
Messages postés83Date d'inscriptionvendredi 17 juin 2005StatutMembreDerniè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
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");
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");
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
mogwai93
Messages postés361Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention19 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 !!
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 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)
#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;
}