Page 1 sur 1

Tiré un nombre aléatoire dans une liste

Publié : mar. 17/juil./2012 8:54
par dayvid
Salut, le titre n'est pas vraiment explicite mais je savais pas trop quoi mètre :oops:

Code : Tout sélectionner

; Programme réaliser par monsieur dieppedalle david le 16 juillet 2012
; Ce programme sert a piocher un nombre aléatoire dans une liste de nombre aléatoire crée précédemment

; Minimum.q = le nombre aléatoire minimum 
; Maximum.q = le nombre aléatoire maximum 
; Pas.q = sert pour incrémenté les nombre aléatoire générer grâce à ce pas entre le minimum et le maximum

; Explications:
; Ce programme sert a créé une liste de nombre aléatoire entre un minimum et un maximum suivent un pas.

; Imaginer un jeu de carte ou la carte la plus basse serais 2 et la carte la plus haute serais 10

; Je veux que les cartes soit d'un pas de 2 par 2, par exemple (2, 4, 6, 8, 10), je mets donc un minimum de 2 et un maximum de 10 avec un pas de 2
; Ensuite le jeu de carte est mélanger et on tire les carte jusqu'à ce qu'il en est plus !

; Les cartes seront donc tirées dans un ordre aléatoire (dû au mélange des cartes) donc ici 5 carte au totale !

; Pour commencer, il faut crée le jeu de carte, donc on met la commande CreeListeNombreAleatoire() avec un minimum qui dois se situer au-dessus de -1 (minimum 0)
; Ensuite on met le maximum, la limite est de 9223372036854775807, soit un quad, et un pas (step) pour crée la liste de nombre aléatoire à partir de X, tous les X, jusqu'à X.

; Pour finir on appelle la commande DistribuerNombreAleatoire(), pour donner successivement (si c'est mis par exemple dans une boucle) autant de fois qu'il y a de carte
; pour tirer les cartes aléatoire.

Procedure.q CreeListeNombreAleatoire(Minimum.q, Maximum.q, Pas.q)
  
  Global NewList NombreAleatoire.q()
  
  If Minimum.q => Maximum.q
    Minimum.q = Maximum.q - Pas.q
  EndIf
  
  If Minimum.q < 0
    Minimum.q = 0
  EndIf
  
  If Maximum.q < 0
    Maximum.q = 1
  EndIf
  
  If Maximum.q = 0 And Minimum.q = 0
    Minimum.q = 0
    Maximum.q = 1
  EndIf
  
  If Pas.q > Maximum.q - Minimum.q
    Pas.q = Maximum.q
  EndIf
  
  If Pas.q <= 0
    Pas.q = 1
  EndIf
  
  CreeListe.q = Minimum.q
  
  Repeat
    AddElement(NombreAleatoire.q())
    NombreAleatoire.q() = CreeListe.q
    CreeListe.q + Pas.q
  Until CreeListe.q > Maximum.q
  
EndProcedure

Procedure.q DistribuerNombreAleatoire()
  
  NombreElement.q = ListSize(NombreAleatoire.q())
  
  If NombreElement.q > 0
    
    Repeat
      ElementAleatoire.q = Random(NombreElement.q) - 1
    Until ElementAleatoire.q > -1 And ElementAleatoire.q <= NombreElement.q
    
    SelectElement(NombreAleatoire.q(), ElementAleatoire.q)
    NombreAleatoire.q = NombreAleatoire.q()
    DeleteElement(NombreAleatoire.q(), 1)
    
    ProcedureReturn NombreAleatoire.q
    
  Else
    ProcedureReturn -1
    
  EndIf
  
EndProcedure

CreeListeNombreAleatoire(0, 10, 1)

Repeat
  NombreAleatoire.q = DistribuerNombreAleatoire()
  Debug NombreAleatoire.q
Until NombreAleatoire.q = -1

Re: Tiré un nombre aléatoire dans une liste

Publié : mar. 17/juil./2012 10:32
par Ar-S

Code : Tout sélectionner

; 5 cartes avec un pas de 2 (2 4 6 8 10)

Global NbrCarte = 31

; -1- tu crées ton jeu de carte
NewList Paquet.i()
NewList jeu.i()

Debug "Création du jeu"
For Paquet = 0 To NbrCarte ; 32 cartes composées de cartes de valeur 2 4 6 8 10
  
  For c = 2 To 10 Step 2 ; On range la carte tirée dans le paquet
    AddElement(Paquet())
    Paquet() = c
  Next
  
Next
Debug "ok"
Debug ""

; -2- Tirage
Debug "Tirage aléatoire de 5 cartes"

For t = 0 To 4 ; On tire 5 cartes
  
  pioche = Random(NbrCarte)
  SelectElement(Paquet(),pioche)
  AddElement (jeu()) 
  jeu() = Paquet() ; On place la carte tirée dans notre jeu
  DeleteElement(Paquet()) ; et on la supprime du paquet
  NbrCarte - 1
  Debug jeu()
Next

Re: Tiré un nombre aléatoire dans une liste

Publié : mar. 17/juil./2012 10:50
par TazNormand
@Dayvid : Intérêt de ton "post" ?

Pose-toi quelques questions avant de mettre tes messages :
- Est-ce une demande d'aide ?
==> Oui, alors je poste dans la section "Débutants" (je pense que tu es encore Débutant)

==> NON, alors je me pose d'autres questions :
- Mon code va t'il servir à quelqu'un ?
==>OUI, alors je poste dans Trucs et Astuces

==>NON, je le garde pour moi, et je ne poste pas de message à tort et à travers


Pour Rappel, voici les intitulés des sections du forum citées plus haut dans mon message :
Débutants

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Trucs et astuces

Partagez votre expérience de PureBasic avec les autres utilisateurs.

Re: Tiré un nombre aléatoire dans une liste

Publié : mar. 17/juil./2012 20:24
par dayvid
Ok, merci pour tous :)

Re: Tiré un nombre aléatoire dans une liste

Publié : mer. 18/juil./2012 14:01
par Kwai chang caine
Mon code va t'il servir à quelqu'un ?
Pas facile de répondre à cette question !!