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 :

Aléatorie


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Aléatorie
    Comment faire pour créer un tableau de int avec des nombres aléatoires en faisant en sorte qu'aucun des nombres à l'interieur du tableau ne soit égal à un autre.
    Merci pour cette petite aide

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    tu peut utiliser la fonction rand() qui donne un float entre 0 et 1.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La FAQ C raconte tout ce qu'il faut pour générer correctement des nombres aléatoires.

  4. #4
    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,
    La FAQ C raconte tout ce qu'il faut pour générer correctement des nombres aléatoires.
    Comment obtenir un nombre aléatoire entre 0 et N-1 ?
    Les nombres aléatoires en C
    C'est du C mais je ne pense pas qu'il y ai de différence avec le c++.
    après si vous souhaitez des valeurs uniques, il suffit de parcourir le tableau pour vérifier si l'entrée existe déjà et si c'est le cas, re-régénérer un nombre (attention, il y a un risque, certe improbable, de boucle infinie)

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par gege2061
    Bonjour,
    La FAQ C raconte tout ce qu'il faut pour générer correctement des nombres aléatoires.
    Comment obtenir un nombre aléatoire entre 0 et N-1 ?
    Je manque peut-etre quelque chose mais je ne vois pas pourquoi passer par des floats (surtout des float, on va deja perdre une partie des valeurs si on a une lib avec un generateur un peu performant qui a RAND_MAX qui vaut 1 << 31) va changer le probleme de non equirepartition de la version avec un %.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     int randomInRange&#40;int low, int high&#41; &#123;
       assert &#40;high - low  <= RAND_MAX&#41;;
       int max_usable = &#40;&#40;RAND_MAX&#41;/&#40;high-low&#41;&#41; * &#40;high-low&#41;;
       int value, result;
       do &#123;
          value = rand&#40;&#41;;
       &#125; while &#40;value >= max_usable&#41;;
       return low + value % &#40;high-low&#41;;
    &#125;
    Comme habituel en C++, l'intervalle ne comprend pas high.

    J'oubliais: sauf si l'intervalle est grand (genre RAND_MAX/3 ou 4, ce qui est possible
    avec des RAND_MAX petits comme le 32535 habituel), la pauvre qualite des generateurs habituels doit introduire autant de problemes que le biais de rand() %N. Donc si la qualite du generateur a de l'importance, en recuperer un en dehors de la lib standard...
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    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
    Par défaut
    Les générateurs classique avec hasard faible parcourent toutes les valeurs une fois avant de recommencer, donc il n'y a pas de biais au sens de l'écart-type ou de la moyenne.

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Miles
    Les générateurs classique avec hasard faible parcourent toutes les valeurs une fois avant de recommencer, donc il n'y a pas de biais au sens de l'écart-type ou de la moyenne.
    Il me semble que je n'ai utilise le mot biais qu'en relation avec l'usage
    avec un N qui n'est pas un diviseur de RAND_MAX. Et la il s'agit bien d'un biais favorisant les faibles valeurs (surtout quand N est grand). Ma remarque etait que si ce biais avait de l'importance, l'incertitude sur la qualite de rand() faisait qu'il etait mieux de passer a un generateur aux qualites connues (ca aide aussi a la reproductabilite des resultats et au debug quand on est en multiplaforme, mais c'est encore un autre sujet).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

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