Nombres aléatoires

Résolu
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012 - 17 juil. 2005 à 16:24
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 20 juil. 2005 à 06:30
Voila : Avant j'utilisais randomize() pour réinit le générateur de
nombres aléatoires et rand() ou random(x) pour générer le nombre. Ca
marchait impec. J'ai été voir sur le forum car randomize() me renvoyais
un petit unknown function sous devcpp. j'ai pu voir que maintenant les
"gens" font un "srand((unsigned) time(NULL));" pour réinit le moteur et
un rand()%x popur générer le nombre. Ca marche mais ca me génère en
fait une suite de nombre compris entre 0 et x dont a chaque passage un
ou deux membre de la liste varient, en gros. Quelqu'un pourrait-il donc
m'indiquer comment changer ça ? Paske c un peu génant quand même. Si
encore toutes les valeurs apparaissaient plus ou moins... Mais la, ya
vraiment des valeurs qui viennent jamais !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">

12 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
17 juil. 2005 à 18:09
Il y une discussion et un lien dans les commentaires de ce code, ca peut t'aider: il y a d'autres fonctions random

http://www.cppfrance.com/code.aspx?ID=32747
3
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
19 juil. 2005 à 19:47
Merci beaucoup. En fin de compte, j'ai fait la méthode srand et
rend mais dans le srand j'ai mis : srand((unsigned int) rand()%time(0))

C'est un peu plus aléatoire que time(0) uniquement !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
17 juil. 2005 à 17:29
"dont a chaque passage un ou deux membre de la liste varient, en gros"
je comprends pas trop la, quelle liste.
Normalement, tous les nombres entre 0 et x finissent par apparaitre. Tu as fait des tests?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
17 juil. 2005 à 17:36
Si fait assez de rand(), toutes les valeurs sont prises. Essaie par toit même:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>

int main()
{
unsigned int i, j, *t;
srand((unsigned int)time(0));
t = new unsigned int[RAND_MAX];
memset(t, 0, RAND_MAX * sizeof(unsigned int));
for(i = 0; i < RAND_MAX; i++)
for(j = 0; j < 1000; j++)
t[rand()]++;

for(i = 0; i < RAND_MAX; i++)
if(!t[i]) printf("%d\n", i);
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
17 juil. 2005 à 17:38
Honte a moi, j'ai pas libéré la mémoire, et j'ai mélangé C et C++

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>

int main()
{
unsigned int i, j, *t;
srand((unsigned int)time(0));
t = malloc(RAND_MAX * sizeof(unsigned int));
memset(t, 0, RAND_MAX * sizeof(unsigned int));
for(i = 0; i < RAND_MAX; i++)
for(j = 0; j < 1000; j++)
t[rand()]++;

for(i = 0; i < RAND_MAX; i++)
if(!t[i]) printf("%d\n", i);

free(t);
}
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
17 juil. 2005 à 18:00
Si tu veux, je suis en train de proguer un programme d'entraînement à
la dactlo (inutile, je sais, mais c pour m'entraîner à la prog OpenGL)
qui recopie ton clavier de PC et te demande d'appuyer sur une touche.
En fait, à l'écran tu vois une touche en bleu et le reste en gris. La
touche bleu étant celle sur laquelle tu dois appuyer, est prise
aléatoirement. Et bien quand tu lance le prog, toutes les valeurs
seront prises au bout de longtps, je te l'accorde, mais on remarque
nettement que les touches demandées reviennent tout le temps d'ou la
"liste" et que cette "liste" varie, mais pas assez. Donc certaines
touches ne seront presque jamais demandées si l'utilisateur ne reste
pas assez longtemps sur le programme. J'ai deja fait tourner le
programme plusieurs fois et certaines touches ne sont pas encore
sorties !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
19 juil. 2005 à 19:52
Je ne pense pas, puisque rand() te donne des valeurs plutot petites, en général ca ne changera rien. En plus tu peux pas savoir comme ca change tout le temps
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
19 juil. 2005 à 20:50
bah bizzarement je trouve que ca marche plutot mieu quand meme !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
19 juil. 2005 à 21:03
Excuse-moi effectivement c l'inverse : time(0)%rand() sinon ca ne sert pas a grand chose.

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
19 juil. 2005 à 21:14
Le truc c'est que tu appelles rand() avant srand(), et donc rand te donne toujours la même chose. Qu'est ce que tu dis de ca?
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
19 juil. 2005 à 23:00
La première utilisation de rand() est effectivement appelée avant
srand(), mais l'utilisation suivante, non ! Et donc a priori ca marche
quand même (en tout cas, en testant je trouve que effectivement ca
marche mieux)

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
20 juil. 2005 à 06:30
ce que je veux dire, c'est que écrire srand(time(0)%rand()) ou écrire srand(time(0)%10) ca revient au même (j'ai pris 10 au hasard avec ma fonction rand perso)
0