01net    Web


Actuellement en ligne : 130 Utilisateurs dont 12 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> des bariables globales qui changent de valeurs
Auteur
Message
 
<     1       >
schaff
  
  :-)
      ?   @     Posté le 22/05/2005 09:01:36  
Voter pour ce message
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<--
skyman
  Manque d'energie ?!
  :-)
      ?   @     Posté le 22/05/2005 11:35:53  
Voter pour ce message
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.
schaff
  
  :-)
      ?   @     Posté le 22/05/2005 11:47:25  
Voter pour ce message
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°?
skyman
  Manque d'energie ?!
  :-)
      ?   @     Posté le 22/05/2005 16:09:43  
Voter pour ce message
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<--
schaff
  
  :-)
      ?   @     Posté le 22/05/2005 16:22:29  
Voter pour ce message
skyman a écrit :



ok merci je vais tester cela.
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> des bariables globales qui changent de valeurs

Aller à :

Page générée en : 0.041s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Édition PDF
Créez, convertissez, personnalisez et visualisez vos documents PDF!

Spécial Vin
Notre dossier spécial à la découverte des grands crus : foires aux vins, conseils de pros ...