IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

[Debutant] Programme avec les fonctions


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut [Debutant] Programme avec les fonctions
    Salut a tous!

    Je suis nouveau et j'ai pris la décision de m'inscrire sur le forum car je le trouve tres bien, de tout les points de vue. De même pour le site, tres bien fait et complet.

    Donc voila je suis assez débutant en C++ et j'ai en meme temps pas mal de difficultés auquel je pense faire de mon mieux pour y remédier.

    J'en viens maintenant au sujet, je dois faire un programme qui porte sur les fonctions et qui simule un tirage au sort à l'aide d'une pièce de monnaie: Pile ou Face (seule contrainte: la valeur Pile correspond soit à Vrai soit à 1 et la valeur Face correspond soit à Faux soit à 0).

    Voici mon code:
    PileOuFace.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //fonction qui simule un tirage au sort à l'aide d'une pièce de monnaie
     
    //retourne donc deux valeurs: "PILE" ou "FACE"
    int PileOuFace();
    Main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
    using namespace std;
     
    #include "PileOuFace.h"
     
    void main()
    {
    	if(PileOuFace()==true);
    	cout<<"Pile"<<endl;
    	else
    	               cout<<"Face"<<endl;
    }
    PileOuFace.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iomanip>
     
    bool PileOuFace()
    {
    	bool Pile;
    	Pile=rand()%2;
     
    	return(Pile);
    }

    Voila j'ai surement et j'en suis sur des erreurs qui sautent aux yeux mais comme je vous l'ai déjà dis je suis nul donc j'ai beau chercher mais je ne trouve rien

    Je vous remerci pour votre aide!

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Tilk*sg1
    Voila j'ai surement et j'en suis sur des erreurs qui sautent aux yeux mais comme je vous l'ai déjà dis je suis nul donc j'ai beau chercher mais je ne trouve rien
    Tu as essayé? Si oui, qu'est-ce qui ne va pas. Si non, pourquoi ne pas le faire? En regardant simplement je n'ai rien vu de très grave.

    Voici néanmoins quelques commentaires...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <iostream>
    using namespace std;
     
    #include "PileOuFace.h"
    Ne jamais utiliser using namespace std; dans un en-tête, ni avant d'avoir inclu tous les en-têtes. Sur des programmes important, c'est même mieux de ne pas l'utiliser du tout.

    main retourne int.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {
    	if(PileOuFace()==true);
    Pourquoi pas (PileOuFace() == true == true == true == true) ? PileOuFace retourne un bool, inutile de le comparer à true.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	cout<<"Pile"<<endl;
    	else
    	               cout<<"Face"<<endl;
    }
    Essaye de surveiller ton indentation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iomanip>
     
    bool PileOuFace()
    {
    	bool Pile;
    	Pile=rand()%2;
     
    	return(Pile);
    }
    Au dessus, tu fais une comparaison explicite à true qui n'a guère de sens, ici, tu convertis implicitement un int en un bool. C'est ici que j'aurais mis une comparaison.

    Autre chose, quand je lis que PileOuFace retourne un bool, je ne sais pas a priori ce que signifie true. Soit tu changes le nom de la fonction de manière à ce que la signification soit claire (estPile() par exemple), soit tu retournes un enum { face, pile };

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Il y a une incohérence entre la déclaration et la définition de ta fonction PileOuFace(). Dans sa déclaration (dans ton .h), tu lui fait retourner un int, et dans sa définition (dans le cpp), tu lui fais retourner un bool...

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Tu as essayé? Si oui, qu'est-ce qui ne va pas. Si non, pourquoi ne pas le faire? En regardant simplement je n'ai rien vu de très grave.
    Tout d'abord je te remerci pour ta réponse tres complete ! Et pour te répondre oui j'ai essayé de compiler et j'obtient 2 warning dont 1 erreur:
    "-warning C4805: '==' : mélange risqué de type 'int' et de type 'bool' dans l'opération
    -warning C4390: ';' : une instruction contrôlée a été trouvée vide ; est-ce ce que vous souhaitiez ?
    -error C2181: instruction else sans if correspondant non conforme"
    Pour les warning, je ne les comprends pas tres bien mais l'erreur encore moins.

    Voici néanmoins quelques commentaires...


    Ne jamais utiliser using namespace std; dans un en-tête, ni avant d'avoir inclu tous les en-têtes. Sur des programmes important, c'est même mieux de ne pas l'utiliser du tout.
    Pourquoi ne pas l'utiliser ? Cela évite a chaque fois de remarquer "std::" avant les cin/cout c'est quand meme pour fait pour gagner du temps non ?


    main retourne int.
    La, j'avoue je n'arrive pas a comprendre. On m'a dit que void ou int dans ce cas la c'était pareil!

    Pourquoi pas (PileOuFace() == true == true == true == true) ? PileOuFace retourne un bool, inutile de le comparer à true.
    Ok, mais comment le comparer alors ?

    Essaye de surveiller ton indentation.
    Oui j'ai rajouté des espaces quand je previsualisait le message en pensant que tout était aligné, désolé je ferai attention la prochaine fois


    Au dessus, tu fais une comparaison explicite à true qui n'a guère de sens, ici, tu convertis implicitement un int en un bool. C'est ici que j'aurais mis une comparaison.
    comme ceci ??

    Autre chose, quand je lis que PileOuFace retourne un bool, je ne sais pas a priori ce que signifie true. Soit tu changes le nom de la fonction de manière à ce que la signification soit claire (estPile() par exemple), soit tu retournes un enum { face, pile };
    Ahh oui je vois, c'est vrai

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Eusebe
    Il y a une incohérence entre la déclaration et la définition de ta fonction PileOuFace(). Dans sa déclaration (dans ton .h), tu lui fait retourner un int, et dans sa définition (dans le cpp), tu lui fais retourner un bool...
    Exact, même si Jean-Marc.Bourguet me l'a fait remarqué, je te remerci

  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Le premier warning est dû à la comparaison d'un bool et d'un int dans l'expression "PileOuFace()==true" (puisque tu as déclaré PileOuFace() comme retournant un int).

    Si PileOuFace() retourne finalement un bool, il suffit de faire
    Si PileOuFace() retourne un int, il faut faire
    Le deuxième Warning est dû au point-virgule mis après le if... Par là, tu indiques au compilateur que le if se termine, sans rien faire même si l'expression qu'il teste est true.

    Enfin, l'erreur est liée à ce point virgule en trop. Puisque le compilateur "sort" du if, quand il arrive au else, il ne sait plus à quoi le rattacher...

Discussions similaires

  1. problème avec les fonctions MidStr et LeftStr
    Par timsah dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/02/2006, 10h07
  2. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  3. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  4. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo