Partage
  • Partager sur Facebook
  • Partager sur Twitter

generer des nombres dans un tableau

    15 décembre 2007 à 17:52:06

    slt je voudrais realiser un mastermind et mettre des nombres aleatoire compris entre 1 et 6 dans un tableau pouvant contenir 4 nombres voici un petit apercu de mon codage:
    1. for (int i = 0; i < NB_PIONS;  ++i)
    2.         {
    3.             pionsCaches[i]=(int) ((float) NB_COULEURS* rand() / (RAND_MAX + 1.0));
    4.             cout << pionsCaches[i] << '\n';
    5.         }

    j'ai initialiser srand(time(NULL)); dans le constructeur et NB_PIONS = 4 et NB_COULEURS= 6
    C'est en faisant un cout, que je sais que ca ne fonctionne pas car rien de s'affiche apres avoir executé le programme :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 décembre 2007 à 19:45:25

      essais ceci :

      1. for (int i = 0; i < NB_PIONS;  ++i)
      2. {
      3.    pionsCaches[i]=((rand() % NB_COULEURS) + 1);
      4.    cout << pionsCaches[i] << '\n';
      5. }
      • Partager sur Facebook
      • Partager sur Twitter
        15 décembre 2007 à 20:35:40

        oui mais je narrive toujours pas a afficher les valeurs que jai inseré dans le tableau
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          15 décembre 2007 à 22:38:32

          Donne tout ton main s'il te plait, car chez moi les valeurs s'affichent correctement...

          NOTE : ton code fonctionne aussi chez moi (enfin, il affiche des valeurs entre 0 et 5, et non 1 et 6 comme tu le voulais, mais les valeurs sont bien affichées). Ca vient sans doute de ton code qui est avant.

          • Partager sur Facebook
          • Partager sur Twitter
            16 décembre 2007 à 16:53:08

            ben le voici le mastermind.cpp que je viens de commencer, il nest pas encore au point je vous rassure ^^
            1. #include "mastermind.h"
            2. #include <ctime>
            3. #include <iostream>
            4. //g++ -c mastermind.cpp
            5. using namespace std;
            6. MasterMind::MasterMind()
            7. {
            8.     srand(time(NULL));
            9. }
            10. void MasterMind::_jouer(){
            11. int pionsCaches[NB_PIONS], pionsProposes[NB_PIONS], etatPions, nbCoups=10;
            12. bool utiliser;
            13.         cout << "il ne vous reste plus que " << nbCoups << " coups" <<'\n';
            14.         cout << "code secret=";
            15.         for (int i = 0; i < NB_PIONS;  ++i)
            16.         {
            17.             pionsCaches[i]=((rand() % NB_COULEURS) + 1);
            18.             cout << pionsCaches[i];
            19.         }
            20.             do{
            21.                     cout << "\nchoisissez la disposition sur 4 rangees et la couleur des pions (1 a 6) "<< '\n';
            22.                     for(int i = 0; i <  NB_PIONS; ++i)
            23.                         {
            24.                         cin >> pionsProposes[i];
            25.                         }
            26.                     // 0 = la couleur du pion n'existe pas
            27.                     // 1 = la couleur est a la bonne place
            28.                     // 2 = la couleur existe mais n'est pas a la bonne place
            29.                     for (int i = 0; i < NB_PIONS; i++){
            30.                             for (int j = 0; j < NB_PIONS; j++){
            31.                                     if (pionsCaches[i] == pionsProposes[j]  &&  (i==j)) {
            32.                                             etatPions= 1;
            33.                                             utiliser=true;
            34.                                     }
            35.                                     else if (pionsCaches[i] == pionsProposes[j] ) {
            36.                                             etatPions = 2;
            37.                                             utiliser=false;
            38.                                     }
            39.                                     else {
            40.                                             etatPions =0;
            41.                                             utiliser=false;
            42.                                     }
            43.                             }cout << "resultat=" << etatPions <<'\n';
            44.                     }
            45.             nbCoups--;
            46.     }while (nbCoups!=0);
            47. }
            48. void MasterMind::demarrer()
            49. {
            50.     char touche;
            51.     do{
            52.         cout<< "N: nouveau jeu, Q: quitter. ";
            53.         cin >> touche;
            54.         switch (touche)
            55.         {
            56.             case 'n':
            57.             case 'N':
            58.                 cout << "> Nouveau jeu. \n";
            59.                 _jouer();
            60.                 break;
            61.             case 'q':
            62.             case 'Q':
            63.                 cout << "> Quitter. \n";
            64.             default:
            65.                 cout << ">Mauvaise touche. \n";
            66.         }
            67.     } while (touche != 'q' && touche != 'Q');
            68. }
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              16 décembre 2007 à 21:26:01

              Je ne suis pas très sûr, mais ce ne serait pas

              1. cout << "> Nouveau jeu. \n";
              2. this->_jouer();
              3. break;


              au lieu de

              1. cout << "> Nouveau jeu. \n";
              2. _jouer();
              3. break;


              ?
              • Partager sur Facebook
              • Partager sur Twitter
                16 décembre 2007 à 21:48:56

                ca revient au meme dans les 2 cas, jarrive a rentrer dans la methode _jouer mais en revanche le programme saute la boucle for car meme en mettant du texte rien ne s'affiche...
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  16 décembre 2007 à 22:43:13

                  Tu dis que le for est sauté, je ne comprend plus là, car ça n'est possible que si NB_PIONS est supérieur à i, or tu nous as dit que NB_PIONS valait 4
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 décembre 2007 à 7:35:17

                    ca compile mais c'est pas encore au point :p
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      17 décembre 2007 à 18:48:36

                      Au niveau de la compilation ?
                      Enfin, si ça marche, c'est le principal ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 décembre 2007 à 18:50:12

                        ah dsl cetait juste un probleme au niveau de la compilation mais apres avoir executé mon mastermind je narrive pas a parcourir les tableaux comme il faut car le programme me donne:
                        N: nouveau jeu, Q: quitter. n
                        > Nouveau jeu.
                        il ne vous reste plus que 10 coups
                        code secret=5533
                        choisissez la disposition sur 4 rangees et la couleur des pions (1 a 6)
                        2
                        3
                        4
                        5
                        resultat=2
                        resultat=2
                        resultat=0
                        resultat=0

                        au lieu de:
                        N: nouveau jeu, Q: quitter. n
                        > Nouveau jeu.
                        il ne vous reste plus que 10 coups
                        code secret=5533
                        choisissez la disposition sur 4 rangees et la couleur des pions (1 a 6)
                        2
                        3
                        4
                        5
                        resultat=0
                        resultat=2
                        resultat=0
                        resultat=2
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          18 décembre 2007 à 18:07:44

                          Il affiche 2 2 0 0 car tu testes si la solution est conforme à la proposition, et non le contraire (ce qu'il faudrait faire) ce qui fait que ton programme te dit que les deux premiers chiffres de la solution sont dans ta proposition, et mal placés. Or, toi tu voudrais savoir si les chiffres de la proposition sont dans la solution.

                          il faut donc que ton premier "for" gère la proposition, et le deuxième "for" la solution. ça te ferait un truc de ce genre :

                          1. for (int i = 0; i < NB_PIONS; i++)
                          2. {
                          3.    for (int j = 0; j < NB_PIONS; j++)
                          4.    {
                          5.       if (pionsCaches[j] == pionsProposes[i]  &&  (i==j))
                          6.       {
                          7.          etatPions= 1;
                          8.          utilise=true;
                          9.       }
                          10.       else if (pionsCaches[j] == pionsProposes[i] )
                          11.       {
                          12.          etatPions = 2;
                          13.          utilise=false;
                          14.       }
                          15.       else
                          16.       {
                          17.          etatPions =0;
                          18.          utilise=false;
                          19.       }
                          20.   }cout << "resultat=" << etatPions <<'\n';
                          21. }


                          Voilà, je pense que le problème vient de là... bon code ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 décembre 2007 à 19:05:14

                            merci TuxWeb pour ton aide, c'est vraiment sympas de ta part et je trouve que ton raisonnement est logique, on compare les nombres proposés par rapport aux nombres cachés et non l'inverse, mais meme apres la modif', le programme a decidé de faire la tete.... :colere2:
                            N: nouveau jeu, Q: quitter. n
                            > Nouveau jeu.
                            il ne vous reste plus que 10 coups
                            code secret=2451
                            choisissez la disposition sur 4 rangees et la couleur des pions (1 a 6)
                            1
                            3
                            4
                            2
                            resultat=2
                            resultat=0
                            resultat=0
                            resultat=0

                            au debut il raisonne bien (le 1 existe mais n'est pas a la bonne place), mais cest par la suite que ca se gate, ce soit etre au niveau de lincrementation de i . En fait le but, ce serait de lire le tableau des nombresProposés, tout en essayant de savoir si chacun de ces nombres existent dans le tableau des nombres cachés. Mais maintenant a codé tout ca :-°
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              18 décembre 2007 à 19:34:38

                              ton booléen "utilise" il sert à quoi ? En fait après avoir vu ton post, j'ai moi aussi fait un mastermind. Et j'ai utilisé moi aussi une variable "utilise" (enfin moi, j'ai pris un tableau, bref), mais là ta variable ne sert à rien, car tu la modifies à chaque incrémentation de i, sans la comparer à quoique ce soit. Il faut, je pense, que tu fasses un tableau par exemple "bool utilise[NB_PIONS] = {false};", tu ajoutes des conditions (à toi de les trouver :p) et comme ça, tu peux vérifier que ton pion n'est pas déjà utilisé. (il ne faut pas qu'un pion serve plus d'une fois !).

                              Je sais pas si ton erreur vient de là, mais il y a sans doute un p'tit lien...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 décembre 2007 à 21:03:44

                                Voici mon nouveau code fait a l'arrache:
                                1. for (int k = 0; k < NB_PIONS; k++){
                                2.                             for (int i = 0; i < NB_PIONS; i++){
                                3.                                     for (int j = 0; j < NB_PIONS; j++){
                                4.                                             if (pionsProposes[i] == pionsCaches[j]  &&  (i==j)) {
                                5.                                                     etatPions[k] = 1;
                                6.                                             }
                                7.                                             else if (pionsProposes[i] == pionsCaches[j] ) {
                                8.                                                     etatPions[k] = 2;
                                9.                                             }
                                10.                                             else {
                                11.                                                     etatPions[k] = 0;
                                12.                                             }
                                13.                                     }
                                14.                             }cout << "resultat=" << etatPions[k] <<'\n';
                                15.                     }
                                16.                     }

                                Mais cette fois ci , sois l'etat des pions est a 0 ou alors quand je recopie les nombres cachés tout est a 1 o_O
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 décembre 2007 à 21:39:55

                                  Un bon conseil:

                                  Fais un dessin de la situtation et simule ce que tu veux faire, en coloriant les cases d'un tableau par exemple. Ca te permettera de mieux comprendre ce que tu fais plutôt que d'essayer un peu toutes les solutions.

                                  (Enfin, ce n'est qu'un conseil...)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                                  Anonyme
                                    18 décembre 2007 à 22:24:58

                                    Citation : vince-29

                                    Voici mon nouveau code fait a l'arrache:

                                    1. for (int k = 0; k < NB_PIONS; k++){
                                    2.                             for (int i = 0; i < NB_PIONS; i++){
                                    3.                                     for (int j = 0; j < NB_PIONS; j++){
                                    4.                                             if (pionsProposes[i] == pionsCaches[j]  &&  (i==j)) {
                                    5.                                                     etatPions[k] = 1;
                                    6.                                             }
                                    7.                                             else if (pionsProposes[i] == pionsCaches[j] ) {
                                    8.                                                     etatPions[k] = 2;
                                    9.                                             }
                                    10.                                             else {
                                    11.                                                     etatPions[k] = 0;
                                    12.                                             }
                                    13.                                     }
                                    14.                             }cout << "resultat=" << etatPions[k] <<'
                                    15. ';
                                    16.                     }
                                    17.                     }


                                    Mais cette fois ci , sois l'etat des pions est a 0 ou alors quand je recopie les nombres cachés tout est a 1 o_O



                                    hop hop hop ! regarde, ton code, il fait quoi ?

                                    Il fait refaire la vérification NB_PIONS fois (à cause de ton for (int k = 0 ; ...)
                                    supprime le for(int k ...) et incrémente K dans le for où il y'a le 'i'.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 décembre 2007 à 22:40:42

                                      ok, ben je recapipitule depuis le debut :D
                                      j'initialise 3 tableaux, 1 contenant 4 nombres generés aleatoirement (pionsCachés) de 1 a 6 (= 6 couleurs), 1 dont les nombres sont definis par l'utilisateur (pionsProposés)et un autre booleen (etatPions) qui va comparé les valeurs entres ces 2 tableaux.
                                      Ce que je veux, c'est lire la 1ere valeur du tableau pionsProposés par rapport a l'ensemble des nombres situés dans le tableau pionsCachés
                                      si valeur du pionsProposé = l'un des pionsCachés mais pas a la meme position
                                      alors etatsPions = 2 (existant mais mal placé)
                                      si valeur du pionsProposé = l'un des pionsCachés et dans la meme position
                                      alors etatsPions = 1 ( existant et a la bonne place)
                                      sinon etatsPions = 0 (n'existe pas)
                                      reboucler et lire la deuxieme valeur du tableau pionsProposés et comparer avec les pionsCachés et reboucler ainsi de suite
                                      a la fin de la boucle afficher l'etat des pions
                                      ensuite lutilisateur etant informé de l'état des pions, pourra rectifier le tir jusqu'a ce que ce que le tableau etatPions est ctoutes ses valeurs a 1
                                      Voila c'est comme ceci que je pense procéder...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        18 décembre 2007 à 22:48:07

                                        Il ne faut pas que tu oublies de dire (en cas de pions existants (bonne couleur et/ou bonne place) que le pion 'i' du tableau 'pionsCache' a été visité pour ne pas le prend en compte deux fois !
                                        car si tu entre ça :

                                        proposition : 4 5 3 5
                                        (et que la réponse est ça :)
                                        solution : 1 6 5 2
                                        (l'aide que tu va afficher sera la suivante :)
                                        aide : 0 2 0 2
                                        (or, il n'y a que UN seul cinq de bon sur les deux)


                                        c'est pour ça qu'il faut prendre en compte si le pion a déjà été utilisé ou non...

                                        Sinon, ça me semble être bon comme raisonnement ;)

                                        NOTE :
                                        Dans ton cas, etatPions ne peut pas être un tableau de booléens, car tu y mets les valeurs suivantes "0", "1" ou "2", or un booléen ne prend que deux valeurs "true" ou "false" !

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 décembre 2007 à 23:15:53

                                          ah ok daccord, javais oublié cette subtilité qui va surement me donner la migraine lol
                                          mais imaginons que la solution soit par exemple 4 3 4 1 et l'utilisateur propose 2 4 5 4, la derniere valeur a deja été proposé mais pourtant elle existe bien dans les valeurs cachés .
                                          Enfin la c'est une exception :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            18 décembre 2007 à 23:20:21

                                            certes, mais regarde, le premier 4 de la proposition va être validé, on va donc affiché "2" et dire que le premier "4" de la solution est utilisé, puis on va passer au deuxième 4 de la proposition, et on le valide, et on dit que le deuxième 4 de la solution est utilisé. Donc il n'y a pas de problème ;) :D
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 décembre 2007 à 0:15:29

                                              Citation : TuxWeb

                                              certes, mais regarde, le premier 4 de la proposition va être validé, on va donc affiché "1" et dire que le premier "4" de la solution est utilisé, puis on va passer au deuxième 4 de la proposition, et on le valide, et on dit que le deuxième 4 de la solution est utilisé. Donc il n'y a pas de problème ;) :D

                                              bof, t'es nul!
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                19 décembre 2007 à 0:34:15

                                                explique - toi !

                                                J'trouve ça lache de dire "bof t'es nul" sans expliquer ce qui ne va pas. Au lieu de faire ton malin et de critiquer, aide-nous à comprendre ce qui ne vas pas ! et une fois que tu auras expliquer ce qui ne vas pas, on en reparlera. Mais ici, permet moi de te dire que c'est toi qui est un peu nul.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  19 décembre 2007 à 2:59:16

                                                  Citation : kubuntero

                                                  Citation : TuxWeb

                                                  certes, mais regarde, le premier 4 de la proposition va être validé, on va donc affiché "1" et dire que le premier "4" de la solution est utilisé, puis on va passer au deuxième 4 de la proposition, et on le valide, et on dit que le deuxième 4 de la solution est utilisé. Donc il n'y a pas de problème ;) :D

                                                  bof, t'es nul!


                                                  Je t'avais prévenu, à dans un mois.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  generer des nombres dans un tableau

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown