Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit probleme de fonction

Tirage au hasard

    9 juillet 2006 à 22:26:55

    long hasard(long nombreHasard, long MIN, long MAX)
    {
    nombreHasard = (rand() % (MAX - MIN + 1)) + MIN;
    return nombreHasard;
    }

    Voila, j'ai cette fonction que j'appelle pour tirer un nombre au hasard (en envoyant le nombre, le minimum et le maximum), mais, invariablement, la fonction ne me renvoi que la valeur initial de la variable... Pourquoi?
    • Partager sur Facebook
    • Partager sur Twitter
      9 juillet 2006 à 22:31:18

      Tu as oublié une ligne.
      Et le paramètre long nombreHasard ne sert à rien.
      Dr plus ne mets pas les variables min et max en majuscules, ce ne sont pas des constantes.

      long hasard(long min, long max)
      {
          srand(time(NULL));
          return (rand() % (max - min + 1)) + min;
      }


      Et tu utilises la fonction comme ça:
      nombreHasard = hasard(min, max);
      • Partager sur Facebook
      • Partager sur Twitter
        10 juillet 2006 à 0:53:22

        si tu tiens a utiliser srand dans ta fonctions ne l'appelle qu'une fois comme ca par exemple.

        long hasard(long min, long max)
        {
            static unsigned char isseed = 0;
            if(!isseed)
            {
                srand(time(NULL));
                isseed = 1;
            }
            return (rand() % (max - min + 1)) + min;
        }
        • Partager sur Facebook
        • Partager sur Twitter
          10 juillet 2006 à 12:24:04

          Citation : DarkDominus

          Tu as oublié une ligne.

          long hasard(long min, long max)
          {
              srand(time(NULL));
              return (rand() % (max - min + 1)) + min;
          }



          Non. Si tu fais ça, tu auras la même valeur à chaque fois (si tu l'appelles dans la même seconde).

          Je rappelle pour la Nième fois (N grand !) que srand() ne doit être appelée qu'une seule fois au lancement du programme (par exemple 1ère instruction de main()...)
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            10 juillet 2006 à 12:50:46

            Ok merci.
            Mais la méthode de slimshady451 est bonne alors?
            • Partager sur Facebook
            • Partager sur Twitter
              10 juillet 2006 à 14:32:10

              Citation : DarkDominus

              Ok merci.
              Mais la méthode de slimshady451 est bonne alors?


              Voui...
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                10 juillet 2006 à 17:41:12

                Sa marche au poil, merci beaucoup :)

                Heuuu par contre quelqu'un peu m'expliquer le "static unsigned char isseed = 0;"

                C'est une facon de declarer la variable dans une autre fonction que main? Non? :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  10 juillet 2006 à 17:47:09

                  static veut dire que la variable gardera sa valeur même si tu sors de la fonction.

                  Le unsigned je penses que c'est pour que la variable ne soit jamais négative, d'ailleurs je vois pas trop à quoi ça sert ici.

                  Moi j'ai juste fait ça:
                  const long MIN = 1, MAX = 7;
                  static int called = 0;

                  if(!called)
                  {
                      srand(time(NULL));
                      called = 1;
                  }

                  return ((rand() % (MAX - MIN + 1)) + MIN);
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 juillet 2006 à 18:42:51

                    return (rand() % (max - min + 1)) + min;

                    Moi j'aurais plutôt fait ça :
                    return (int)((float)rand()/RAND_MAX*(max-min+1))+min;
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Petit probleme de fonction

                    × 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