FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Une petite SUB avec RND Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Une petite SUB avec RND Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Une petite SUB avec RND Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Une petite SUB avec RND Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Une petite SUB avec RND Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Une petite SUB avec RND Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Une petite SUB avec RND Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Une petite SUB avec RND Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Une petite SUB avec RND Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Une petite SUB avec RND Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Une petite SUB avec RND Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Une petite SUB avec RND Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Une petite SUB avec RND Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Une petite SUB avec RND Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Une petite SUB avec RND Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-55%
Le deal à ne pas rater :
Friteuse sans huile – PHILIPS – Airfryer HD9200/90 Série 3000
49.99 € 109.99 €
Voir le deal

 

 Une petite SUB avec RND

Aller en bas 
4 participants
AuteurMessage
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Une petite SUB avec RND Empty
MessageSujet: Une petite SUB avec RND   Une petite SUB avec RND EmptySam 2 Nov 2013 - 22:48

Bonsoir à tous, Smile 
Voici une sub qui permet de tirer au hasard une suite de nombre dans un intervalle, sans jamais tirer 2 fois le même nombre.
C'est très pratique pour mélanger un jeu de 32, 54 cartes ou un jeu de tarot (78 cartes) par exemple.
Il suffit de déclarer la valeur minimale (qui sera exclue du tirage) et la valeur maximale (qui, elle sera incluse dans le tirage).
Si l'on désire avoir des nombres négatifs, il suffira tout simplement de retrancher aux résultats une valeur fixe.
Tout est expliqué dans le programme :
Code:
' ==================================================================================
' ==================================================================================
' SUB POUR TIRER AU HASARD DES NOMBRES QU'UNE SEULE FOIS DANS UN INTERVALLE DONNÉ
' L'INTERVALLE EST DÉLIMITÉ PAR 2 VARIABLES : "mini" ET "maxi"
' ATTENTION! DANS L'INTERVALLE, LA BORNE "mini" EST EXCLUE
' ==================================================================================
' ==================================================================================

width 0,1300
tirage(0,32): ' tirer tous les nombres entre 1 et 32 (mélanger un jeu de 32 cartes)
tirage(10,40): ' tirer tous les nombres entre 11 et 40
tirage(62,75): ' tirer tous les nombres entre 63 et 75
tirage(99,115): ' tirer tous les nombres entre 100 et 115
tirage(10001,10015): ' tirer tous les nombres entre 10002 et 10015
end

sub tirage(mini,maxi)
   dim_local i,j,k,p(maxi-mini)
      j=int(rnd(maxi-mini))+mini+1:p(1)=j
      i=2
      while i<(maxi-mini)+1
         j=int(rnd(maxi-mini))+mini+1:p(i)=j
         for k=i-1 to 1 step -1
            if p(k)=p(i) then p(i)=0
         next k
         if p(i)=0 then i=i-1
         i=i+1
      end_while

   for i=1 to (maxi-mini):print p(i);" ";:next i:print

   ' ===========================================================================
   ' ===========================================================================
   ' On peut aussi obtenir des nombres négatifs en retranchant une valeur à p(i)
   ' par exemple pour le premier exemple "tirage(0,32)" si l'on souhaite obtenir
   ' les nombres entre -15 et 16, il suffit de faire :
   ' ===========================================================================
   ' for i=1 to (maxi-mini):print p(i)-16;" ";:next i:print
   ' ===========================================================================
   ' ===========================================================================

end_sub
J'espère que ce sera utile.
A+ Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Une petite SUB avec RND Empty
MessageSujet: Re: Une petite SUB avec RND   Une petite SUB avec RND EmptyDim 3 Nov 2013 - 1:05

Très utile ! Merci !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Une petite SUB avec RND Empty
MessageSujet: re   Une petite SUB avec RND EmptyDim 3 Nov 2013 - 12:54

Bravo Bignono, 

Très pratique, je l' ai mise sur le site au rayon "Mathématiques".
Revenir en haut Aller en bas
Invité
Invité




Une petite SUB avec RND Empty
MessageSujet: Re: Une petite SUB avec RND   Une petite SUB avec RND EmptyDim 3 Nov 2013 - 13:09

Bravo Bignono.
Personellement avec Panoramic qui n'a pas de limite sur la longueur de chaine, en dehors de la mémoire disponible, je code différemment avec un résultat nettement plus rapide lorsque la liste est longue.

