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 :

Un Rand un peu spécial


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut Un Rand un peu spécial
    Bonjour à tous !

    J'ai un petit problème en C, que j'aimerai résoudre.

    Voici mon exemple :

    J'ai un tableau contenant les valeurs [1 3 5]

    J'aimerais faire en sorte que, dans 10% des cas, on choisisse 1, 20% des cas, on choisisse 3, et 70% des cas, on choisisse 5.


    J'ai 2 idées en tête, un peu farfelues :

    première : Remplir un tableau de 10 valeurs, avec un 1, deux 3 et dix 5, puis faire un valeur=tableau[rand()%9]

    Problème : si mes pourcentages deviennent 15, 25, 60 par exemple, il faut augmenter la taille du tableau.

    OU

    deuxième : faire un Random=rand%99, et faire un test sur Random : si on a entre 0 et 9 prendre 1, 10 et 30 prendre 3, 31 et 100 prendre 5.

    Je préfère largement la deuxième solution mais j'aimerai savoir si il n'y a pas un moyen plus simple et automatique de faire ce que je veux faire ?

    Merci !

  2. #2
    Expert confirmé

    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
    Billets dans le blog
    2
    Par défaut
    primo, rand%99 te donnera rien de valable

    rand renvoie entre 0 et RAND_MAX.

    donc, si tu veux avoir un %, il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = rand*100/RAND_MAX
    et ta solution 2 est effectivment meilleure, si tu ranges tes pourcentages limites dans un tableau...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int Tableau[3] = {1, 3, 5} ;
    int Limites[3] = {15,25, 100};  /* le dernier est 100 - limite supérieure */
    int i ;
     
    for ( i = 0 ; i < 3 ; i++ )
       if ( res <= Limites[i] )
          {
             valeur = Tableau[i] ;
             break ;
          }

    [EDIT]

    d'ailleurs, pour avoir ta répartition réelle qui soit 15%, 25% et 60%, tes limitees devraient être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Limites[3] = {15, 40, 100};
    [/EDIT]

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    Ta réponse correspond bien à ma 2ème proposition, un peu détournée.

    rand()%99 fait bien un RAND_MAX modulo 99 non ? Donc me fournira une valeur comprise entre 0 et 99 ?

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Gao,
    Citation Envoyé par bluetotoro Voir le message
    Ta réponse correspond bien à ma 2ème proposition, un peu détournée.

    rand()%99 fait bien un RAND_MAX modulo 99 non ? Donc me fournira une valeur comprise entre 0 et 99 ?
    Entre 0 et 98 inclus.

Discussions similaires

  1. Requête SELECT un peu spéciale
    Par Kokito dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/04/2005, 11h42
  2. envois de var $_GET un peu spécial
    Par frechy dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/11/2004, 11h00
  3. contrainte d'unicité un peu spéciale....
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/11/2004, 17h54
  4. Réponses: 4
    Dernier message: 05/07/2004, 13h17
  5. ORDER BY un peu spécial
    Par gromez dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 29/04/2004, 11h17

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