Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1214 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Generer un nombre aléatoire à l'exception d'un ensemble d'entiers ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Generer un nombre aléatoire à l'exception d'un ensemble d'entiers ?

n°837622
Jesus Army
Allez voir là bas si j'y suis
Posté le 31-08-2004 à 11:28:02  profilanswer
 

Bonjour. :hello:
 
La recherche étant désactivée, je n'ai pas trouvé ce que je cherchait via google, alors je pose la question car je pense qu'appliquée à un entier cela ne doit pas être insurmontable... :)
 
Donc ce que je souhaiterais faire est de pouvoir disposer d'un ensemble d'entiers. (Donc des entiers sans doublons, auxquel je peux en rajouter, et dont je peux extraire ces entiers ci possible en ordre croissant.)
 
Grace à cet ensemble, je souhaiterais generer un nombre aléatoire entre deux bornes en excluant les éléments de cet ensemble de facon à ce qu'un nombre aléatoire donné ne tombe jamais deux fois. Et aussi qu'ensuite je puisse sauvegarder toutes les valeurs deja tombées afin qu'elles ne retombe pas de nouveau.
 
Je pense qu'on peut faire ca simplement via un tableau et quelques méthodes à l'aide de boucles scannant tout à chaque accès, mais comme il s'agit d'implementer ca dans un jeu, j'aimerais bien que ce soit rapide et que ca ne mette pas trois plombes afin de me trouver un entier qui n'est pas deja tombé... (Car la solution la plus simple serait de stocker ces entiers dans un tableau puis de generer les nombres aléatoires. De parcourir l'ensemble du tableau pour verifier si ce nombre et présent,(evenutllement on pourrait le trier + accès par recherche dichotomique) et s'il l'est de generer un autre nombre et ainsi de suite jusqu'à en avoir un OK. Seulement j'ai un peut peur qu'une fois qu'il n'y ait plus qu'une vingtaine de nombres de tester la fonction mette trois plombe à les trouver... :/) Ou alors je fait un bete tableau de bouléens correspondant au nombre de valzurs à trouver et j'affecte true si la valeur est deja tombée et ne dois plus l'etre, mais on aura surement le meme problème vers la fin et ca me parait pas très elegant ni performant... :/
 
Donc je pense qu'il y a une melleire solution bien plus efficace, et que commencer à coder un truc comme expliqué ci dessus risque d'être une véritable perte de temps... :/
 
Si vous avez des idées je suis preneur. :)
Mercÿte :jap:

mood
Publicité
Posté le 31-08-2004 à 11:28:02  profilanswer
 

n°837628
Taz
bisounours-codeur
Posté le 31-08-2004 à 11:30:04  profilanswer
 

tu prends ta séquence, et tu la mélanges, tu sors les éléments un par un. quand t'arrives au dernier, tu remélanges http://sgi.com/tech/stl/random_shuffle.html

n°837635
Jesus Army
Allez voir là bas si j'y suis
Posté le 31-08-2004 à 11:33:47  profilanswer
 

Mici je regarde, j'y avait pas pensé mais ca a l'air tout bete mais bien pensé :jap:

n°840183
Jesus Army
Allez voir là bas si j'y suis
Posté le 02-09-2004 à 16:38:47  profilanswer
 

:hello:
 
J'ai un peu de mal, je m'emmèle un peu les pinceaux avec le passage des paramètres au random shuffle... :/
 
En fait j'ai un tableau à deux dimension comme ceci :

Code :
  1. int m_iEnigSeq[NB_ENIG_MAX][NB_ENIG_CATS - 1];


Et j'aimerais pouvoir melanger les éléments de la première dimension.
 
Donc je pensais faire un truc tel que :

Code :
  1. for(int i = 0; i < (NB_ENIG_CATS - 1); i++)
  2.    std::random_shuffle(m_iEnigSeq[][i], m_iEnigSeq[][i] + iEnigSeqMax[i]);


Mais ca evidemment c'est pas possible en c++... :ange: Donner les indices [0][i] n'est pas possible non plus, et passer l'adresse de [0][i] fait travailler sur les valeurs des adresses, donc c'est pas tout à fait le but recherché... :ange:
 
