Aide - Recherche - Membres - Calendrier
Version complète : programmer un random
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
Chris_34
Salut,

J'ai besoin de programmer un random (pour sortir aléatoirement un nombre) mais avec MIDP1 ça n'existe pas... icon_cry.gif Je ne trouve pas d'idée pour le faire autrement.
Merci de m'en soumettre une sourire.gif
critonsgate
créer une fonction avec l'horloge du palm.... sourire.gif
Chris_34
En fait je n'avais pas vu qu'il existait une classe Random. Le problème c'est qu'elle génère des grands nombres. Je l'ai ai divisé et pris le reste pour obtenir ce qui m'arrangeait. Mais ça rame... :?
WiLL
CITATION(Chris_34)
En fait je n'avais pas vu qu'il existait une classe Random. Le problème c'est qu'elle génère des grands nombres. Je l'ai ai divisé et pris le reste pour obtenir ce qui m'arrangeait. Mais ça rame... :?

Un petit modulo ?
Chris_34
oui, j'ai fait un modulo du nombre qui m'intéresse. Mais en fait, dès qu'un nombre est tiré au sort, je ne veut plus qu'il le soit. Alors à chaque random je regarde si c'est le cas (ou non) et le random s'effectue de nouveau si le nombre à déjà été tiré. Du coup, moins il reste de nombre à tirer et plus ça rame.
WiLL
Alors pour toi je ne sais pas si ça peut t'aider mais j'ai eu a faire ça en PHP et en fait j'ai trouver un truc très simple, le shuffle

En fait tu crées un tableau que tu remplis comme tu veux et tu le "shuffle" ensuite tu prends tes éléments dans l'ordre et "oh magie !" ils sont dans le désordre donc tu parcours ton tableau jusqu'au bout et t'as pas de risques de rretomber sur un chiffre que tu as déjà utilisé.
Chris_34
icon_lol2.gif
Ca m'a l'air d'être une exellente idée. Maintenant il faut que je trouve comment on mélange un tableau et si c'est plus rapide que le random (ça m'en a tout l'air)
Merci pour l'astuce
WiLL
CITATION(Chris_34)
icon_lol2.gif  
Ca m'a l'air d'être une exellente idée. Maintenant il faut que je trouve comment on mélange un tableau et si c'est plus rapide que le random (ça m'en a tout l'air)
Merci pour l'astuce

De rien ...
j'y crois pas j'ai donné un semblant de réponse qui a été utile à un developpeur Palm .... à moi le développement Palm professionnel !!! icon_biggrin.gif
Chris_34
Le shuffle n'a pas l'air d'exister tel quel. Il faut que je réfléchisse à un algo (pas trop lourd) qui mélange mon tableau. La partie n'est pas encore gagnée... anim_wink.gif
Eddy
CITATION(Chris_34)
Le shuffle n'a pas l'air d'exister tel quel. Il faut que je réfléchisse à un algo (pas trop lourd) qui mélange mon tableau. La partie n'est pas encore gagnée... anim_wink.gif


en utilisant une fonction 'random' ?

'fin me semble que faire un shuffle d'un tableau ou faire une fonction random c'est exactement la meme chose, non ? (genérer une sequence aleatoire)

Eddy

(bon, ok j'apporte pas de solution, donc je sors :P)
Chris_34
Non, c'est pas pareil car je ne veux pas que deux nombres réapparaissent. Donc vers la fin du tirage le random se reffectue jusqu'à ce qu'il trouve le bon nombre. Alors que mélanger le tableau au préalable, cela permet d'avoir juste à le parcourir. Sinon, on m'a soumis l'idée du tirage de boule : à chaque fois que je tire un nombre, je l'enlève mais cela veut dire que je refait un tableau avec une case de moins --> j'ai peur que ce soit un peut gourmand.
Chris_34
Qui aurait un algo (pas trop gourmand) pour mélanger un tableau ? icon_bla.gif
Patrice
Je ne suis pas certain que le "mélange" de tableau soit une bonne solution car il y aura un problème à déterminer à partir de quel seuil tu peux considérer que l'ordre est devenu aléatoire.

Je te propose une autre idée, relativement simple à implémenter et qui ne doit pas être trop gourmande en temps de traitement :
- Tu crées un tableau des n valeurs possibles, trié (de 1 à n, pour l'exemple).
- Tu fais un tirage aléatoire (avec random) entre 1 et n : tu tires p1
- Tu prend la valeur du p1ème élément dans le tableau
- Dans le tableau, tu échanges le dernier élément (n) avec p1
- Au tirage suivant, tu tires p2 entre 1 et n-1
- Tu prend la valeur du p2ème élément dans le tableau : tu as enlevé p1, tu es sur de ne pas le retirer
- Tu échanges n-1 et p2 dans le tableau
- Et tu recommences (en diminuant à chaque fois le nombre d'éléments restants).

Il resterait à prouver que les tirages sont équi-probables, si tu veux un véritable tirage aléatoire (je pense que cela suppose que n soit très grand, pour commencer) mais, ça doit déjà être un bon début anim_wink.gif
WiLL
CITATION(Patrice)
Je ne suis pas certain que le "mélange" de tableau soit une bonne solution car il y aura un problème à déterminer à partir de quel seuil tu peux considérer que l'ordre est devenu aléatoire.

Je te propose une autre idée, relativement simple à implémenter et qui ne doit pas être trop gourmande en temps de traitement :
- Tu crées un tableau des n valeurs possibles, trié (de 1 à n, pour l'exemple).
- Tu fais un tirage aléatoire (avec random) entre 1 et n : tu tires p1
- Tu prend la valeur du p1ème élément dans le tableau
- Dans le tableau, tu échanges le dernier élément (n) avec p1
- Au tirage suivant, tu tires p2 entre 1 et n-1
- Tu prend la valeur du p2ème élément dans le tableau : tu as enlevé p1, tu es sur de ne pas le retirer
- Tu échanges n-1 et p2 dans le tableau
- Et tu recommences (en diminuant à chaque fois le nombre d'éléments restants).

Il resterait à prouver que les tirages sont équi-probables, si tu veux un véritable tirage aléatoire (je pense que cela suppose que n soit très grand, pour commencer) mais, ça doit déjà être un bon début anim_wink.gif

J'aurais proposé le même genre de solution ...
Chris_34
Mon n ne sera pas très grand (~15), mais de toute façon ce qui compte c'est qu'à chaque fois mon tableau ne sera pas toujours trié dans le même ordre.
J'avais pensé sinon a remplir le tableau aléatoirement, et à prendre la case d'à côté(ou encore à côté...) quand la case choisie était déjà pleine. Mais cette idée me parait bien moins bonne.
Merci pour votre aide à tous, c'est sympa de trouver des forums comme ça. icon_biggrin.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.