Srand ?

sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005 - 2 avril 2005 à 12:43
fandezizou Messages postés 16 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 28 septembre 2006 - 4 nov. 2005 à 14:28
Salut à tous !



Je débute complètement en C, et je suis en train d'essayer de coder un jeu du "plus ou moins".

Mais j'ai un problème au niveau de la génération de nombres aléatoires. Mon code est le suivant :



int Nombre()

{

srand((unsigned) time(NULL));

return (rand() % 999) + 1;

}





Mais voilà, il me retourne un nombre dépendant d'un timer
(apparemment), car lorsque j'exécute le code plusieurs fois d'affilées,
les nombres générés sont toujours proportionnellement croissants ! Or,
je voudrais qu'il puisse me générer coup sur coup un 1, un 785, un
420... Et non pas des 780, 785, 790, 795...



Quelqu'un a-t-il une solution à ça ?



Merci d'avance !

7 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
2 avril 2005 à 13:27
Tu as compris ce que fais srand, comment fonctionne rand ?

srand((unsigned) time(NULL)); est à appeler une fois, au debut du programme par exemple.

rand est un générateur de nombre pseudo aleatoire (un mauvais d'ailleur).
0
sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005
2 avril 2005 à 13:48
D'abord, merci de ta réponse, je savais que srand devait être appelé en
début de programme, mais je ne l'avait pas fait... Enfin, maintenant
c'est bon, merci de m'avoir mis le nez sur mon erreur :-)



Mais sinon, je suis assez intéressé par tout ce que l'on pourra m'apprendre sur les fonctions srand et rand.

Et d'ailleurs, pourquoi dis-tu que celle-ci est mauvaise ?
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
2 avril 2005 à 14:31
Le rand fourni par la bibliothèque standard fonctionne avec une graine
(un entier que tu initialises avec srand) et chaque nombre généré par
rand dépend du précédent. Mets srand(2) par exemple au debut du
programme et tu auras toujours la meme sequence.
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 avril 2005 à 15:57
un ordi ne peut pas générer comme ca des nombres aléatoires.

en gros ce qu'il fait c'est qu'il récupèere le tickcount (nbre de
millisecondes depuis le boot) , il le triture un peu et il te le
refourge comme ca, c'est minable

la seule maniere a ma connaissance d'avoir des nombres réellement
aléatoires c'est un module externe , qui envoie des photons sur des
miroirs semi-réfléchissants, un trtuc de ouf bourré de physique
quantique, qui en plus dois valoir des millions.et puis pour l'usage
qu'on en fait, rand() est tres bien.

ya eu quelques forums la dessus par ici...



++

Arnaud

_______________________


Omnia vincit labor improbus
0

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

Posez votre question
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
2 avril 2005 à 16:41
Pour résumer, on va dire qu'il est impossible dans la pratique de
générer de vrai nombre aléatoire. Celui fournit par a bibliothèque
standard est suffisant pour une utilisation "simple" et est portable,
mais cela reste un tres mauvais générateur de nombres pseudo aléatoire,
les applications scientifiques disposent souvent de leur propre
générateur.
0
fandezizou Messages postés 16 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 28 septembre 2006
4 nov. 2005 à 13:53
Bonjour
J'aimerai savoir s'il vous plait avec Dev C++ comment on efface l'écran parce ke clrscr() ne fonctionne pas avec Dev.
Merci
0
fandezizou Messages postés 16 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 28 septembre 2006
4 nov. 2005 à 14:28
Salut à tous!!!
j'ai un peitit problème avec les nombres aléatoires


j'ai mis ça mais ça ne marche pas kek'1 aurait une idée.
j'ai bien mis srand au début et tout mais je ne trouve pas la cause de mon pb.


srand((unsigned) time(NULL))

D1=rand()%6 + 1;

merci d'avance.
0
Rejoignez-nous