En inversant les dimensions et utilisant m_iEnigSeq[i] ca marcherait pitètre, mais ca ne m'arrange pas vraiment de faire ca... :/ Je pense que la solution doit être toute bete mais j'ai beau parcourir les site parlant de ca, ils utilisent tous la classe vector quasiment... :(
 
Un ptit coup de pouce serait le bienvenu :)
Mercÿte :jap:


Message édité par Jesus Army le 02-09-2004 à 16:39:50
n°840246
Lam's
Profil: bas.
Posté le 02-09-2004 à 17:27:02  profilanswer
 

Jesus Army a écrit :

:hello:
 
Donc je pensais faire un truc tel que :

Code :
  1. for(int i = 0; i < (NB_ENIG_CATS - 1); i++)
  2.    std::random_shuffle(m_iEnigSeq[][i], m_iEnigSeq[][i] + iEnigSeqMax[i]);


 


 
Si tu n'y arrives pas, ne te casse pas la tête avec les algos STL alors. (mais je pense que tu devrais quand même essayer d'utiliser vector dans l'absolu)..
 

Code :
  1. for(int i = 0; i < (NB_ENIG_CATS - 1); i++)
  2.      for (int j=0; j<NB_ENIG_MAX; ++j)
  3.        {
  4.           int pos = rand()*NB_ENIG_MAX/RAND_MAX;
  5.           // Et tu échanges simplement la valeur en position "pos" avec
  6.           // la valeur en position j.
  7.           int swap_value = m_iEnigSeq[j][i];
  8.           m_iEnigSeq[j][i] = m_iEnigSeq[pos][i];
  9.           m_iEnigSeq[pos][i] = swap _value;
  10.         }


n°840253
Jesus Army
Allez voir là bas si j'y suis
Posté le 02-09-2004 à 17:37:21  profilanswer
 

Oui il est vrai que je peux aussi melanger le tout à la mimine, je vais faire ca je pense en attendant de trouver la solution avec random_shuffle(). Merci :jap:

n°840847
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 10:49:31  profilanswer
 

Juste une question :ange:
 
Pourquoi

Code :
  1. rand()*NB_ENIG_MAX/RAND_MAX;


et non pas

Code :
  1. rand()%NB_ENIG_MAX;

tout simplement ? :)


Message édité par Jesus Army le 03-09-2004 à 10:49:57
n°840850
Taz
bisounours-codeur
Posté le 03-09-2004 à 10:50:51  profilanswer
 

parce que (putain faut vraiment que je remette mon ancienne signature ?)

n°840857
Dion
Acceuil
Posté le 03-09-2004 à 10:55:10  profilanswer
 

ayan :O


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°840864
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 10:59:29  profilanswer
 

Tout ca [:dawak]
 
(tiens un gay [:cupra])

mood
Publicité
Posté le 03-09-2004 à 10:59:29  profilanswer
 

n°840875
Dion
Acceuil
Posté le 03-09-2004 à 11:11:31  profilanswer
 

signature pas à jour, site perso dans les choux, question pas futé : tu cumules sale matrisk male


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°840888
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 11:22:45  profilanswer
 

Beurk :vomi:
 
Rien mettre à jour c'est ma facon à moi d'avoir l'esprit tranquile et de ne pas me dire que je passe mon temps sur hfr au boulot. [:cupra]
 
Pis j'en ai pas d'autre à mettre. :D Et ya pas si longtemps yavait encore la page de fin de GF... :D
 
(Pléonamse ton insulte au passage, sache qu'un matrisk c'est forcement un male :na: [:tinostar])

n°840895
Dion
Acceuil
Posté le 03-09-2004 à 11:30:38  profilanswer
 

l'important c'est pas que tu en sois convaincu, c'est que tes chefs s'en apercoivent pas :d
 
 
C'était dans le sens compagnon male de matrisk :o


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°840905
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 11:38:41  profilanswer
 

Le projet avance et je bosse quand meme donc je suppute que c'est bon... :D
 
Et heureusement que tu ne te rend pas compte de ce que tu dis parceque t'aurais deja tapissé la pièce où tu es de vomi... :/ :D
 
