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

Résolu/Fermé
Utilisateur anonyme - 12 janv. 2012 à 12:07
 Utilisateur anonyme - 12 janv. 2012 à 18:26
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;
}
A voir également:

4 réponses

matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
12 janv. 2012 à 12:15
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
12 janv. 2012 à 12:18
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
12 janv. 2012 à 12:22
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 lundi 31 janvier 2011 Statut Membre Dernière intervention 14 mai 2014 13
12 janv. 2012 à 12:24
attention dans ce cas ta fonction est de type boolean
0
Utilisateur anonyme
12 janv. 2012 à 12:27
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
12 janv. 2012 à 12:28
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
12 janv. 2012 à 12:18
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 lundi 31 janvier 2011 Statut Membre Dernière intervention 14 mai 2014 13
12 janv. 2012 à 12:20
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
12 janv. 2012 à 12:26
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 lundi 31 janvier 2011 Statut Membre Dernière intervention 14 mai 2014 13
12 janv. 2012 à 12:28
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
12 janv. 2012 à 12:39
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
12 janv. 2012 à 12:46
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
voila le code finale, tester et fonctionnel .... https://imageshack.com/
0
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
12 janv. 2012 à 14:02
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
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
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
12 janv. 2012 à 18:19
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
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