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 :

Générer des nombres aléatoires


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Générer des nombres aléatoires
    Voilà, je sait que c bête mais je voudrais avoir un nombre aléatoire entre 1 et N et la fonction "rand()" me renvoie toujours le même nombre, j'ai aussi utilisé l'initialisation "srand((int)__DATE__);" puis "int choix = 1+(int) (10.0*rand()/(RAND_MAX+1.0));" et alors là c bizarre ca me renvoie toujours 0; Est ce que qq'un a un esolution SVP?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Salut,
    Généralement, on utilise srand((int)time(NULL)) et non __DATE__...

    (la fonction time() étant déclarée dans <time.h>...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    une petite précision: la seed (srand) doit être générée en dehors de la boucle qui contiens l'appel à rand(); sinon tu obtiendras toujours la même valeur.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::vector<int> tableau; //un tableau qui va contenir 10 entiers compris entre 1 et 100
    srand((int)time(NULL));
    for (int i=0; i<10; i++)
    {
        tableau.push_back(rand()%100+1);
    }
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Pas de changements
    Désolé mais j'ai toujours un même nombre à chaque fois que j'execute mon programme

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Un peu de lecture : Les nombres aléatoires en C (c'est du C donc les fichiers d'en tête sont à modifier).

    Sinon un peu de code pourrais nous aider à y voir plus clair

  7. #7
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    J'ai déjà poste quelque chose il y a quelque temps pour essayer d'expliquer ce qu'il se passe lorsque l'on récupère toujours les mêmes valeurs avec un rand...

    Citation Envoyé par superspag

    ça m'a toujours fait rire les problèmes de générations aléatoires. Pour une fois qu'on aimerait bien faire n'importe quoi on n’y arrive pas lol ^^

    […]

    Dis toi bien que tu ne peux pas faire du vrai hasard en informatique, c'est impossible (à par avec l'informatique quantique mais je dois avouer que ce domaine m'échappe...).

    La seule solution, c'est d'utiliser des fonctions qui ont un comportement aléatoire. Pour cela, on sélectionne des fonctions très instables avec une période très grande. Donc au fur et à mesure que tu avances dans cette fonction en récupérant un rand, tu as vraiment l'impression d'avoir de l'aléatoire et pendant longtemps.

    Cela dit, il y a quand même un hic :
    - Quelque soit la fonction, elle finit toujours par se répéter (peut-être au bout de la 1015420549845 ème demandes mais ça finit toujours par arriver...)
    - à chaque fois que tu recommences l'utilisation de cette fonction, tu retrouves la même séquence...

    Pour pallier à ça, il existe une multitude de germes/fonctions que tu peux sélectionner avec srand... et donc pour en venir à ton problème, si tu obtient des résultats déterministes/répétables, c'est que à quelque part :
    - soit tu te place à chaque fois sur le même germe avec le srand et donc tu répètes la même séquence.
    - soit tu appelles srand sans arrêt avec la même séquence que tu n'utilise qu'une seule fois...
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/01/2008, 12h02
  2. Générer des nombres aléatoirement
    Par elghadi_mohamed dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2007, 12h15
  3. Réponses: 4
    Dernier message: 12/09/2006, 16h42
  4. Algo pour générer des nombres aléatoires
    Par Admin dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 12/06/2006, 09h06
  5. Réponses: 2
    Dernier message: 16/05/2006, 17h02

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