Et alors c'est quoi cette signature ? :o Tu nous fait le coup classique du geek solitaire et depressif ? [:tinostar]

n°840920
Dion
Acceuil
Posté le 03-09-2004 à 11:48:54  profilanswer
 

Le projet avance mais c pas forcément grace à toi :o
(tu fais koi komme stage/projet ?)
 
Je le suis, dépressif par confort, solitaire par obligation :d


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°840928
Lam's
Profil: bas.
Posté le 03-09-2004 à 11:52:15  profilanswer
 

Jesus Army a écrit :

Juste une question :ange:
 
Pourquoi

Code :
  1. rand()*NB_ENIG_MAX/RAND_MAX;


et non pas

Code :
  1. rand()%NB_ENIG_MAX;

tout simplement ? :)


 
Effectivement, ça va plus vite.  
 
Mais ça dépend des valeurs. Par exemple, si ENIG_MAX == 20, et RAND_MAX == 30, alors tu as 2 fois plus de chances d'avoir un nombre entre  
0 et 9 qu'entre 10 et 19. Enfin, tu vois le truc.
 
Ca me rappelle le vieux rand de je-ne-sais-plus-quel-compilo qui donnait tour à tour un nombre pair, puis impair. C'était pas super de faire un modulo pour obtenir un 0 ou un 1 :)
 
Bref, en théorie c'est mal, en pratique, on s'en tape.

n°840941
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 12:07:57  profilanswer
 

Lam's a écrit :

Effectivement, ça va plus vite.  
 
Mais ça dépend des valeurs. Par exemple, si ENIG_MAX == 20, et RAND_MAX == 30, alors tu as 2 fois plus de chances d'avoir un nombre entre  
0 et 9 qu'entre 10 et 19. Enfin, tu vois le truc.
 
Ca me rappelle le vieux rand de je-ne-sais-plus-quel-compilo qui donnait tour à tour un nombre pair, puis impair. C'était pas super de faire un modulo pour obtenir un 0 ou un 1 :)
 
Bref, en théorie c'est mal, en pratique, on s'en tape.


D'accord, je vais faire comme ca alors, je pense que ca devrait malgré tout suffire pour ce que je dois en faire. :jap:
 
Et je me coucherais moins bete ce soir :D :jap:

n°840943
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 12:09:08  profilanswer
 

Dion a écrit :

Le projet avance mais c pas forcément grace à toi :o
(tu fais koi komme stage/projet ?)
 
Je le suis, dépressif par confort, solitaire par obligation :d


