Generer un nombre aléatoire à l'exception d'un ensemble d'entiers ? - C++ - Programmation
Marsh Posté le 31-08-2004 à 11:30:04
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
Marsh Posté le 31-08-2004 à 11:33:47
Mici je regarde, j'y avait pas pensé mais ca a l'air tout bete mais bien pensé
Marsh Posté le 02-09-2004 à 16:38:47
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 :
|
Et j'aimerais pouvoir melanger les éléments de la première dimension.
Donc je pensais faire un truc tel que :
Code :
|
Mais ca evidemment c'est pas possible en c++... 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é...
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
Marsh Posté le 02-09-2004 à 17:27:02
Jesus Army a écrit :
|
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 :
|
Marsh Posté le 02-09-2004 à 17:37:21
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
Marsh Posté le 03-09-2004 à 10:49:31
Juste une question
Pourquoi
Code :
|
et non pas
Code :
|
tout simplement ?
Marsh Posté le 03-09-2004 à 10:50:51
parce que (putain faut vraiment que je remette mon ancienne signature ?)
Marsh Posté le 03-09-2004 à 10:55:10
ayan
Marsh Posté le 03-09-2004 à 11:11:31
signature pas à jour, site perso dans les choux, question pas futé : tu cumules sale matrisk male
Marsh Posté le 03-09-2004 à 11:22:45
Beurk
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.
Pis j'en ai pas d'autre à mettre. Et ya pas si longtemps yavait encore la page de fin de GF...
(Pléonamse ton insulte au passage, sache qu'un matrisk c'est forcement un male )
Marsh Posté le 03-09-2004 à 11:30:38
l'important c'est pas que tu en sois convaincu, c'est que tes chefs s'en apercoivent pas
C'était dans le sens compagnon male de matrisk
Marsh Posté le 03-09-2004 à 11:38:41
Le projet avance et je bosse quand meme donc je suppute que c'est bon...
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...
Et alors c'est quoi cette signature ? Tu nous fait le coup classique du geek solitaire et depressif ?
Marsh Posté le 03-09-2004 à 11:48:54
Le projet avance mais c pas forcément grace à toi
(tu fais koi komme stage/projet ?)
Je le suis, dépressif par confort, solitaire par obligation
Marsh Posté le 03-09-2004 à 11:52:15
Jesus Army a écrit : Juste une question
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.
Marsh Posté le 03-09-2004 à 12:07:57
Lam's a écrit : Effectivement, ça va plus vite. |
D'accord, je vais faire comme ca alors, je pense que ca devrait malgré tout suffire pour ce que je dois en faire.
Et je me coucherais moins bete ce soir
Marsh Posté le 03-09-2004 à 12:09:08
Dion a écrit : Le projet avance mais c pas forcément grace à toi |
Si forcement parceque je suis tout seul sur le projet... (C'est un jeu pour "casual gamers" )
Ca c'est du confort la depression, et la solitude fallait pas prendre cettre branche comme etudes
Marsh Posté le 03-09-2004 à 12:15:24
oui, je déprime comme ça je me pose pas de questions
Ca vient même pas de mes études
Marsh Posté le 03-09-2004 à 12:19:08
"Solitude par obligation" ca serait pitètre pas le cas si t'avais fait une fac de lettres non ?
Marsh Posté le 03-09-2004 à 13:20:45
Obligation professionnel : j'ai pas le tps de m'occuper d'une femelle
Pkoi tu veux exclure des entiers au fait ?
Marsh Posté le 03-09-2004 à 13:38:21
A ce point occupé ?
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.
Marsh Posté le 03-09-2004 à 13:40:11
j'ai autre chose à foutre de mes week end
Et donc ?
Marsh Posté le 03-09-2004 à 13:48:44
Faut faire attention à pas trop se geekationner quand meme...
Et donc quoi ?
Marsh Posté le 03-09-2004 à 13:54:36
Je vois tjs pas l'interet
Marsh Posté le 03-09-2004 à 14:01:21
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...
Marsh Posté le 03-09-2004 à 14:03:01
J'avais pas lu tout le premier post faut dire
Marsh Posté le 03-09-2004 à 14:14:56
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
Puis je travaille moi
Marsh Posté le 03-09-2004 à 14:49:47
Tant que je reste sur la meme idée ou explication je change pas de paragraphe...
T'es en stage ? Boulot d'été ? Boulot à mi temps ?
Marsh Posté le 03-09-2004 à 15:26:53
tu as des idées maintenant ?
stage, 6 mois 1juiller 31 décembre
Marsh Posté le 03-09-2004 à 15:46:16
Ué plein !
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...
Marsh Posté le 03-09-2004 à 20:51:51
ouep, mais pas de vacances
T'es pas en derniere annee sale loque ?
Marsh Posté le 06-09-2004 à 10:37:10
Uip d'ici deux semaines.
PAr contre pfff, j'ai la flemme rien que de penser à faire mon rapport de stage...
Marsh Posté le 06-09-2004 à 10:53:02
t'as un stage en avant dernière année ? elle est bizarre ton ecole
Marsh Posté le 06-09-2004 à 11:03:36
J'ai un stage tous les ans (Donc les grandes vacances je connais plus... )
Marsh Posté le 06-09-2004 à 13:46:31
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.
Marsh Posté le 31-08-2004 à 11:28:02
Bonjour.
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