Un p’tit bout de code random svp ?
15 sujets de 1 à 15 (sur un total de 24)
- 1
- 2
-
Bonjour,
Est ce que quelqu’un pourrait me donner un petit exemple d’une petite routine facile à comprendre d’un random ?
Par exemple je voudrait que le prg me donne des nombres compris entre 1 et 50 au hazard. Pour le moment tout ce que j’obtient ce sont des nombres qui reste la même suite à chaque redemarrage du prg. Un truc simple svp.
ha oui au fait j’utilise rand() pour le moment.
Merci
Edit : Donc le tout en C merci
Une idée est d’avoir une table de chiffres qui se suivent au hasard (exemple personnellement utilisé : les décimales de PI). Ensuite il faut commencer la lecture de la table à un endroit différent à chaque utilisation pour éviter de retrouver la même suite de valeurs. On peut utiliser la date et l’heure courantes à cet effet.
J’ai pas de code sous la main, mais l’idée est là. J’espère que ça peut t’aider.
Voilà une petite fonction en C++.
//Dans ton main par exemple
//Initialisation de la fonction aléatoire
srand(time(0));
void Random(int & myResult, int myNum)
{
//Lance la fonction rand()
myResult = (rand()% myNum);
}
Elle te donne un résultat qui comment à 0 à myNum.
Je ne sais pas si sur Amiga la fct « srand » existe et surtout « time »
Efin essaies toujours avec ça de faire quelque chose.
A+
void Randomize(void)
{
srand(time(NULL));
}
int Random(int Max)
{
return (rand() % Max);
}
Voila…
A chaque fois que tu lances ton programme tu appelles donc d’abord Randomize() qui génère une liste d’entiers pseudo aléatoires… Puis tu appelles Random(50) pour générer un nombre entre 0 et 50…
@+,
Léo.
Ton exemple (Leo) retourne un nombre entre 0 et 49 inclus, pas entre 0 et 50.
srand(time(NULL)) est effectivement la méthode la plus simple/courante pour initialiser le générateur de nombres aléatoires, mais cela ne génère pas une liste de nombres… Cela choisit juste la « graine » qui va servir à calculer le premier nombre aléatoire.
Il faut éviter d’utiliser rand()%max car selon la formule utilisée par rand(), on peut se retrouver avec une suite pas aléatoire du tout (style 0,1,0,1,0… pour rand()%2).
A la place, on peut utiliser rand()/(RAND_MAX/max). Je crois.
Sinon bego, tu m’avais déjà demandé et je t’avais déjà répondu.
Oui, je sais bien mais j’avait rien capté et j’avait pas fait de log lors de ton explication sur irc. Scuse moi.
Sinon merci à tous, je vais essayé de voir ce que tout cela va donner )))
Encore merci.
Dommage pour toi Daddy, car l’opérateur « + » est prioritaire sur le modulo « % » . Donc ton exemple donnera un nombre compris entre 0 et myNum+1 inclus.
Bon, je résume en donnant la bonne méthode :
void initRand( void )
{
srand(time(NULL));
}
int myRand( int min, int max )
{
return min + rand() / ( (RAND_MAX+1) / (max+1-min) );
}
ou, selon la méthode de Fab :
int myRand( int min, int max )
{
return min + (int) ( (float)(max+1-min) * rand() / (RAND_MAX+1) );
}
myRand() retournera un nombre compris entre min et max INCLUS. (si je ne me suis pas gouré )
15 sujets de 1 à 15 (sur un total de 24)
- 1
- 2
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Un p’tit bout de code random svp ?