[C++] Fonction booléenne....

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
bonjour,

voila j'ai inclus une fonction booléenne pour savoir si le nombre saisie est positif ou nul et elle renvoie vrai si c'est le cas.
Le truc c'est que j'y arrive pas je trouve pas la faute ! Je voudrais de l'aide, mais pas la réponse..
Merci


bool nbpositif(int);

int main()
{
int x; //--déclaration de x, le nombre entier à saisir

//--saisie de x
cout <<"Saisissez un nombre entier = " <<endl;
cin>>x;

return 0;
}

//--fonction boolénne pour tester si le nombre est positif ou nul
bool nbpositif(int x)
{
cout<<((x>=0)?"vrai":"faux")<<endl;

return 1;
}

4 réponses

matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
C'est assez dur de t'indiquer ton erreur sans te donner la reponse ^^

Tout ce que je peux te dire c'est:
regarde la ou tu fais l'appel a ta fonction nbpositif
0
Utilisateur anonyme
 
Comme sa ? sa fonctionne pas...

int main()
{
int x;

cout <<"Saisissez un nombre entier = " <<endl;
cin>>x;

bool nbpositif(int);

return 0;
}

bool nbpositif(int x)
{
cout<<((x>=0)?"vrai":"faux")<<endl;

return 1;
}
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
bool nbpositif(int); 

Ca c'est le prototype de ta fonction

exemple:
j'ai une fonction (on s'en fout de ce qu'elle fait)
int toto(char c)


Dans ma fonction main pour l'appeler je ferais:

int main()
{
int save;

save = toto('1');

return 0;
}

Je te laisse donc reflechir a comment faire l'appel a ta fonction
0
leen.net Messages postés 212 Date d'inscription   Statut Membre Dernière intervention   13
 
attention dans ce cas ta fonction est de type boolean
0
Utilisateur anonyme
 
ok merci j'ai trouver :



bool nbpositif(int); //--prototype de la fonction, ncécessaire au compilateur

//--debut du programme R*
int main()
{
int x; //--déclaration de x, le nombre entier à saisir

//--saisie de x
cout <<"Saisissez un nombre entier = " <<endl;
cin>>x;

x = nbpositif('1');

return 0;
}
//--fonction boolénne pour tester si le nombre est positif ou nul
bool nbpositif(int x)
{
cout<<((x>=0)?"vrai":"faux")<<endl;

return 1;
}
0
Utilisateur anonyme
 
hum en fait ya une petite erreur, meme lorsque je tape un nombre négatif sa me marque vrai :/
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Pour utiliser une fonction il faut l'appeler à un moment ou l'autre avec le bon argument.
0
leen.net Messages postés 212 Date d'inscription   Statut Membre Dernière intervention   13
 
la methode qui n'est pas de type void, toi etre appele par if ou print ou... et non pas seule
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
Tu n'es pas oblige de recuperer la valeur de retour d'une fonction.
Apres je suis d'accord que dans ce cas la autant ne rien retourner.
0
leen.net Messages postés 212 Date d'inscription   Statut Membre Dernière intervention   13
 
mais si.... comment alors tu dois savoir si oui ou non??
pour void, la fonction ne retourne rien
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
Ba oui mais la sa fonction nbpositif ecrit vrai ou faux sur la sortie standard, donc il me parait assez evident qu'il ne se sert meme pas du boolean que la fonction renvoie.

D'autant plus qu'il renvoit toujours 1 (donc toujours vrai), donc deja s'il se sert de la valeur de retour, alors il aura une fonction qui renvoit toujours vrai ... Donc son code est faux en plus :S
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
bool nbpositif(int x)
{
cout<<((x>=0)?"vrai":"faux")<<endl;

return 1; 


Ta fonction la, voici ce que tu fais en verite:

- tu teste si ton x (argument de ta fonction) est positif ou nul
s'il l'est tu ecris vrai sur la console
s'il ne l'est pas tu ecris faux sur la console

- tu retournes 1 (comprendre: "tu retournes TOUJOURS 1"), 1 correspondant a la valeur "vrai" chez les booleens, ta fonction retournes donc TOUJOURS vrai au sein de ton programme.
0
Utilisateur anonyme
 
voila le code finale, tester et fonctionnel .... https://imageshack.com/
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
Bon vu les confusions que tu fais je te mets une correction en esperant que tu comprennes les differences avec ton code, et pourquoi c'etait faux, sinon tu n'as qu'a demander:

bool nbpositif(int);

int main()
{
  int x; //--d  claration de x, le nombre entier
bool signe = false; // variable booleenne pour stocker la valeur de retour

  //--saisie de x
  cout << "Saisissez un nombre entier = " << endl;
  cin >> x;

  nbpositif(x); // la valeur de retour de la fonction est ignoree donc tu ne pourras plus savoir au sein de ton code si x est positif ou nul, ou s'il est negatif

signe = nbpositif(x); // la valeur de retour de la fonction est stockee dans "signe", il te suffit alors d'utiliser ta variable signe pour savoir si ton x est positif ou nul, ou s'il est negatif

cout << "signe = "<< signe << endl
<< "\tsi x >= 0 alors signe vaut 1" << endl
<< "\tsinon signe vaut 0" << endl;

  return 0;
}

//--fonction booleenne pour tester si le nombre est positif ou nul
bool nbpositif(int x)
{
  if (x >= 0)
    {
      cout << "vrai" << endl;
      return true;
    }
  else
    {
      cout << "false" << endl;
      return false;
    }
}


Il faut aussi que tu comprennes la differences entre ces 2 versions ci dessous:

Soit tu t'en fou de la valeur de retour et tu ecris ca:
void nbpositif(int x)
{
cout<<((x>=0)?"vrai":"faux")<<endl;
}


Soit les prints sont du debug et la seule chose qui t'interesse vraiment est la valeur de retour, dans ce cas tu ecris ca:

bool nbpositif(int x)
{
return (x>=0);
}
0
Utilisateur anonyme
 
ok je comprend bien mieux a présent. Donc dans ma version, la fonction bool ne servais a rien, enfin qu'elle soit booléenne ou non, sa aurais rien changer au résultat. Je vais retravailler ta version point par point dans l'ide... merci encore !
De toute façon return true , false tout sa je connaissais pas encore..
0
Utilisateur anonyme
 
Le seul petit truc que je comprend pas c'est pourquoi tu initialises ta variable booléenne avec False ?
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
Le type bool c'est un des petits détails (qui change d'ailleurs rien) qui ont été apporté au C++ par rapport au C (le type bool n'existant pas en C, on utilise les 0 et 1 pour s'en servir comme booleen, c'est d'ailleurs pour ca qu'en C++ si tu fais "cout << true << endl;", cela va t'afficher 1 et non pas "true").

Bref, tant mieux si j'ai pu t'éclairer un peu plus. (et oui tu as raison ca n'aurait rien changer au résultat puisque tu te servais pas de cette valeur, tu aurais très bien pu retourner un char que ca aurait rien changé)
0
Utilisateur anonyme
 
dac, oui j'ai vue tout a l'heure sur un autre topic cette histoire du bool en C (1 et 0), je viens de tilter que c'est comme en BASIC sur le commodore 64!
0