Code:
' ==================================================================================
' ==================================================================================
' SUB POUR TIRER AU HASARD DES NOMBRES QU'UNE SEULE FOIS DANS UN INTERVALLE DONNÉ
' L'INTERVALLE EST DÉLIMITÉ PAR 2 VARIABLES : "mini" ET "maxi"
' ATTENTION! DANS L'INTERVALLE, LA BORNE "mini" EST EXCLUE
' ==================================================================================
' ==================================================================================

width 0,1300
tirage(2,5)
tirage(0,32): ' tirer tous les nombres entre 1 et 32 (mélanger un jeu de 32 cartes)
tirage(10,40): ' tirer tous les nombres entre 11 et 40
tirage(62,75): ' tirer tous les nombres entre 63 et 75
tirage(99,115): ' tirer tous les nombres entre 100 et 115
tirage(10001,10015): ' tirer tous les nombres entre 10002 et 10015
end

sub tirage(mini,maxi)
mini = mini-1
  dim_local i,j,p(maxi-mini)  , k$
      k$ = " " : i= 1
      while i<(maxi-mini)+1
        j=int(rnd(maxi-mini))+mini+1
        if instr(k$," " + str$(j) +" " ) = 0 then k$ = k$ +str$(j)+" ":p(i) = j : i= i +1
      end_while

  for i=1 to (maxi-mini):print p(i);" ";:next i:print

  ' ===========================================================================
  ' ===========================================================================
  ' On peut aussi obtenir des nombres négatifs en retranchant une valeur à p(i)
  ' par exemple pour le premier exemple "tirage(0,32)" si l'on souhaite obtenir
  ' les nombres entre -15 et 16, il suffit de faire :
  ' ===========================================================================
  ' for i=1 to (maxi-mini):print p(i)-16;" ";:next i:print
  ' ===========================================================================
  ' ===========================================================================
end_sub
Revenir en haut Aller en bas
Mumu




Nombre de messages : 176
Localisation : 45
Date d'inscription : 20/12/2012

Une petite SUB avec RND Empty
MessageSujet: Re: Une petite SUB avec RND   Une petite SUB avec RND EmptyDim 3 Nov 2013 - 17:39

Bonjour.

J'ai fait un test de rapidité sur les 2 sub's

tirage(0,200) 24 s / < 1 s
tirage(0,300) 44 s / 1 s

Le 1er chiffre représente la sub de Bignono, le second celle de cosmos70

si on fait (0,1000) le temps reste de 14 s dans le second cas.

Evidemment, on ne fait pas un tirage sur 100 cartes tous les jours...

Je garde de toutes façons les 2 sub's. Merci à tous les 2
Revenir en haut Aller en bas
Invité
Invité




Une petite SUB avec RND Empty
MessageSujet: Re: Une petite SUB avec RND   Une petite SUB avec RND EmptyDim 3 Nov 2013 - 18:55

Je dois dire qu'avec des nombres je n'ai pas fait de teste de rapidité.
Mais si tu mets avec le même principe toutes les instructions basiques de Panoramic, dans une chaines, séparées par un espace ( à moins que Panoramic est été remanié dans certaines fonctions depuis 3/4 ans), le résultat est immédiat pour savoir si un mot est dans la liste ou non.
Avec ma méthode, j'arrive à écrire dans un edit une ligne basic, et pouvoir mettre une coloration syntaxique sans perturbation, mais ce n'est pas le cas en consultant une liste.

Maintenant il est vrai qu'il est normal qu'une liste de nombre aille plus vite que celle d'une chaine. J'espère que ce que je dis est toujours d'actualité. J'ai hésité avant de poster mon code, mais si tout ce que je dis est faux, autant que je m’arrête de poster. Pour autant j'ai pas le temps de refaire le teste.
Revenir en haut Aller en bas
Contenu sponsorisé





Une petite SUB avec RND Empty
MessageSujet: Re: Une petite SUB avec RND   Une petite SUB avec RND Empty

Revenir en haut Aller en bas
 
Une petite SUB avec RND
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Petite (toute petite) Sub: Dir
» problème avec edit ou bien avec combo?
» MA PETITE LISTE...
» Une petite règle
» Une petite animation

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: