Fonction aléatoire + boucle, ne pas generer deux fois le meme no
Lautomaticien
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerais en savoir plus sur la fonction srand, en fait j'aimerais qu'elle génere a chaque fois un chiffre different, sans jamais mettre deux fois le meme.
par exemple, cette fonction affichera 100 nombre aléatoire mais surement au moins deux fois le meme, comment faire pour qu'elle affiche les nombre de 1 à 100, une seule fois chacun et dans un ordre aléatoire???
do
{
srand(time(NULL));
x=(rand()%100);
cpt++
}while cpt (!=101)
J'aimerais en savoir plus sur la fonction srand, en fait j'aimerais qu'elle génere a chaque fois un chiffre different, sans jamais mettre deux fois le meme.
par exemple, cette fonction affichera 100 nombre aléatoire mais surement au moins deux fois le meme, comment faire pour qu'elle affiche les nombre de 1 à 100, une seule fois chacun et dans un ordre aléatoire???
do
{
srand(time(NULL));
x=(rand()%100);
cpt++
}while cpt (!=101)
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
- Comment faire deux colonnes sur word - Guide
- Nombre de jours entre deux dates excel - Guide
2 réponses
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,
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