Fonction aléatoire + boucle, ne pas generer deux fois le meme no
Fermé
Lautomaticien
Messages postés
1
Date d'inscription
lundi 7 avril 2014
Statut
Membre
Dernière intervention
7 avril 2014
-
7 avril 2014 à 13:01
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 8 avril 2014 à 13:28
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 8 avril 2014 à 13:28
A voir également:
- Fonction aléatoire + boucle, ne pas generer deux fois le meme no
- Fonction si et - Guide
- Deux compte whatsapp sur le même téléphone samsung - Guide
- Deux ecran pc - Guide
- Un ecouteur sur deux marche ✓ - Forum Audio
- No such file or directory ✓ - Forum Linux / Unix
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
7 avril 2014 à 23:28
7 avril 2014 à 23:28
Bonjour,
Tout d'abord, le srand(time(NULL)) ne doit être appliqué qu'une fois. Donc, il vaut mieux le mettre en dehors du while.
Pour ne tirer que des nombres différents, tu peux remplir un tableau de 100 cases contenant les nombres de 0 à 100.
Ensuite, tu fais une boucle pour mélanger le tableau. Tu génères deux indices aléatoires, tu mélanges les indices et tu boucles.
A la fin, tu affiches les éléments du tableau pour obtenir les nombres aléatoires sans doublon.
Cdlt,
Tout d'abord, le srand(time(NULL)) ne doit être appliqué qu'une fois. Donc, il vaut mieux le mettre en dehors du while.
Pour ne tirer que des nombres différents, tu peux remplir un tableau de 100 cases contenant les nombres de 0 à 100.
Ensuite, tu fais une boucle pour mélanger le tableau. Tu génères deux indices aléatoires, tu mélanges les indices et tu boucles.
A la fin, tu affiches les éléments du tableau pour obtenir les nombres aléatoires sans doublon.
Cdlt,
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 8/04/2014 à 13:35
Modifié par [Dal] le 8/04/2014 à 13:35
Salut Lautomaticien,
Tu peux remplir un tableau de 100 cases comme le propose fiddy, contenant des nombres de 1 à 100 (et non de 0 à 100), et dont les index seront donc de 0 à 99.
Ensuite, tu peux utiliser cet algorithme, qui, par rapport à la suggestion précédente, permet de systématiser les permutations, pour être sûr d'avoir un tableau bien mélangé, et de savoir quand t'arrêter par la même occasion :
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
Je cite, dans sa version "élaborée" :
Il faut développer une fonction qui renvoie un nombre aléatoire entre deux autres (random integer with i <= j < n) supérieur ou égal à la borne inférieure et strictement inférieur à la borne supérieure.
Dal
Tu peux remplir un tableau de 100 cases comme le propose fiddy, contenant des nombres de 1 à 100 (et non de 0 à 100), et dont les index seront donc de 0 à 99.
Ensuite, tu peux utiliser cet algorithme, qui, par rapport à la suggestion précédente, permet de systématiser les permutations, pour être sûr d'avoir un tableau bien mélangé, et de savoir quand t'arrêter par la même occasion :
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
Je cite, dans sa version "élaborée" :
To shuffle an array a of n elements (indices 0..n-1):
for i from 0 to n - 1 do
j = random integer with i <= j < n
exchange a[j] and a[i]
Il faut développer une fonction qui renvoie un nombre aléatoire entre deux autres (random integer with i <= j < n) supérieur ou égal à la borne inférieure et strictement inférieur à la borne supérieure.
Dal