Générer une série de nombre aléatoire tous différents
Résolu/Fermé
kevdaig
Messages postés
16
Date d'inscription
dimanche 31 août 2014
Statut
Membre
Dernière intervention
22 février 2016
-
Modifié par Whismeril le 30/01/2015 à 18:52
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 3 févr. 2015 à 12:54
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 3 févr. 2015 à 12:54
A voir également:
- Générer une série de nombre aléatoire tous différents
- Site de téléchargement de série indienne en français - Forum Cinéma / Télé
- Nombre facile - Télécharger - Outils professionnels
- En raison d'un nombre important d'échec de connexion snapchat - Forum Snapchat
- Canal + serie free - Guide
- Localiser macbook avec numéro de série - Forum MacOS
2 réponses
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
Modifié par [Dal] le 3/02/2015 à 12:55
Modifié par [Dal] le 3/02/2015 à 12:55
Salut kevdaig,
gravgun a très bien expliqué la cause de ton problème : il faut sortir
Je voulais juste attirer ton attention sur le fait que je ne crois pas que ton programme fasse en sorte qu'il "génère des nombres uniques", ou "tous différents les un des autres" dans le contexte d'un tirage de coordonnées.
Si le but est de vérifier que le programme ne génère pas deux fois les mêmes coordonnées x et y localisant l'emplacement d'un certain nombre de "mines" dans un espace à deux dimensions, il faudrait à chaque tentative de tirage, vérifier qu'aucun de tous les tirages précédents ne correspond au nouveau tirage (pas seulement celui qui précède).
Comme c'est assez lourd, et que tu peux avoir à faire ce type de vérifications souvent dans ton code, tu peux ruser en organisant tes données différemment.
Un moyen simple, mais plus consommateur de mémoire, consiste à
- créer un tableau à deux dimensions, dont les dimensions correspondent au terrain à miner,
- à l'initialiser (à zéro par exemple),
- à mettre une valeur aux coordonnées correspondant au tirage représentant une mine, à moins que cet emplacement ne soit pas libre, et à répéter le tirage tant que l'emplacement désigné n'est pas libre
La vérification de ce qu'il existe ou non une mine à des coordonnées données devient triviale, il suffit d'accéder au contenu du tableau.
Il se peut aussi que je n'aie rien compris à ce que tu veux faire car tes explications étaient assez elliptiques, dans ce cas ignore mon message :-D
Dal
gravgun a très bien expliqué la cause de ton problème : il faut sortir
srandde tes boucles et ne l'appeler qu'une fois avant tout appel à
rand.
Je voulais juste attirer ton attention sur le fait que je ne crois pas que ton programme fasse en sorte qu'il "génère des nombres uniques", ou "tous différents les un des autres" dans le contexte d'un tirage de coordonnées.
Si le but est de vérifier que le programme ne génère pas deux fois les mêmes coordonnées x et y localisant l'emplacement d'un certain nombre de "mines" dans un espace à deux dimensions, il faudrait à chaque tentative de tirage, vérifier qu'aucun de tous les tirages précédents ne correspond au nouveau tirage (pas seulement celui qui précède).
Comme c'est assez lourd, et que tu peux avoir à faire ce type de vérifications souvent dans ton code, tu peux ruser en organisant tes données différemment.
Un moyen simple, mais plus consommateur de mémoire, consiste à
- créer un tableau à deux dimensions, dont les dimensions correspondent au terrain à miner,
- à l'initialiser (à zéro par exemple),
- à mettre une valeur aux coordonnées correspondant au tirage représentant une mine, à moins que cet emplacement ne soit pas libre, et à répéter le tirage tant que l'emplacement désigné n'est pas libre
La vérification de ce qu'il existe ou non une mine à des coordonnées données devient triviale, il suffit d'accéder au contenu du tableau.
Il se peut aussi que je n'aie rien compris à ce que tu veux faire car tes explications étaient assez elliptiques, dans ce cas ignore mon message :-D
Dal
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 226
31 janv. 2015 à 20:32
31 janv. 2015 à 20:32
'lut, ils sont tous identiques car tu rappelles
De manière générale, avec un générateur de nombre pseudo-aléatoire, on ne donne de seed qu'une seule fois, au début du programme, jamais après.
srandà chaque itération, et comme générer un nombre aléatoire prend très peu de temps (moins d'1 seconde), la valeur fournie a
srandest toujours la même. Donc vire moi ça, et mets en un seul au début.
De manière générale, avec un générateur de nombre pseudo-aléatoire, on ne donne de seed qu'une seule fois, au début du programme, jamais après.
kevdaig
Messages postés
16
Date d'inscription
dimanche 31 août 2014
Statut
Membre
Dernière intervention
22 février 2016
3 févr. 2015 à 00:43
3 févr. 2015 à 00:43
Tu as tout à fait raison! Merci