[C/C++] Random

Random [C/C++] - Programmation

Marsh Posté le 14-03-2002 à 23:25:25    

bonjour tous :hello:
 
je suis newbie en c (enfin 6 mois de cours quoi...), on a un projet de stats avec échantillon et tirage aléatoire... bref ça semble faisable, mais le tirage aléatoire on est un peu short honnêtement (j'ai lu qqch avec srand/rand qu'on devait lier à l'horloge du pc (?!?)...) je vois qu'ici certains maitrisent un peu (l'art de lithote c'est ça ? :) ), alors pourraient-ils m'exposer la procédure (doucement) ?  
 
merciiiiiiiiiiiiiiiiii  :ange:

 

[jfdsdjhfuetppo]--Message édité par Hastings--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 14-03-2002 à 23:25:25   

Reply

Marsh Posté le 14-03-2002 à 23:41:05    

srand(time(0));
rand();

Reply

Marsh Posté le 14-03-2002 à 23:47:55    

hum...
ok, mais l'appel de la méthode rand se fait comment ?
c'est un double compris entre 0 et 1 ? (genre double x=rand();), ou le int avec une valeur maximale à definir ?
 
 
je suis conscient d'être chiant, mais votre bonté sera forcement récompensée :)

Reply

Marsh Posté le 15-03-2002 à 00:10:12    

Tu connais la commande man ? Quand on fait du C, c'est bien pratique.
man srandom
man srand
 
Si tu veux des flottants aléatoires, regarde plutôt du côté de la bibliothèque GSL : http://sources.redhat.com/gsl/
(attention, c'est du GPL et pas du LGPL)


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 15-03-2002 à 07:10:00    

La fonction rand() s'utilise comme ceci:
 
srand(time(0));
rand()%maxi;
 
rand() retourne un nombre compris entre 0 et maxi.

Reply

Marsh Posté le 15-03-2002 à 11:07:07    

Si tu veux "mieux faire":
 
srand(time(0));
 
x = (rand()/RAND_MAX) * valeur_max_souhaitee;
 
 
Ici, RAND_MAX est la borne supérieure de rand(). En bref, le "maxi" de Alload.
=> rand()/RAND_MAX te renvoie un nombre compris entre 0 et 1. Le fait de multiplier ce nombre par la valeur_max_souhaitee fait que tu auras dans x un nombre compris entre 0 et valeur_max_souhaitee.
 
 
Si tu dois, comme je le suppose, utiliser plusieurs fois des nombres aléatoires dans ton code, tu peux faire ceci pour une question de lisibilité.
 
En début de fichier, juste après les includes, tu mets:
#define RAND_NUM srand()/RAND_MAX
 
Ensuite, dans ton code, dès que tu as besoin d'un nombre "aléatoire" compris entre 0 et borne_sup, tu fais ceci:
x  =  RAND_NUM * borne_sup;

Reply

Marsh Posté le 15-03-2002 à 11:19:57    

Majca Jalasu a écrit a écrit :

x = (rand()/RAND_MAX) * valeur_max_souhaitee;



Ça, ça renverra toujours 0.
x = rand() * valeur_max_souhaitée / RAND_MAX; me paraît plus approprié, non ? Et encore, je ne suis pas sûr de ce qui se passe en cas d'overflow.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 15-03-2002 à 11:22:27    

Salut,
 
C'est le premier exercice que je donne a faire a mes etudiants en C :lol:
 
Bon qqes explications : La fonction rand() renvoit toujours la meme suite de nombres "pseudo-aleatoires". Si tu desires avoir
un nombre reellement aleatoire il faut modifier le seed (la racine) servant a generer les nombres. Voici la facon de proceder :
 
int resultat;
 
/* tout d'abord initialiser la racine a partir de l'heure courante (ou NULL est equivalent a 0 comme tu le sais : c'est un pointeur */
srand( time( NULL ) );  
 
/* ensuite on utilise rand() comme prevu, puis tu fais un modulo sur le resultat (et pas une division comme lu plus haut) */
resultat = rand() % 20;
 
Ceci te donnera par exemple un nombre aleatoire compris entre 0 et 19.

Reply

Marsh Posté le 15-03-2002 à 15:12:11    

bon okie on va tester tout ça c'est cool (merci :D ). une question: quelle biblio doit on inclure au debut du programme ?

Reply

Marsh Posté le 15-03-2002 à 15:37:13    

c'est bon ça marche pr les randoms...
je vous recontacte plus tard pour le reste :D
 
 :sol:

Reply

Marsh Posté le 15-03-2002 à 15:37:13   

Reply

Marsh Posté le 13-08-2002 à 15:14:51    

Kahyman a écrit a écrit :

Salut,
 
C'est le premier exercice que je donne a faire a mes etudiants en C :lol:
 
Bon qqes explications : La fonction rand() renvoit toujours la meme suite de nombres "pseudo-aleatoires". Si tu desires avoir
un nombre reellement aleatoire il faut modifier le seed (la racine) servant a generer les nombres. Voici la facon de proceder :
 
int resultat;
 
/* tout d'abord initialiser la racine a partir de l'heure courante (ou NULL est equivalent a 0 comme tu le sais : c'est un pointeur */
srand( time( NULL ) );  
 
/* ensuite on utilise rand() comme prevu, puis tu fais un modulo sur le resultat (et pas une division comme lu plus haut) */
resultat = rand() % 20;
 
Ceci te donnera par exemple un nombre aleatoire compris entre 0 et 19.  




C bizard : moi ca me fait une erreur : implicit declaration of function "time()" à la ligne "srand( time( NULL ) );"


---------------
je suis mechant :D
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed