cs_flofloo
Messages postés45Date d'inscriptionsamedi 5 juin 2004StatutMembreDernière intervention16 mars 2009
-
2 mars 2008 à 11:49
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 2009
-
2 mars 2008 à 20:54
bonjouyr tout le monde...je voudrais tout simplement qu'on m'explique comment marche les nombre speudo a l'aleatoire?
j'ai fait une petite recherche sur le sujet et on me parle de rand() et srand()
mais on me dit pas comment il fonctionne a vrai dire et moi je voudrais dans un de mes programme gerer des nombre aleatoire entre 1 et 9.
voila j'attend vos reponse en vous disant dejas merci
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 2 mars 2008 à 13:56
La fonction rand() retourne un nombre pseudo-aléatoire compris entre 0 et 32767 (= constante RAND_MAX définie dans le fichier stdlib.h). Ces nombres sont dits pseudo-aléatoires parce que, a priori, ils semblent aléatoires mais en fait ils sont calculés à partir d'un nombre de départ que l'on appelle la graine et qui démarre touours à la même valeur (certainement zéro j'imagine) ce qui fait que l'on obtient toujours la même série de nombres "aléatoires" à chaque exécution :
donne (sur mon PC) la série suivante à chaque exécution :
41 18467 6334 26500 19169 15724 11478 29358 26962 24464
Pour éviter ce problème (qui n'en ait pas forcément un car on peut vouloir obtenir la même série aléatoire à chaque exécution !), il existe la fonction srand() qui permet d'initialiser la fameuse graine de départ :
donne la série suivante (différente de la précédente) à chaque exécution :
3304 8221 26849 14038 1509 6367 7856 21362 6968 10160
Pour obtenir uune série qui ressemble vraiment à de l'aléatoire, l'astuce consiste à initialiser la graine avec la fonction time() (dans time.h) qui retourne l'heure du PC sous forme du nombre de secondes écoulées depuis le 1er janvier 1970 !!! Comme cela on obtient une graine différente à chaque exécution (à moins de réaliser l'initialisation 2 ou plusieurs fois dans la même seconde !) et donc des séries de nombres aléatoires différents :
donne maintenant une série différente à chaque exécution :
23676 2545 31071 21600 21869 12870 31019 21473 7807 13205
23745 31654 13003 2642 9100 29795 30845 25536 26871 15168
23810 17246 9838 25156 18783 10026 27558 32526 29422 23278
23879 13586 24538 6198 6013 26951 27383 3822 15718 25241
...
Le cast avec (unsigned int) est là parce que srand() attend une valeur de type unsigned int et que time() renvoie une valeur de type time_t. Le NULL dans time() est là parce qu'on ne veut pas stocker le compteur de secondes (sinon il y aurait l'adresse de la variable réceptrice).
Pour obtenir des nombres aléatoires compris entre un minimum et un maximum autres que 0 et 32767, il suffit de faire :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand((unsigned int)time(NULL)
);
int min = 10;
int max = 20;
for (int i=0 ; i<10 ; ++i) printf(" %d",(rand() % (max - min)) + min);
printf("\n");
}
Exemple :
12 19 13 11 19 11 13 19 19 19
Voilà !!!
Jean-François
Vous n’avez pas trouvé la réponse que vous recherchez ?