Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de rand()

Sujet résolu
    6 mars 2006 à 16:40:37

    Salut :)
    ésolé, encore un topic sur le rand() mais j'avoue que je ne comprends pas trop d'où viens l'érreur :
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    //je saute un passage qui ne sert à rien

    /*Toas*/

        srand( time( NULL ) );
        toas = rand() % (1) + 1 ;

        if(toas == 1) { printf("C'est %s qui commence\n\n"‚joueur1) ; tour = 1 ;}
        if(toas == 2) { printf("C'est %s qui commence\n\n"‚joueur2) ; tour = 2 ;}

    Et c'est toujours le joueur 1 qui commence :(
    Voilà si vous trouvez d'ou viens le problème ... ^^
    • Partager sur Facebook
    • Partager sur Twitter
      6 mars 2006 à 16:48:31

      toas = rand() % 2 + 1 ;
      • Partager sur Facebook
      • Partager sur Twitter
        6 mars 2006 à 16:52:21

        Ah ouai en effait ^^
        Et tu peux éxpliquer très vite fait comment ça fonctionne ? :p

        Edit : Oups j'oubliait : merci ! ;)
        • Partager sur Facebook
        • Partager sur Twitter
          6 mars 2006 à 17:09:22

          En fait si tu fais :

          rand() %2


          Ca générera soit 0 soit 1

          Ensuite :

          rand() %2 + 1


          produira soit 0 soit 1 et on lui ajoute 1 donc au final on aura soit 1 ou 2
          • Partager sur Facebook
          • Partager sur Twitter
            6 mars 2006 à 19:32:42

            Salut,
            pour compléter les explications ...
            <mode type="prof" value="on"> ;)



            l'opérateur modulo %




            Le calcul a % b te donne si a est positif (du moins dans mon cas ^^ ) le résultat de la division euclidienne de a par b, qui est donc compris entre 0 (inclus) et b (exclus)

            si a est négatif, le résultat sera l'opposé du reste de la division euclidienne de |a| (valeur absolue de a) par b


            Un exemple vaut toujours mieux qu'un long discours :D
            Prenons |a| = 12 et |b|= 5

            12 % 5 = 2
            12 % (-5) = 2


            car 12 = 5x2 + 2   avec   0 <= 2 < 5
            et 12 = (-5)x(-2) + 2 avec 0 <= 2 < 5



            Hélàs, il y a toujours un mais !



            Pour des valeurs négatives, le reste aurait dû être 3 (il aurait dû, par définition, être compris dans l'intervalle    [ 0 ; |b| [ dans le cas d'une division euclidienne)
            Le calcul : -12 = -5x3 + 3


            Mais on obtient :
            (-12) % 5 = -2
            (-12) % (-5) = -2






            Et j'allais oublier ...
            </mode> :p

            J'espère que ce petit cours aura éclairé ta lanterne ^^

            Donc pour revenir à ton cas : tes nombres sont positifs (j'ai rarement vu un jeu qui se jouait à -2 joueurs :D ), donc en choissisant b = 2, tu obtiendra bien les entiers de l'intervalle [0;2[ qui sont tout simplement 0 et 1 ...
            • Partager sur Facebook
            • Partager sur Twitter

            Problème de rand()

            × 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