Tiré un nombre aléatoire dans une liste

Sujets variés concernant le développement en PureBasic
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Tiré un nombre aléatoire dans une liste

Message 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
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
Dernière modification par Ar-S le mar. 17/juil./2012 11:05, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

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

Message 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.
Image
Image
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

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

Message par dayvid »

Ok, merci pour tous :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message par Kwai chang caine »

Mon code va t'il servir à quelqu'un ?
Pas facile de répondre à cette question !!
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre