
|
|
Auteur
|
Message
|
1
|
|
|
|
salut à tous
j'ai fait 1 p'tit prog dans lequel j'ai 2 fct° (voir ci-dessous). mon prb est que dans la fct main(), les valeurs de a, b et c valent toutes 0 alors que dans la fct calculDelta(), elles valent bien les valeurs exactes. je ne comprends pas le pourquoi de ce changement. si qlq'1 a une idée je preneur.
#include <stdio.h>
#include <math.h>
float x1, x2, delta, a, b, c;
float calculDelta(float a, float b, float c);
float calculDelta(float a, float b, float c)
{
system("clear");
printf("saisie des coeficients de l'équation\n");
scanf("%f %f %f", &a, &b, &c);
delta = b*b-4*a*c;
printf("delta = %f\n\n", delta);
return delta;
}
int main()
{
// appel de fonction calculDelta
printf("a = %f b = %f c = %f\n", a, b, c);
delta = calculDelta(a, b, c);
if (delta<0)
{
printf("pas de solution dans R\n\n");
exit(0);
}
else
{
if(delta == 0)
{
printf("solution double \n\n");
x1 = x2 = -b/(2*a);
printf("x1 = x2 = -b/(2*a) = %f \n\n", x1);
}
else
{
printf("Deux solutions distinctes \n");
x1 = (-b-sqrt(delta))/2*a;
x2 = (-b+sqrt(delta))/2*a;
printf("x1 = %f\n", (-b-sqrt(delta))/2*a);
printf("x2 = %f\n", (-b+sqrt(delta))/2*a);
printf("\n");
}
}
return 0;
}
-->Message édité par schaff le 22/05/2005 09:26:05<--
|
|
Manque d'energie ?!
|
|
|
Ton x1, x2, a, b, c et delta, pourquoi tu les declares comme ca ? Le mieux etant de les declarer dans la fonction main (surtout qu'il faut les initialiser si tu veux qu'elles aient des valeurs precises.)
De plus si ce sont des variables globales, tu n'as pas besoin de les mettre en parametres dans la fonction calculdelta, vu que c'est le but des variables globales.
Donc si tu veux garder tes variables globales, initialises les, enleves les des parametres de calculDelta, et ca devrait etre mieux deja. Je crois meme que tu n'as pas besoin de retourner le delta.
|
|
|
|
|
skyman a écrit :
Ton x1, x2, a, b, c et delta, pourquoi tu les declares comme ca ? Le mieux etant de les declarer dans la fonction main (surtout qu'il faut les initialiser si tu veux qu'elles aient des valeurs precises.)
De plus si ce sont des variables globales, tu n'as pas besoin de les mettre en parametres dans la fonction calculdelta, vu que c'est le but des variables globales.
Donc si tu veux garder tes variables globales, initialises les, enleves les des parametres de calculDelta, et ca devrait etre mieux deja. Je crois meme que tu n'as pas besoin de retourner le delta.
merci de ton aide.
mais déclarer x1, x2, a, b, c et delta dans la fct° main(), ses variables seront elle vues dans l'autre fct°?
|
|
Manque d'energie ?!
|
|
|
schaff a écrit :
merci de ton aide.
mais déclarer x1, x2, a, b, c et delta dans la fct° main(), ses variables seront elle vues dans l'autre fct°?
Oui si tu les passes en parametres.
Voila ce que je ferais (enfin, mes souvenirs de C sont assez loin :D) :
#include <stdio.h>
#include <math.h>
float calculDelta(float &ad, float &bd, float &cd); //Passage par reference
float calculDelta(float &ad, float &bd, float &cd)
{
system("clear");
printf("saisie des coeficients de l'équation\n");
scanf("%f %f %f", &ad, &bd, &cd);
deltac = bd*bd-4*ad*cd;
printf("delta = %f\n\n", deltac);
return deltac;
}
int main()
{
float x1, x2, delta;
float a, b, c;
delta = calculDelta(a, b, c);
if (delta<0)
{
printf("pas de solution dans R\n\n");
exit(0);
}
else
{
if(delta == 0)
{
printf("solution double \n\n");
x1 = x2 = -b/(2*a);
printf("x1 = x2 = -b/(2*a) = %f \n\n", x1);
}
else
{
printf("Deux solutions distinctes \n");
x1 = (-b-sqrt(delta))/2*a;
x2 = (-b+sqrt(delta))/2*a;
printf("x1 = %f\n", (-b-sqrt(delta))/2*a);
printf("x2 = %f\n", (-b+sqrt(delta))/2*a);
printf("\n");
}
}
return 0;
}
-->Message édité par skyman le 22/05/2005 16:10:14<--
|
|
|
|
|
ok merci je vais tester cela.
|
|
1
|
|

|






|