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 :

Simplifier ces IF imbriqués


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Simplifier ces IF imbriqués
    Je sais que ce n'est certainement pas la meilleure façon, mais pouvez vous me proposez une façon beaucoup plus simple.

    Merci de m'aider

    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
     
    float CheckHand(int main, carte paquettxt[][5])
    {
    	int i=0;
    	float tmp=0;
     
    	//Ces if imbriqués regarde si la main est une Straight, Straight FLush ou Straight Royale
    	if(paquettxt[main][i].valeur==paquettxt[main][i+1].valeur-1)
    	{
    		if(paquettxt[main][i].valeur==paquettxt[main][i+2].valeur-2)
    		{
    			if(paquettxt[main][i].valeur==paquettxt[main][i+3].valeur-3)
    			{
    				if(paquettxt[main][i].valeur==paquettxt[main][i+4].valeur-4)
    				{
    					cout<<"STRAIGHT ";
    					tmp=20;
    					if(paquettxt[main][i].sorte==paquettxt[main][i+1].sorte&&paquettxt[main][i].sorte==paquettxt[main][i+2].sorte&&paquettxt[main][i].sorte==paquettxt[main][i+3].sorte)
    					{
    						cout<<"FLUSH ";
    						tmp=tmp+10;
    						if(paquettxt[main][i].valeur==10&&paquettxt[main][i+1].valeur==11&&paquettxt[main][i+2].valeur==12&&paquettxt[main][i+3].valeur==13&&paquettxt[main][i+4].valeur==14)
    						{
    							cout<<"ROYALE";
    							tmp=tmp+10;
    						}
    					}
    				}
    			}
    		}
    	}
     
    	if(paquettxt[main][i].valeur==paquettxt[main][i+1].valeur&&paquettxt[main][i].valeur==paquettxt[main][i+2].valeur&&paquettxt[main][i].valeur==paquettxt[main][i+3].valeur)
    	{
    		cout<<"FOUR OF A KIND";
    		tmp=25;
    	}
     
    	if(tmp<30)
    	{
    		if(paquettxt[main][i].sorte==paquettxt[main][i+1].sorte&&paquettxt[main][i].sorte==paquettxt[main][i+2].sorte&&paquettxt[main][i].sorte==paquettxt[main][i+3].sorte)
    		{
    			cout<<"FLUSH";
    			tmp=15;
    		}		
    	}
     
    	cout<<endl;
    	return tmp;
    }

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

    Pour les premiers tests, tu pourrais peut être envisager une boucle, quelque chose qui serait proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    bool found{false};
    for(int j = 1; i<=4;++i){
        found = paquettxt[main][i].valeur==paquettxt[main][i+j].valeur-j;
    }
    /* si found == true; tu es dans le bon */
    Et pour la deuxième série de if, tu pourrais faire pareil

    Au final, cela donnerait quelque chose comme
    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
     
    bool found{false};
    for(int j = 1; i<=4;++i){
        found = paquettxt[main][i].valeur==paquettxt[main][i+j].valeur-j;
    }
    if(found){
        bool sorteFound{false};
        cout<<"STRAIGHT ";
        tmp=20;
        for(int j = 1; i<=4;++i){
            sorteFound= paquettxt[main][i].sorte==paquettxt[main][i+j].sorte;
        }
        if(sorteFound){
            /* ce qui doit être fait si les deux booléens sont à true*/
        }
    }
    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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Franchement tu gagnerais surtout à nommer correctement et clairement tes trucs.
    - Tu as le droit d'utiliser des espaces dans ton code
    - Tu retournes un float qui ne contient que des valeurs entières (positives)
    - Tu utilises un tableau rempli de valeurs magiques
    - Ta fonction porte le nom bien générique CheckHand quand d'après tes commentaires elle ne vérifie que 4 mains possibles

    Ajouter des classes rendraient déjà le tout moins brouillon, et on a inventé un truc appelé enum il y a pfiou années qui serait plus que bienvenu ici.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    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
    Sauf que, je me suis rendu compte cette nuit que je m'étais trompé dans la logique à suivre... Ce serait d'avantage quelque chose comme
    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
    bool found{true};
    int j=1;
    do
        found = paquettxt[main][i].valeur==paquettxt[main][i+j].valeur-j;
     
    }while(found && j<4);
    if(found && j ==4){
        bool sorteFound{true};
        cout<<"STRAIGHT ";
        tmp=20;
        j =1
        do{
            sorteFound= paquettxt[main][i].sorte==paquettxt[main][i+j].sorte;
            ++j;
        }while(sorteFound && j <4)
        if(sorteFound && j == 4){
            /* ce qui doit être fait si les deux booléens sont à true*/
        }
    }
    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

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Tu devrais avoir le même résultat en initialisant sorteFound à true et en utilisant un & binaire dans la boucle sorteFound &= paquettxt[main][i].sorte == paquettxt[main][i+j].sorte;, j'aime bien cette construction
    Tu peux même "optimiser" le truc en changeant la condition du for pour j < 4 && sorteFound mais vu qu'on parle de 4 éléments à boucler, c'est un peu ridicule imo.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. [MySQL] while imbriqués à simplifier
    Par tapi21 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/02/2013, 21h47
  2. comment simplifier ces conditions
    Par Attila54 dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 11/02/2010, 15h18
  3. [E-07] Simplifier ces trois lignes
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2009, 14h35
  4. Pourquoi ces directives #ifndef ... en haut des .h
    Par Patrick PETIT dans le forum C
    Réponses: 8
    Dernier message: 06/03/2003, 23h53
  5. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

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