Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4240 connectés 

 


Dernière réponse
Sujet : [C/C++] Random
Fidel Castra

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 ) );"


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Fidel Castra

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 ) );"

hastings c'est bon ça marche pr les randoms...
je vous recontacte plus tard pour le reste :D
 
 :sol:
hastings bon okie on va tester tout ça c'est cool (merci :D ). une question: quelle biblio doit on inclure au debut du programme ?
Kahyman 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.
Jar Jar

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.

Majca Jalasu 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;
Alload La fonction rand() s'utilise comme ceci:
 
srand(time(0));
rand()%maxi;
 
rand() retourne un nombre compris entre 0 et maxi.
Jar Jar 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)
hastings 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 :)
manegarm srand(time(0));
rand();
hastings 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]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)