Générer une série de nombre aléatoire tous différents
Résolu
kevdaig
Messages postés
16
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 -
A voir également:
- Générer une série de nombre aléatoire tous différents
- Nombre de jours entre deux dates excel - Guide
- Télécharger idm gratuitement sans numéro de série - Télécharger - Téléchargement & Transfert
- Nombre facile - Télécharger - Outils professionnels
- Numéro de série idm - Forum Téléchargement
- Série spéciale just livebox fibre - Accueil - Box & Connexion Internet
2 réponses
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
'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.