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 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 8 avril 2014 à 13:28
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 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
- No such file or directory ✓ - Forum Linux / Unix
- Dns probe finished no internet ✓ - Forum DNS
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
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
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
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