Double aléatoire

Résolu
Signaler
Messages postés
25
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
12 juin 2011
-
Messages postés
25
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
12 juin 2011
-
salut,
je veux savoir comment générer un réel aléatoire dans l'intervalle [0,1].
merci

5 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Simplement, on peut faire:

double num = (double)(rand() / ((double)RAND_MAX + 1.0));

C++ (@++)<!--
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

Une solution est de remplir le tableau avec la répartition voulue puis de mélanger les éléments du tableau :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>





void Remplir
(
    int       *paiValeur          // E/S:tableau à remplir
   ,int        iTailleValeur      // E:nombre d'éléments
   ,const int *paiRepartition     // E:tableau des répartitions
   ,int        iTailleRepartition // E:nombre d'éléments
)
{
   // --- Remplir régulièrement
   int i = 0;
   for (int iRep=0 ; iRep
   // --- Mélanger les éléments du tableau
   srand(time(NULL));
   for (int iTri=0 ; iTri




      // --- Permuter les 2 valeurs

      int iSwap = paiValeur[i1];
      paiValeur[i1] = paiValeur[i2];
      paiValeur[i2] = iSwap;
   }
}





int main(void)
{
   // --- Tableau des valeurs
   const int iTailleValeur = 100;
   int aiValeur[iTailleValeur];




   // --- Tableau des répartitions demandées
   // --- 13 x 0, 12 x 1, 25 x 2, 50 x 3
   // --- (somme des répartitions = 'iTailleValeur')
   const int iTailleRepartition = 4;
   int aiRepartition[iTailleRepartition] = {13,12,25,50};




   // --- Remplir et afficher
   Remplir(aiValeur,iTailleValeur,aiRepartition,iTailleRepartition);

   printf("\n");
   for (int i=0 ; i

Ce qui donne (différent à chaque exécution) :

3 1 0 0 3 1 1 3 3 3 2 2 0 3 1 3 2 1 3 3 1 3 2 3 1
2 2 2 3 2 1 3 3 3 3 1 2 1 2 3 0 2 2 3 2 2 3 3 2 3
3 0 0 3 2 2 2 3 0 3 3 3 3 3 3 3 3 2 3 3 2 0 1 1 2
3 3 0 2 3 0 3 3 2 0 0 3 3 3 3 3 2 3 3 3 3 3 3 0 2



Jean-François
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Tu peux retirer le + 1.0 si tu souhaites que num puisse valoir 1.

C++ (@++)<!--
Messages postés
25
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
12 juin 2011

merci monsieur,
bon, ça c'est la première étape.
la deuxième étape est plus difficile, trop meme,
en fait, je veux générer aléatoirement  dans un tableau de dimension 100 (par exemple) une suite d'entiers qui vérifient la condition suivante:
3 devra apparaitre 50 fois,
2                              25 fois.
1                             12 fois
et 0 devra apparaitre 13 fois.
le tabelau devra etre rempli aléatoirement.
j'ai essayé de toutes les méthodes et j'ai pa pu résoudre le problème.
merci d'avance.
Messages postés
25
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
12 juin 2011

vraiement bravo,
très très bien.
je vous remercie indéfiniment.