aléatoire - C - Programmation
Marsh Posté le 16-04-2004 à 13:27:17
ce sujet a déjà été abordé.
En gros il y a 2 approches.
- Tu tires un No, si il n'a pas été déjà tiré, tu l'enregistre s et tu continue jusqu'à ce que tout a été tiré.
Problème, plus on avance, moins on a de chance de tirer les derniers numéros pas encore tirés. De plus, il faut parcourir vecteur etc...
La meilleure solution.
Tu construit un vecteur dans l'ordre
v[0]=1 ;
v[1]=2 ;
...
v[14]=5 ;
Maintenant, tu tires au hasard 2 indices de tableaux. Tu inverses les valeurs contenues à ces indics. Tu répète l'opération un bon nombre de fois.
Ton vecteur est mélangé
Marsh Posté le 16-04-2004 à 13:29:39
Tu génères un nombre pseudo aléatoire entre 0 et 1, tu multiplies par 15 et tu choppes la partie entière et tu l'associe au nombre non encore sorti le plus proche jusqu'a ce que tu aies eu les 15.
Marsh Posté le 16-04-2004 à 13:38:50
Tu crées un tableau a 16 cases. Chaque case est initialisée a 0 sauf la 16e a -1 (tes valeurs a ranger sont entre 1 et 15)
Au depart, ta case courante est la premiere.
Au depart i vaut 15.
On a un algo en boucle decroissante:
Pour mettre la valeur i dans une case, tu procedes ainsi:
Tu recuperes une valeur aléatoire: int rand(void) (ou autre generateur d'entier aleatoire). Tu recuperes le reste r de la division valeur aleatoire par i, et tu avances de r+1 cases inoccupées (test si le contenu est a 0. S'il est a -1, tu reviens a la premiere case).
Tu ranges la valeur i dans la case.
Tu decrementes i. s'il est a 0, c'est fini, sinon on repart pour un tour de boucle.
Bon, c'est le premier truc qui m'est passe par la tete, il y a sans doute moyen d'optimiser.
A+,
Marsh Posté le 16-04-2004 à 13:47:31
Fermé pour cause de double emploi newbie style http://forum.hardware.fr/hardwaref [...] 9573-1.htm
A+,
Marsh Posté le 16-04-2004 à 13:21:30
comment puis je faire pour choisir des nombres entre 1 et 15 sachant que je ve pas qu cela se répete et que en plus je ve que tous les nombres soit pri!
c pour remplir un tableau de facon aléatoire...
je ne sais pas si c tres asstucieux..
merci beaucoup de votre aide