aléatoire

aléatoire - C - Programmation

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

Reply

Marsh Posté le 16-04-2004 à 13:21:30   

Reply

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é
 

Reply

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.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

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+,

Reply

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+,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed