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
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    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 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    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 confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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(int low, int high) {
       assert (high - low  <= RAND_MAX);
       int max_usable = ((RAND_MAX)/(high-low)) * (high-low);
       int value, result;
       do {
          value = rand();
       } while (value >= max_usable);
       return low + value % (high-low);
    }
    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...

  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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    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 confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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).

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