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 :

aide pour un exo


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 0
    Points
    0
    Par défaut aide pour un exo
    Salut à tous ,

    Je suis un grand débutant en C++ et j'ai un petit probleme avec mon exo :

    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
     
    #include <cstdlib>
    #include <iostream>
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        cout<<"bonjour\n";
     
        char S ; //sexe de la personne
        int A ; // age de la personne 
        bool droit ; //initialiser a vrai si la personne a droit a la carte
     
        cout<<"Saisir l'age et le sexe de la personne : " "\n" ;
     
        cin>>S>>A ;
     
        if (S=='F') 
        {   
            if (A>=60) 
             {
                 droit=true ;
             }
             else
             {
                 droit=false ;
             }          
        } 
        else 
        {
            if (S=='H') 
            {   
            if (A>=65) 
             {
                 droit=true ;
             }
             else 
             {
                 droit=false ;
             }          
        }  
        if (droit=false) 
        {
            cout<<"Vous n'avez pas le droit a la carte vermeil" "\n" ;
        }
        if (droit=true)
        { 
            cout<<"Vous avez le droit a la carte vermeil" "\n" ;
        }                     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    }
    Si vous ne comprenez pas le probleme je vous explique en esperant que vous puissiez m'aider .

    Greggg1.

  2. #2
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

    Citation Envoyé par Greggg1 Voir le message
    if (droit=false)
    if (droit=true)
    1) == revient à comparer, = revient à affecter...


    3) astuce anti-étourderie : if ( <constante_litterale> = <variable> ) provoque une erreur de compilation.

    Ecrire :
    Plutôt que
    Si jamais on oublie un =, le compilo hurle dans le premier cas... (impossible d'affecter a à 23)

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Essaie peut-être de structurer un peu tes données et de les nommer plus explicitement dans ton programme, au lieu de balancer des 's' 'a' 'droit' en vrac dans ton main(). Pense aussi à gérer les cas où l'utilisateur rentre autre chose que 'F' ou 'M'.

    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
    #include <iostream>
    #include <cstdlib>
     
    using namespace std;
     
    struct Personne {
    	unsigned int age;
    	char sexe;
    	bool sexeValide() {
    		return sexe=='F' || sexe=='M';
    	}
    	bool droitCarteVermeil() {
    		switch (sexe) {
    		case 'F': return (age >= 60);
    		case 'M': return (age >= 65);
    		}
    		return false; 
    	}
    };
     
    int main(void)
    {
    	Personne p;
    	cout << "Age ?" << endl;
    	cin >> p.age;
    	cout << "Sexe ?" << endl;
    	cin >> p.sexe;
    	if (!p.sexeValide()) {
    		cerr << "[Erreur] 'M' et 'F' uniquement" << endl;
    		exit (EXIT_FAILURE);
    	}
     
    	if (p.droitCarteVermeil()) {
    		cout << "Vous avez le droit a la carte vermeil" << endl;
    	} else {
    		cout << "Vous n'avez pas le droit a la carte vermeil" << endl;
    	}
     
    	return EXIT_SUCCESS;
    }

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par bretus Voir le message

    2) "unBooleen == true" est d'un intérêt limité...
    D'abord merci pour ta reponse mais en fait en cours le prof nous l'a fait marquer en algo et en tp il a voulu qu'on le passe en C++ donc on doit garder la structure qu'il nous a filer et ne rien changer ...

    Ce que je comprends c'est que, que je mette n'importe quel sexe et n'importe quel âge, j'ai toujours "vous n'avez pas le droit a la carte vermeil ".

    en esperant que tu puisse m'aider .

    Greggg1.

  5. #5
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par Greggg1 Voir le message
    D'abord merci pour ta reponse mais en fait en cours le prof nous l'a fait marquer en algo et en tp il a voulu qu'on le passe en C++ donc on doit garder la structure qu'il nous a filer et ne rien changer ...
    C'est marrant, le miens nous avait clairement expliqué que si on comparait un booléen à "true", on était bon pour la bulle...

    Citation Envoyé par oodini Voir le message
    C'est plus clair. Et ça a l'intérêt de rappeller que c'est un booléen, le C++ n'appliquant pas un typage fort dans les tests booléens.
    Le résultat est pourtant sous vos yeux, ça apporte beaucoup d'injecter des instructions inutiles...

  6. #6
    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,

    Il faut savoir que, si tu travailles avec un booléen et qu'il n'est pas vrai, il sera d'office... faux

    Ce qui tombe bien, parce que le pendant à un test if(quelque chose a tester) qui entrera dans la partie qui suit, mais que tu peux aussi prévoir le cas où le résultat du test donne faux en utilisant le mot clé else

    Plutôt que d'écrire tes tests sous la forme (corrigée) de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        if (droit==false) 
        {
            cout<<"Vous n'avez pas le droit a la carte vermeil" "\n" ;
        }
        if (droit==true)
        { 
            cout<<"Vous avez le droit a la carte vermeil" "\n" ;
        }
    tu peux donc l'écrire sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        if (droit==true) 
        {
            cout<<"Vous avez le droit a la carte vermeil" "\n" ;
        }
        else
        { 
            cout<<"Vous n'avez pas le droit a la carte vermeil" "\n" ;
        }
    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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    D'abord merci à tous pour vos réponses.

    Citation Envoyé par koala01 Voir le message
    Salut,

    Il faut savoir que, si tu travailles avec un booléen et qu'il n'est pas vrai, il sera d'office... faux

    Ce qui tombe bien, parce que le pendant à un test if(quelque chose a tester) qui entrera dans la partie qui suit, mais que tu peux aussi prévoir le cas où le résultat du test donne faux en utilisant le mot clé else

    Plutôt que d'écrire tes tests sous la forme (corrigée) de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        if (droit==false) 
        {
            cout<<"Vous n'avez pas le droit a la carte vermeil" "\n" ;
        }
        if (droit==true)
        { 
            cout<<"Vous avez le droit a la carte vermeil" "\n" ;
        }
    tu peux donc l'écrire sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        if (droit==true) 
        {
            cout<<"Vous avez le droit a la carte vermeil" "\n" ;
        }
        else
        { 
            cout<<"Vous n'avez pas le droit a la carte vermeil" "\n" ;
        }

    Sache koala01 que je suis tout a fait d'accord avec toi mais c'est le prof qui nous l'a fait ecrire en algo de cette façon et je dois garder la structure initial...

    Greggg1.

  8. #8
    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
    Citation Envoyé par Greggg1 Voir le message
    Sache koala01 que je suis tout a fait d'accord avec toi mais c'est le prof qui nous l'a fait ecrire en algo de cette façon et je dois garder la structure initial...

    Greggg1.
    Un prof qui force à utiliser deux tests au lieu de la branche else en algorithmie, on peut sérieusement douter de sa compétance!...

    Laisse moi deviner, il en est encore au FlowChart
    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

Discussions similaires

  1. Besoin d'aide pour un exo
    Par Alexnadre dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/12/2010, 21h35
  2. demande d'aide pour un exo d'informatique
    Par bellag dans le forum C
    Réponses: 1
    Dernier message: 21/02/2010, 20h39

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