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 :

Problème de génération aléatoire


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut Problème de génération aléatoire
    Bonjour,
    j'ai un code qui doit générer un nombre entre 1 et 52 aléatoirement 10 millions de fois.

    Voici mon code:
    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
     
    void generateurhasard()
    {
     
     textcolor(BLACK);
     textbackground(WHITE);
     
     int absolu[51] = {0};  //tableau pour stocker le nombre de fois que sorte les nombres
     long pourcentage[51] = {0}; //tableau pour stocker le pourcentage de fois que sort chaque nombre
     int choix1, choix2, i, nombre;
     
          do{
          system("CLS");
          printf("\n########################################################################################################################");    
          printf("\t\tBienvenue dans le programme d'analyse statistique du jeu de Poker Texas Hold'em No Limit\n");
          printf("########################################################################################################################");
          printf("\n\n\nLe programme va realiser 10 millions de tirage au hasard d'une valeur comprise entre 1 et 52\n");
          printf("(correspondant aux 52 cartes).");
          printf("\nNous analyserons ensuite le pourcentage de fois qu'est sorti chaque nombre.\n\n");
          printf("Appuyez sur entree pour commencer\n\n\n");
     
          choix1 = getch();
     
          }while(choix1!=13);
     
     
                             for(i=0; i < 1000000 ; i++)
                             {                          
                              nombre = 1 + (int) ((double) rand() * (52 - 1 + 1) / (RAND_MAX+1));
     
                              absolu[nombre-1] = absolu[nombre-1] + 1;
     
                              }
     
          do{
             for(i=0;i++;i<52)
             {
              pourcentage[i] = ( absolu[i] / 1000000 ) * 100;
     
              printf("Nombre de fois qu'est tiré %d : %lf\n", i+1, pourcentage[i+1]);                    
              }     
     
          choix2 = getch();
     
          }while(choix2!=13);
    Hors cela ne marche pas, je n'obtiens rien à l'écran


    Je vous remercie par avance.

  2. #2
    Membre actif
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Il n'y a pas une petite erreur ici ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Ro le *** !

    Je te remercie beaucoup !

    ça ne marche toujours pas mais ça avance déja un peu

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Les chiffres tirés ne sont pas compris entre 1 et 52. Savez vous pourquoi ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Ou connaissez vous une autre méthode ?

    Sachant que le tirage doit être équiprobable.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    d'abord voir le tutoriel :

    http://nicolasj.developpez.com/articles/libc/hasard/

    Et ensuite, c'est normal car :

    • 1) tu n'as pas initialisé le tirage (srand)
    • 2) rand renvoie un nombre compris entre 0 et RAND_MAX... Donc si tu veux avoir entre 0 et 52, il faut faire la règle de 3..

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    J'ai modifié le code
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
     
    int alea(int n)
    {
       int partSize   = (n == RAND_MAX) ? 1 : 1 + (RAND_MAX - n)/(n+1);
       int maxUsefull = partSize * n + (partSize-1);
       int draw;
     
       do
       {
          draw = rand();
       } while (draw > maxUsefull);
     
       return draw/partSize;
    }
     
     
     
    void generateurhasard()
    {
     
     textcolor(BLACK);
     textbackground(WHITE);
     
     int absolu[52] = {0};  //tableau pour stocker le nombre de fois que sorte les nombres
     long pourcentage[51] = {0}; //tableau pour stocker le pourcentage de fois que sort chaque nombre
     int choix1, choix2, i, nombre;
     int a,b;
     
     a=1;
     b=52;
     
          do{
          system("CLS");
          printf("\n########################################################################################################################");    
          printf("\t\tBienvenue dans le programme d'analyse statistique du jeu de Poker Texas Hold'em No Limit\n");
          printf("########################################################################################################################");
          printf("\n\n\nLe programme va realiser 10 millions de tirage au hasard d'une valeur comprise entre 1 et 52\n");
          printf("(correspondant aux 52 cartes).");
          printf("\nNous analyserons ensuite le pourcentage de fois qu'est sorti chaque nombre.\n\n");
          printf("Appuyez sur entree pour commencer\n\n\n");
     
          choix1 = getch();
     
          }while(choix1!=13);
     
     
                             for(i=0; i < 1000000 ; i++)
                             {                    
     
                              nombre = alea(51);                                       
                              absolu[nombre] = absolu[nombre] + 1;
     
                              }
     
     
     
          do{
             for(i=0;i<52;i++)
             {
              pourcentage[i] = ( absolu[i] / 1000000 );
     
              printf("Pourcentage de %d : %lf\n", i+1, pourcentage[i+1]);                    
              }     
     
          choix2 = getch();
     
          }while(choix2!=13);
     
     
     
     
    return;
    }
    Le problème est que je n'arrive pas à retirer le 0 dans les tirages aléatoires.

    Et que le calcul du pourcentage ne marche pas.

    Merci

  8. #8
    Membre actif
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("Pourcentage de %d : %lf\n", i+1, pourcentage[i+1]);
    Pourquoi %lf alors que pourcentage est un tableau de long ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Je dois mettre quoi ?

  10. #10
    Membre actif
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Pour un long, %ld
    Voir la doc de printf : http://man.developpez.com/man3/fprintf.3.php

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    ça ne marche quand meme pas.J'ai passé mon tableau en double.

    Merci

  12. #12
    Membre actif
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Attention, pour les doubles, ce n'est pas %lf mais %f

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Est ce que tu vois pourquoi ça ne marche pas ?

    Ou sinon peut etre que tu connait une autre méthode pour calculer le pourcentage de fois que le nombre sort .

    Merci beaucoup

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sebdu94
    Voici mon code:
    Incomplet. On ne sais pas ce que tu as réellement oublié. Merci de poster un code compilable.

Discussions similaires

  1. Probléme génération aléatoire.
    Par Dardas dans le forum LabVIEW
    Réponses: 10
    Dernier message: 09/12/2011, 13h44
  2. Réponses: 3
    Dernier message: 10/06/2009, 22h29
  3. génération aléatoire
    Par acewb00 dans le forum MFC
    Réponses: 1
    Dernier message: 02/12/2005, 10h46
  4. Réponses: 2
    Dernier message: 25/09/2005, 22h30
  5. génération aléatoire de couleur claire
    Par jiraiya dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 25/02/2004, 20h52

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