Random [C/C++] - Programmation
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
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)
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.
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;
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.
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
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.
Marsh Posté le 15-03-2002 à 15:12:11
bon okie on va tester tout ça c'est cool (merci ). une question: quelle biblio doit on inclure au debut du programme ?
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
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 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 ) );"
Marsh Posté le 14-03-2002 à 23:25:25
bonjour tous
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
[jfdsdjhfuetppo]--Message édité par Hastings--[/jfdsdjhfuetppo]