Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Tirage aléatoire sans remise


Vieljeux Invité

Tirage aléatoire sans remise

Posté le 30/09/2015 14:25

Bonjours tout le monde !

C'etait pour savoir comment faire un programme avec un tirage aléatoire sans remise avec une 35+ ?
J'arrive à faire le tirage mais j'aimerais bien que une fois le nombre tombé il ne puisse plus ressortir. J'ai une base de 20 nombres et j'ai fait un programme de façon à ce que j'obtienne 10 numéros de ma base.
Mais est il possible de ne pas avoir 2 fois le même ?

Merci de votre aide camarade


Fife86 Hors ligne Membre Points: 839 Défis: 0 Message

Citer : Posté le 30/09/2015 14:59 | #


Tu peu créer une liste qui stocke l'ensemble des nombres que tu a créer ainsi qu'une variable pour le nombre de nombres stockés dans la liste.

Tu tire un nombre aléatoirement puis tu réalise une boucle for qui prend comme paramètre la variable précédemment créer.

Dans la boucle for tu réalise un test entre le nombre tiré et le nombre de la liste. Si ils sont égaux alors tu retire aléatoirement un nouveau nombre. Sinon tu sera sur que le nombre tiré n'a jamais été tiré.
It's Show Time !!!
Mes Jeux :
- Street Fighter : Pour les accrocs du free-fight.
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".


< Le recoin du C-Engine >


Vieljeux Invité

Citer : Posté le 30/09/2015 15:58 | #


D'accord j'essaye ça tout de suite ! Merci
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 30/09/2015 16:25 | #


Le plus simple (et optimisé), c'est de créer une liste qui contient tout tes éléments. Ensuite tu mélanges la liste un peu plus de 2*n (n nombre d'éléments) pour être sûr que ce soit bien mélangé, puis tu tire les x premiers termes.
Compléxité linéaire, tu peux tirer 54 cartes sans remise en moins de 0.5s
Finir est souvent bien plus difficile que commencer. — Jack Beauregard


Vieljeux Invité

Citer : Posté le 30/09/2015 16:57 | #


Et comment faire pour mélanger une liste ?
Ti.du.du39 Hors ligne Membre de CreativeCalc Points: 1290 Défis: 0 Message

Citer : Posté le 30/09/2015 17:33 | #



For 1->X to 2^(Dim List 1)
Int (Dim List 1)Ran+1->A
Int (Dim List 1)Ran+1->B
List 1[A]->C
List 1[B]->List 1[A]
C->List 1[B]
Next


C'est comme ça que je ferai
" L'Homme prouve son intelligence en innovant dans la connerie "
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 01/10/2015 09:53 | #


Exactement

Ajouté le 01/10/2015 à 19:17 :
Je viens de remarquer le "To 2^(Dim List 1)". Tu peux optimiser sur les grandes listes en faisant du "To k*Dim List 1" où k est un nombre au moins supérieur à un. Plus il est grand, plus c'est lent mais plus c'est aléatoire.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Fabcvlr Hors ligne Membre Points: 2275 Défis: 41 Message

Citer : Posté le 02/10/2015 09:53 | #


J'en parle dans mon topic sur un future jeu, ici
mon mélangeur est en fichier joint dans ma première réponse au sujet.
L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !


Vieljeux Invité

Citer : Posté le 05/10/2015 19:30 | #


Merci à tous pour vos réponses !


Vieljeux Invité

Citer : Posté le 06/10/2015 11:14 | #


Juste une petite précision, peut-on juste prendre quelques termes de la liste ?
Par exemple, on a ABCDEF la calculette fait le mélange (comme avec le programme de Fabcvlr) mais nous affiche juste ECA par exemple et non toutes les lettres mélangées ?
Ti.du.du39 Hors ligne Membre de CreativeCalc Points: 1290 Défis: 0 Message

Citer : Posté le 06/10/2015 12:39 | #


oui, il y a une fonction pour sa :
StrMid([gray]<chaine de caractere>[/gray] , [gray]< depart du curseur >[/gray], [gray]<nbr de caractère après le curseur >[/gray]

Je te renvoie sur ces liens :
fonction
tuto 1
tuto 2

Et pour ton code, cela donne un truc du genre :
ABCDEF->Str 1
""->Str 2
For 1->X to [blue]3[/blue]
Int (StrLen Str 1)Ran+1→A
Str 2+StrMid(Str 1,A, 1)-> Str 2
Next

Ce programme te dire 3 lettres aléatoire de la Str 1 et stocke ça en Str 2
" L'Homme prouve son intelligence en innovant dans la connerie "

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 106 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd