Partage
  • Partager sur Facebook
  • Partager sur Twitter

La fonction pour créer un nombre au hasard

Sujet résolu
    11 juillet 2006 à 21:14:00

    Bonjour, et encore désolé si cette question est vraiment bête (ou pire que l'on ait déjà posée cette question et que je n'ai pas trouver. :p ).

    Voilà je suis au dernier cours de la première partie "Apprenez à programmer en C / C++", au fonctions pour être plus précis. :)

    J'ai essayé de faire le dernier exercice que M@teo 21 à demander de faire et je n'arrive pas à trouver comment réaliser la fonction pour générer un nombre au hasard. :euh:

    Vu que je débute depuis pas longtemps je pense bien que c'est une erreur de débutant mais j'aimerais savoir ma faute avant d'attaquer la deuxième partie. :(

    Merci d'avance et encore désolé pour cette question bête. :-°
    • Partager sur Facebook
    • Partager sur Twitter
      11 juillet 2006 à 21:23:19

      Bonjour.
      La fonction n'est rien de plus que ... une fonction :D :
      long genereNombre(const long nombreMin, const long nombreMax)
      {
          srand(time(NULL));
          return (rand() % (nombreMax - nombreMin + 1)) + nombreMin;
      }
      • Partager sur Facebook
      • Partager sur Twitter
        11 juillet 2006 à 21:26:54

        Ah ben oui quel bêta j'ai mis des variables long pour le minimum et pour le maximum alors que c'est des constantes ! o_O

        (Erreur de débutants c'est ce que je disais :-° )

        Merci beaucoup ! ^^
        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2006 à 21:35:20

          Citation : oussama1305

          Bonjour.
          La fonction n'est rien de plus que ... une fonction :D :

          long genereNombre(const long nombreMin, const long nombreMax)
          {
              srand(time(NULL));
              return (rand() % (nombreMax - nombreMin + 1)) + nombreMin;
          }

          :pirate: Combien de fois va-t-il falloir te répéter que srand() doit être appélé une seule fois au début de l'exécution du programme ?
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            11 juillet 2006 à 21:37:40

            Donc il faut que je mette la fonction "srand" au début de celle de "main" ? :o
            • Partager sur Facebook
            • Partager sur Twitter
              11 juillet 2006 à 21:39:01

              Citation : Kagura-sama

              Donc il faut que je mette la fonction "srand" au début de celle de "main" ? :o


              Absolument.
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                11 juillet 2006 à 21:39:02

                #include <stdio.h>
                #include <stdlib.h>
                #include <time.h>

                int main ( int argc, char** argv )
                {
                    long nombreMystere = 0, nombreEntre = 0;
                    const long MAX = 100, MIN = 1;

                    // Génération du nombre aléatoire
                    nombreMystere = genereNombre(MIN, MAX);

                    /* La boucle du programme. Elle se répète tant que l'utilisateur
                    n'a pas trouvé le nombre mystère */


                    do
                    {
                        // On demande le nombre
                        printf("Quel est le nombre ? ");
                        scanf("%ld", &nombreEntre);

                        // On compare le nombre entré avec le nombre mystère
                        compareNombres(nombreEntre, nombreMystere);

                    } while (nombreEntre != nombreMystere);


                    system("PAUSE");

                Le code qu'a donné M@teo21 ne comporte pas de srand(), alors nous avons bien le droit de l'appeller une seule fois dans la fonction?
                • Partager sur Facebook
                • Partager sur Twitter
                  11 juillet 2006 à 21:43:25

                  Citation : oussama1305

                  Le code qu'a donné M@teo21 ne comporte pas de srand(), alors nous avons bien le droit de l'appeller une seule fois dans la fonction?


                  Peut être, comment tu fais ? Parce que le code que tu as montré l'appelle à chaque fois... Une autre application pourrait très bien appeler genereNombre() plusieurs fois... (tirage de 2 dés, par exemple, placement de bateaux d'une bataille navale etc.)

                  Quand on écrit une fonction réutilisable, il faut qu'elle marche dans tous les cas, et pas uniquement dans un cas particulier.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    11 juillet 2006 à 21:44:51

                    Donc il vaut mieux la mettre au début de "main" même si ce n'est pas nécessaire pour prendre l'habitude. :p

                    Merci beaucoup à vous ! :D
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 juillet 2006 à 21:45:31

                      J'ai raison quand on joue le plus ou moins, mais qu'on joue qu'une seule fois, et tu as raison si on joue plus d'une fois.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        11 juillet 2006 à 21:48:17

                        Le srand ne doit être fait qu'une seule fois au début du programme. Voici une fonction donc le srand ne s'exécutera qu'une fois (non testé, pas tapper si ça marche pas :D ) :
                        int
                        my_rand(int min, int max)
                        {
                                static int first = 1;
                                if (first) {
                                        srand(time(NULL));
                                        first = 0;
                                }
                                return (rand() % (max - min + 1) + min);
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 juillet 2006 à 21:50:59

                          Citation : oussama1305

                          J'ai raison quand on joue le plus ou moins, mais qu'on joue qu'une seule fois, et tu as raison si on joue plus d'une fois.


                          A quoi sert un programme qui ne marche qu'une fois, je te le demande.

                          Il me semble qu'-ed- a déjà dit ça une vingtaine de fois, mais tu peux utiliser une variable static :
                          /* utiliser int */
                          int genereNombre(int Min, int Max) /* préciser const ne sert à rien */
                          {
                              static unsigned char init = 0;
                              if(!init)
                              {
                                  srand(time(NULL));
                                  init = 1;
                              }
                              return (int)((float)rand()/RAND_MAX*(max-min+1))+min; /* plus mieux que si
                                                                                     * c'était moins bien */

                          }


                          [edit : Mouahaha grilled mais mon post il est mieux :p ]
                          [HS : sur fond noir ton avatar louisclem il est un peu invisible, kwa ]
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 juillet 2006 à 21:51:12

                            Un booléen pour tester si c'est déjà fait, excellente idée jeune modo rigolo :D .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 juillet 2006 à 21:51:52

                              Houla, je suis pas encore à là moi ! Je préfère pas noter des trucs que je ne comprends pas ! :p

                              Merci les zéros ! ;) Je cours continuer les cours ! (jeu de mots nul à battre :-° )
                              • Partager sur Facebook
                              • Partager sur Twitter

                              La fonction pour créer un nombre au hasard

                              × 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