Si forcement parceque je suis tout seul sur le projet... [:boidleau] (C'est un jeu pour "casual gamers" :D)
 
Ca c'est du confort la depression, et la solitude fallait pas prendre cettre branche comme etudes [:tinostar]


Message édité par Jesus Army le 03-09-2004 à 12:09:35
n°840945
Dion
Acceuil
Posté le 03-09-2004 à 12:15:24  profilanswer
 

oui, je déprime comme ça je me pose pas de questions :o
 
Ca vient même pas de mes études :D
 


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°840950
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 12:19:08  profilanswer
 

"Solitude par obligation" ca serait pitètre pas le cas si t'avais fait une fac de lettres non ? :whistle:

n°840999
Dion
Acceuil
Posté le 03-09-2004 à 13:20:45  profilanswer
 

Obligation professionnel : j'ai pas le tps de m'occuper d'une femelle :o
 
 
Pkoi tu veux exclure des entiers au fait ? :whistle:


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°841022
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 13:38:21  profilanswer
 

A ce point occupé ? :D :D
 
Sinon c'est parceque j'ai une serie d'enigmes (6000 de prévues normalement) que chaque joueur doit avoir une et une seule fois, sauf s'il les a deja toutes affichées. Normalement c'est bon, amarche. :)

n°841025
Dion
Acceuil
Posté le 03-09-2004 à 13:40:11  profilanswer
 

j'ai autre chose à foutre de mes week end :o
 
Et donc ?


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°841047
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 13:48:44  profilanswer
 

Faut faire attention à pas trop se geekationner quand meme... :D
 
Et donc quoi ? [:tinostar]

n°841061
Dion
Acceuil
Posté le 03-09-2004 à 13:54:36  profilanswer
 

Je vois tjs pas l'interet :o


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°841071
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 14:01:21  profilanswer
 

Beh de pouvoir piocher une enigme de manière aléatoire dans mon ptit fichier contenant toutes les enigmes, en sachant que pour ce joueur elle n'est pas encore sortie...

n°841073
Dion
Acceuil
Posté le 03-09-2004 à 14:03:01  profilanswer
 

J'avais pas lu tout le premier post faut dire [:itm]


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°841078
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 14:06:29  profilanswer
 

T'aime pas quand c'est trop long c'est ca ? [:boidleau]

n°841085
Dion
Acceuil
Posté le 03-09-2004 à 14:14:56  profilanswer
 

j'ai vu C++, comme j'en ai jamais fait j'ai laisser tomber
 
puis bon, tu fais un gros paragraphe tout pas lisible, beurk :o
 
Puis je travaille moi :o


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°841148
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 14:49:47  profilanswer
 

Tant que je reste sur la meme idée ou explication je change pas de paragraphe... [:spamafote] :D
 
T'es en stage ? Boulot d'été ? Boulot à mi temps ?

n°841187
Dion
Acceuil
Posté le 03-09-2004 à 15:26:53  profilanswer
 

tu as des idées maintenant ?
 
stage, 6 mois 1juiller 31 décembre


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°841211
Jesus Army
Allez voir là bas si j'y suis
Posté le 03-09-2004 à 15:46:16  profilanswer
 

Ué plein ! :p
 
Deja un stage de 6 mois ?
 
Je finis le miens dans 2 semaines moi, et après j'enchaine directement sur les cours... :/ Pas de vacances cette année... :'(


Message édité par Jesus Army le 03-09-2004 à 15:46:36
n°841513
Dion
Acceuil
Posté le 03-09-2004 à 20:51:51  profilanswer
 

ouep, mais pas de vacances :d
 
T'es pas en derniere annee sale loque ?

n°843117
Jesus Army
Allez voir là bas si j'y suis
Posté le 06-09-2004 à 10:37:10  profilanswer
 

Uip d'ici deux semaines. :D
 
PAr contre pfff, j'ai la flemme rien que de penser à faire mon rapport de stage... :/

n°843126
Dion
Acceuil
Posté le 06-09-2004 à 10:53:02  profilanswer
 

t'as un stage en avant dernière année ? elle est bizarre ton ecole :O


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°843136
Jesus Army
Allez voir là bas si j'y suis
Posté le 06-09-2004 à 11:03:36  profilanswer
 

J'ai un stage tous les ans [:sisicaivrai] (Donc les grandes vacances je connais plus... :'()

n°843309
fykman
Errare Humanum Est
Posté le 06-09-2004 à 13:46:31  profilanswer
 

Taz a écrit :

tu prends ta séquence, et tu la mélanges, tu sors les éléments un par un. quand t'arrives au dernier, tu remélanges http://sgi.com/tech/stl/random_shuffle.html


 
J'en profite pour poser une petite question sur le random_shuffle (desolé pour la polution de topik):
Comment on fait pour intialiser le tirage aleatoire de random_shuffle ?
je cherche un equivalent de srand en quelque sorte.
 
 

n°843409
Taz
bisounours-codeur
Posté le 06-09-2004 à 15:13:27  profilanswer
 

ben tu prends le 3ème argument de random_shuffle

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Generer un nombre aléatoire à l'exception d'un ensemble d'entiers ?

 

Sujets relatifs
générer du word ou rtfScript de redirection automatique et aléatoire
Exception et constructeur : Avis demandéNe récuperer qu'un nombre de caractères limité d'un champ varchar
generer automatiquement du HTML a partir de mon couple xml xsl[Perl] Nombre de jour entre 2 dates
[batch dos RESOLU] lire nombre dans fichier et l'exploiter pour calculObtenir le Nombre de collones sans la fonction num_fields
comment gégérer des chiffre aléatoireRequête d'analyse croisée en Access: "générer" des dates
Plus de sujets relatifs à : Generer un nombre aléatoire à l'exception d'un ensemble d'entiers ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR