Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : double aléatoire [ Algorithme / Compression, Split & Cryptage ] (youssefmahdia)

samedi 26 avril 2008 à 14:26:04 | double aléatoire

youssefmahdia

salut,
je veux savoir comment générer un réel aléatoire dans l'intervalle [0,1].
merci

samedi 26 avril 2008 à 14:39:38 | Re : double aléatoire

SAKingdom

Membre Club
Réponse acceptée !
Simplement, on peut faire:

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

C++ (@++)


samedi 26 avril 2008 à 14:49:02 | Re : double aléatoire

SAKingdom

Membre Club
Tu peux retirer le + 1.0 si tu souhaites que num puisse valoir 1.

C++ (@++)


samedi 26 avril 2008 à 14:53:55 | Re : double aléatoire

youssefmahdia

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.


samedi 26 avril 2008 à 15:33:49 | Re : double aléatoire

jfrancois

Réponse acceptée !

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<iTailleRepartition ; ++iRep)
      for (int iVal=0 ; iVal<paiRepartition[iRep] ; ++iVal)
         paiValeur[i++] = iRep;

   // --- Mélanger les éléments du tableau
   srand(time(NULL));
   for (int iTri=0 ; iTri<iTailleValeur ; ++iTri)
   {
      // --- Tirer au sort les indices des 2 valeurs à permuter
      int i1 = rand() % iTailleValeur;
      int i2 = rand() % iTailleValeur;
      if (i1 == i2) continue;

      // --- 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<iTailleValeur ; ++i) printf("%d ",aiValeur[i]);
   printf("\n");
   return 0;
}

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


samedi 26 avril 2008 à 16:13:43 | Re : double aléatoire

youssefmahdia

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



Cette discussion est classé dans : aléatoire, double


Répondre à ce message

Sujets en rapport avec ce message

Nombre aléatoire de type Double [ par BRAUKRIS ] Impossible de génère un nombre aléatoire à virgule.J?ai utilisé la fonction rand mais elle me renvoie toujours un nombre entier.Comment doit-je faire création d'un shell [ par irrisson ] Je dois créer un shell sous linux en langage c. - gestion des redirections simple ou double, des indirections simple ou double et des pipes(ex: /tmp/ float->double [ par cstephane78 ] stephane 78bonjour,Connaissez-vous une méthode qui permet de convertir un float en double sans perte de precision (ajout de 0 à la suite du nombre à 1 helppp [ par LDDL ] Slt a tousVoilà je ne programme pas en C et j'ai dois faire une Dll qui permette de calculer des nombres DOUBLE (ex : 800000000/6.55957) puis de renv tirage aléatoire selon une loi gaussienne [ par marmotte33 ] Je cherche à faire un petit programme en c++ permettant d'obtenir une variable aléatoire suivant une loi Gaussienne, en paramétrant la valeur moyenne Aide [ par eikonos ] Je travail sur une dll appellé psfg.dllj'ai ces lignes suivant de codetypedef struct CAMERAPARAM_tag{int nGain;int nOffset;int bOffsetFix;int nUpperLi erreur de violation access (violation d'acces) [ par pipic ] slt,J'ai une erreur de violation d'acces sous visual c++ à partir du code suivant (alors que ce code compile correctement sous dev cpp) :G déclaré la HELP HELP variable double ds un edit box vis C++ MFC [ par pipic ] Je bosse ss visual C++ avec la fonctionnalité MFCJ'ai un edit box ds lequel g declaré une variable de type double. Le pb c que lorsque je rempli ce ch Générer un nombre aléatoire [ par lan32 ] Est ce que vous savez quelle est la fonction qui permet de générer un nombre aléatoire par exemple compris entre 0 et 100.Et aussi comment faire pour pb de memoire? [ par ganfoud ] Salut!mon probleme, c'est que je pense que je sature la memoire mais j'en suis pas sûr:j'ai:double** sol=new double[nbre_decoup+1];for (i=0;i sol[i] =


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.