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 :

Mauvaise utilisation d'un boolean ?


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Mauvaise utilisation d'un boolean ?
    Bonjour,


    Enfet, voila mon problème. Si je rentre une somme, qui ensuite doit être déduite de 4.80 si la somme est supérieure a 4.80. Si je met 5 comme somme, ça fonctionne niquel, et ça affiche " bon appétit ".

    Si je met 3 pour la somme, ça déduit pas 4.80 comme 3 est inférieure à 4.80. Jusque là tout va bien. Mais, le problème, c'est que ça m'affiche bon appétit, alors qu'il faudrait qu'il s'affiche IMPOSSIBLE.


    Pour celà, je m'aide d'un boolean, si somme > 4.80, c'est vrai, sinon faux
    Je suis obligé d'utiliser un boolean.


    Je vous joints les fichiers afin que vous m'aidiez dans mon problème..
    PS :
    " Compte.h " : Fichier d'en-tête de mes méthodes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    /*************************************************/
    // Nom du fichier: Compte.h
    // Nom du programmeur: MARTY Yvan
    // Date de création : 30.01.2015
    // Rôle: Fichier d'en-tête de TPCompte.cpp
    // Nom des composants utilises: 0
    // Historique du fichier:
    // 30.01.2015 : Création du projet TPCompte
    // 09.02.2015 : Ajout des commentaires des méthodes
    /*************************************************/
     
    #pragma once
     
    class CCompte // Décalaration de la classe CCompte
    {
    public:
    	CCompte(int ID, float So); // Constructeur, avec un entier ID et un float So en paramètres
    	~CCompte(void); // Destructeur, avec aucun paramètres
     
     
    	// Methodes déclarés dans le fichier Compte.h :
     
     
     
    	bool Payer_Repas(float Prix);
    		// Nom : Payer_Repas
    		// Rôle : Permet de faire un VRAI / FAUX (grâce au bool) de la méthode Payer_Repas
    		// Paramètres d'entrée : Prix
    		// Paramètres de sortie : Boolean
    		// Paramètres d'E/S :
    		// Valeur de retour : true / false
     
     
    	float Consulter_Solde();
    		// Nom : Consulter_Solde
    		// Rôle : Permet de consulter son solde sur sa carte
    		// Paramètres d'entrée : /
    		// Paramètres de sortie : float
    		// Paramètres d'E/S :
    		// Valeur de retour : Contenu pointé de Solde
     
     
    	int Consulter_ID();
    		// Nom : Consulter_ID
    		// Rôle : Permet de voir son identifiant
    		// Paramètres d'entrée : /
    		// Paramètres de sortie : int
    		// Paramètres d'E/S :
    		// Valeur de retour : Ident
     
     
    	float Crediter(float Montant);
    		// Nom : Crediter
    		// Rôle : Permet d'ajouter de l'argent sur sa carte
    		// Paramètres d'entrée : Montant
    		// Paramètres de sortie : float
    		// Paramètres d'E/S :
    		// Valeur de retour : Contenu pointé de Solde
     
     
     
    private: // Seules les méthodes peuvent y accéder
    	int Ident; // Décalaration de la variable Ident de type int
    	float Solde; // Déclaration de la variable Solde de type float
     
    };
    " Compte.cpp " : Fichier de définition des méthodes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    /*************************************************/
    // Nom du fichier: Compte.cpp
    // Nom du programmeur: MARTY Yvan
    // Date de création : 30.01.2015
    // Rôle: Fichier de définition des méthodes
    // Nom des composants utilises: 0
    // Historique du fichier:
    // 30.01.2015 : Création du projet TPCompte
    // 30.01.2015 : Ajout du fichier Compte.cpp
    // 09.02.2015 : Ajout des commentaires de l'intégralité du fichier "CCompte.cpp""
    /*************************************************/
     
    #include "Compte.h" // Appel du fichier d'en-tête : "Compte.h"
     
     
     
    CCompte::CCompte(int ID, float So) // Designe la fonction CCompte de la classe CCompte, et ayant pour parametres un entier ID et un float So
     
    {
     
    	this -> Ident = ID; // On met le contenu pointé Ident dans ID
    	this -> Solde = So; // On met le contenu pointé Solde dans So
     
    }
     
     
     
    CCompte::~CCompte(void) // Destructeur CCompte
    {
    }
     
     
     
    // Méthode 1 : Payer un repas
    bool CCompte::Payer_Repas(float Prix) // Utilisation du boolean : Vrai / Faux
    {
    		if (this-> Solde >= Prix) // SI le contenu pointé de Solde est supérieur ou égal au Prix
    			{
    				this-> Solde = this-> Solde - Prix; // On soustrait au contenu pointé Solde le Prix
    				return true; // Si la ligne precedente est correcte, on renvoie VRAI
    			}
     
    		else
    			{
    				return false; // SINON on renvoie FAUX
    			}
    }
     
     
     
    // Méthode 2 : Consulter son solde
    float CCompte::Consulter_Solde() // Utilisation de la méthode : Consulter_Solde
    	{
    		return this-> Solde; // On renvoie le solde présent sur notre carte
    	}
     
     
     
    // Métode 3 : Connaitre son identifiant
    int CCompte::Consulter_ID() // Utilisation de la méthode : Consulter_ID
    	{
    		return Ident; // On renvoie l'Identifiant de notre carte
    	}
     
     
     
    // Méthode 4 : Ajout d'argent sur sa carte
    float CCompte::Crediter(float Montant) // Utilisation de la méthode : Crediter
    	{
    		this-> Solde = this-> Solde + Montant; // On ajoute Montant au contenu de Solde
    		return this-> Solde; // On renvoie le Solde après l'ajout de Montant
    	}
    " Self.cpp " : fichier main() du projet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    /*************************************************/
    // Nom du fichier: Self.cpp
    // Nom du programmeur: MARTY Yvan
    // Date de création : 30.01.2015
    // Rôle: main du fichier TPCompte.cpp
    // Nom des composants utilises: 0
    // Historique du fichier:
    // 30.01.2015 : Création du projet TPCompte
    // 06.02.2015 : Ajout du fichier main : Self.cpp
    // 10.02.2015 : Ajout des commentaires
    /*************************************************/
     
    #include <iostream>
    using namespace std;
     
     
    #include "Compte.h" // Appel du fichier d'en-tête : "Compte.h"
     
     
    int main()
     
     
    {
    	bool Test; // Déclaration du bool
    	float SommeVersee; // Déclaration de SommeVersee de type float
    	float ConsulterSolde; // Déclaration de ConsulterSolde de type float
    	int x; // Déclaration de x de type int
    	float Solde; // Déclaration de Solde de type flaot
     
     
    	CCompte CYvan (10020571,0); // Ccompte : classe // CYvan : Objet / Instance
     
    	cout << " Somme a crediter ? " << endl; // Affichage de ...
    	cin >> SommeVersee; // Saisie de la somme à verser
    	SommeVersee = CYvan.Crediter(SommeVersee); // Met le montant de la somme versée dans Crediter
    	cout << " Somme versee : " << SommeVersee <<endl; // Affichage de la somme versée
     
     
     
    	Test = CYvan.Payer_Repas(4.80); // On s'aide de Test pour utiliser la méthode Payer_Repas
    	if (Test = false)
    	{
    		cout << " IMPOSSIBLE ! " << endl; // Affiche ... si la somme versée est inférieure à 4.80€
    	}
    	else
    	{
    		cout << " Bon appetit ! " << endl; // Affiche ... si la somme versée est supérieure à 4.80€
    	}
     
     
     
    	Solde = CYvan.Consulter_Solde(); // Met le montant du solde dans Consulter_Solde
    	cout << " Votre nouveau solde est : " <<Solde<<endl; // Affiche ... le n
     
     
     
    cin >> x; // Ligne permettant de ne pas fermer la fenetre CMD
     
     
    return 0;
    }
    Dernière modification par Invité ; 10/02/2015 à 19h12. Motif: PJ =>balises [CODE] mon code [/CODE] (bouton #)

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Oui, l'erreur est toute bête, mais fréquente dans le fichier Self.cpp : if(Test = false) doit s'écrire if(Test == false).

    Quelques petites remarques :
    Essaie de mettre le code directement dans le texte du post plutôt qu'en pièces jointes, ça facilite l'aide qu'on apporte ;
    Les méthodes Créditer ne devraient retourner rien (void) et on accède au solde avec Consulter_Solde() ;

    À part ça, le code est assez propre
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Mais quelle erreur idiote !. Tout est fonctionnel grâce au " == " mais aussi à toi. Un grand merci.


    Pour tes remarques :

    - Je suis nouveau sur ce forum, donc je ne pouvais pas trop savoir..
    - Merci .

    EDIT : @Daïmanu : Je ne comprend pas ta deuxième remarque..
    Dernière modification par Invité ; 10/02/2015 à 17h40.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut, et bienvenue sur le forum
    Citation Envoyé par Yvan1234 Voir le message
    Mais quelle erreur idiote !. Tout est fonctionnel grâce au " == " mais aussi à toi. Un grand merci.


    Pour tes remarques :

    - Je suis nouveau sur ce forum, donc je ne pouvais pas trop savoir..
    - Merci .

    EDIT : @Daïmanu : Je ne comprend pas ta deuxième remarque..
    En gros, il n'y a aucune raison pour que la fonction float crediter(float) renvoie une valeur... : tu crédite le compte point-barre. Si tu veux connaitre le solde du compte après l'opération, tu utilises la fonction idoine (consulter_solde qui, soit dit en passant, devrait être déclarée constante afin de respecter la const-correctness). Si tu veux une fonction qui crédite le solde et qui renvoie le solde (le "tout en un", en quelques sortes), il faudrait prévoir une autre fonction comme crediter_et_solde(float) qui ferait appel à la fonction crediter et qui renverrait -- après l'appel à crediter, la valeur renvoyée par solde.

    Mais, il y a peu de chance que cette fonction soit réellement indispensable : KISS (Keep It Simple Stupid que l'on pourrait traduire par Garde cela simple, idiot ) ou, en d'autres termes : essaye de garder les choses les plus simples possibles, sans y apporter de complexité inutile : tu as une fonction consulter_solde et une fonction crediter ? c'est amplement suffisant pour l'usage que tu auras de ta classe . Il n'y a donc aucune raison de faire en sorte que la fonction crediter renvoie le solde une fois qu'elle a fait son boulot
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je suis obligé de faire une méthode pour chaque spécificités. C'est les contraintes du TP, donné par ma prof.. On a tout juste commencé le C++.
    Dernière modification par LittleWhite ; 11/02/2015 à 08h34. Motif: Pas besoin de citer l'intégralité du message précédent

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est un booléen, tu peux directement tester if(!Test) plutôt que le comparer à false...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est un booléen, tu peux directement tester if(!Test) plutôt que le comparer à false...
    Ca fonctionne parfaitement comme ça du coup je n'y touche plus.

  8. #8
    Membre éprouvé Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Points : 1 054
    Points
    1 054
    Par défaut
    Bonjour,

    Une methode simple , quand tu testes une valeur vis à vis d'une constante, est d'ecrire "constante == valeur".
    Dans ton cas, ca donnerait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (false == test) {
    ...
    }
    Cette façon de faire est peut être moins intuitive, mais elle génère une erreur à la compilation quand tu mets "=" au lieu de "==".

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Cela dit, gcc avec -Wall -Wextra émêt un warning quand il voit ce genre d'affectation dans un if
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mauvaise utilisation des ressources [DATAWARE HOUSE]
    Par bvincent dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/06/2007, 12h28
  2. mauvaise utilisation de having ?
    Par maysa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/06/2007, 16h48
  3. Bug ou mauvaise utilisation des FileUpload?
    Par mael94420 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 03/05/2007, 09h13
  4. Bug de CString ? ou mauvaise utilisation !
    Par globule71 dans le forum MFC
    Réponses: 11
    Dernier message: 12/04/2007, 17h36
  5. Mauvaise utilisation d'une DLL ?
    Par _SamSoft_ dans le forum C
    Réponses: 6
    Dernier message: 21/02/2007, 00h14

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