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

  FORUM HardWare.fr
  Programmation

  [C/C++] Random

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Random

n°112375
hastings
1066
Posté le 14-03-2002 à 23:25:25  profilanswer
 

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]

mood
Publicité
Posté le 14-03-2002 à 23:25:25  profilanswer
 

n°112379
manegarm
Posté le 14-03-2002 à 23:41:05  profilanswer
 

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

n°112380
hastings
1066
Posté le 14-03-2002 à 23:47:55  profilanswer
 

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 :)

n°112381
Jar Jar
Intaigriste
Posté le 15-03-2002 à 00:10:12  profilanswer
 

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
n°112388
Alload
Posté le 15-03-2002 à 07:10:00  profilanswer
 

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

n°112456
Majca Jala​su
Posté le 15-03-2002 à 11:07:07  profilanswer
 

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;

n°112473
Jar Jar
Intaigriste
Posté le 15-03-2002 à 11:19:57  profilanswer
 

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
n°112476
Kahyman
Posté le 15-03-2002 à 11:22:27  profilanswer
 

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.

n°112586
hastings
1066
Posté le 15-03-2002 à 15:12:11  profilanswer
 

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

n°112595
hastings
1066
Posté le 15-03-2002 à 15:37:13  profilanswer
 

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

mood
Publicité
Posté le 15-03-2002 à 15:37:13  profilanswer
 

n°194663
Fidel Cast​ra
cone tééééééé partiroooooooo !
Posté le 13-08-2002 à 15:14:51  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C/C++] Random

 

Sujets relatifs
[SQL] Random...images random (javascript)
[ C++ ] - j'arrive pas a utiliser la fonction random[php] random
question en c: (random et erreur de segmentation).. aidez moi :-)[c++ sous dos] comment faire une fonction random de 01 à 100 ?
Fonction "random" ou "shuffle" en C++ : ça existe ?C'est possible de faire un random sur 3 chiffres ??
[VB]random ?[DELPHI] random pas si random que ca
Plus de sujets relatifs à : [C/C++] Random


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR