Double aléatoire

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

5 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 avril 2008 à 14:39
Simplement, on peut faire:

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

C++ (@++)<!--
3
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
26 avril 2008 à 15:33
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 avril 2008 à 14:49
Tu peux retirer le + 1.0 si tu souhaites que num puisse valoir 1.

C++ (@++)<!--
0
youssefmahdia Messages postés 25 Date d'inscription dimanche 30 mars 2008 Statut Membre Dernière intervention 12 juin 2011
26 avril 2008 à 14:53
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
youssefmahdia Messages postés 25 Date d'inscription dimanche 30 mars 2008 Statut Membre Dernière intervention 12 juin 2011
26 avril 2008 à 16:13
vraiement bravo,
très très bien.
je vous remercie indéfiniment.
0
Rejoignez-nous