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.
rnd: exclure un nombre tiré au hasard Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
rnd: exclure un nombre tiré au hasard Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
rnd: exclure un nombre tiré au hasard Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
rnd: exclure un nombre tiré au hasard Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
rnd: exclure un nombre tiré au hasard Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
rnd: exclure un nombre tiré au hasard Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
rnd: exclure un nombre tiré au hasard Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
rnd: exclure un nombre tiré au hasard Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
rnd: exclure un nombre tiré au hasard Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
rnd: exclure un nombre tiré au hasard Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
rnd: exclure un nombre tiré au hasard Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
rnd: exclure un nombre tiré au hasard Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
rnd: exclure un nombre tiré au hasard Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
rnd: exclure un nombre tiré au hasard Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
rnd: exclure un nombre tiré au hasard 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

 

 rnd: exclure un nombre tiré au hasard

Aller en bas 
4 participants
AuteurMessage
bignono

bignono


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

rnd: exclure un nombre tiré au hasard Empty
MessageSujet: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard EmptyLun 14 Nov 2011 - 19:52

Bonsoir à tous les paronamiciens.

Parfois dans un programme, on peut avoir besoin d'un nombre tiré au hasard dans un interval donné, mais un nombre doit en être exclus. Par exemple, dans mon premier exemple je tire au hasard 100 fois un nombre compris entre 0 et 49, mais je veux en exclure le chiffre 10.

Code:

dim a(100),i

list 1

for i=1 to 100
    repeat
      a(i)=int(rnd(50))
    until a(i) <>10
  item_add 1,a(i)
next i

dans ce second exemple, là j'exclus du tirage les chiffres 10,20,30,40.

Code:

dim a(100),i

list 1

for i=1 to 100
    repeat
      a(i)=int(rnd(50))
    until a(i) <>10 and a(i) <>20 and a(i)<>30 and a(i)<>40
  item_add 2,a(i)
next i

Jusque là, rien de bien difficile.

Mais maintenant, si le nombre de chiffre à exclure du tirage aléatoire est plus important, peut-on créer un algorythme?
Supposons que nous voulions tirer 100 nombres au hasard entre 0 et 99, et en exclure les nombres premiers, soit:
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 --> ce qui en fait 25!
Je prend comme exemple les nombres premiers, mais ce pourrait être tous les chiffres se terminant par 0 et par 7, ou bien
une séquence comme 2,3,4,15,16,17,28,29,30,41,42,43,54,55,56, etc... à exclure.

Je trouve qu'il serait dur d'écrire:

until a(i)<>2 and a(i)<>3 and a(i)<>5 and a(i)<>7 and a(i)<>11 etc... jusqu'à a(i)<>97

Pensez-vous qu'il y a un algorythme ou bien une autre manière de procéder?

A bientôt
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

rnd: exclure un nombre tiré au hasard Empty
MessageSujet: Re: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard EmptyLun 14 Nov 2011 - 20:52

Je vois pas trop ce que tu peux faire à part trouver l'élement commun et simplifier ton test...
par exemple pour exclure 10, 20,30 test du modulo de la division par 10
les nombres premiers: par une procedure te levant un flag:
Code:

Primalite:
  Prim_Flg=1
  FOR Prim_i = 2 to int(sqr(N))
    if int(N/Prim_i)=N/Prim_i then Prim_Flg=0:exit_for
  NEXT Prim_i
RETURN

etc..etc..
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

rnd: exclure un nombre tiré au hasard Empty
MessageSujet: Re: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard EmptyLun 14 Nov 2011 - 21:20

Tu peux aussi placer les nombres à exclure dans une dlist, et rejeter le nombre tiré s'il est présent dans la dlist. Avantage: on peut charger la dlist par un fichier texte, par exemple, et on n'est nullement limité par le nombre de lignes...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

rnd: exclure un nombre tiré au hasard Empty
MessageSujet: Re: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard EmptyLun 14 Nov 2011 - 22:49

Très bonne idée Klaus,
Comme quoi ces DLIST c'est vraiment pratique !... Wink
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




rnd: exclure un nombre tiré au hasard Empty
MessageSujet: Re: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard EmptyMar 15 Nov 2011 - 1:23

Il me parait plus rapide de faire une chaine du genre:
" 10 15 20 30 "
et de faire
Code:
if instr(" 5 10 15 20 30 "," "+str$(nb)+" ")>0 then ...
nb étant le nombre à tester.
Quand au nombre premier, je vous laisse faire.
J'ai mis un espace, mais voyant l'exemple de bignolo, la virgule peut le remplacer.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

rnd: exclure un nombre tiré au hasard Empty
MessageSujet: Re: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard EmptyMar 15 Nov 2011 - 7:29

Tu peux même faire un mélange des deux !! Wink
Code:
DATA " 5 10 15 20 25 "
DATA " 1 3 5 7 9 "
FOR I=1 TO 2: READ A$:ITEM_ADD LST_FILTRE,A$:NEXT I
...
...
if instr(ITEM_READ$(LST_FILTRE,1)," "+str$(nb)+" ")>0 then ...
....
...
if instr(ITEM_READ$(LST_FILTRE,2)," "+str$(nb)+" ")>0 then ...

Voilà, tu n'as que l'embarras du choix ! Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
bignono

bignono


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

rnd: exclure un nombre tiré au hasard Empty
MessageSujet: rnd   rnd: exclure un nombre tiré au hasard EmptyMar 15 Nov 2011 - 8:53

Bonjour,

Merci cosmos, c'est ta solution que je retiens, car elle marche dans les 2 sens.

1-exclure les nombres premiers:
Code:

dim a(100),i,c$
c$=",2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,"
list 1

for i=1 to 100
    repeat
      a(i)=int(rnd(100))
    until instr(c$,","+str$(a(i))+",")=0
  item_add 1,a(i)
next i

2- en changeant le = par > : until instr(c$,","+str$(a(i))+",")>0
on ne tire que les nombres premiers en excluant tous les autres.

Mais quoiqu'il en soit, la solution de Klaus est valable. Si j'avais 10000 nombres dans l'interval 0-5000 à tirer
au hasard et qu'une liste de 500 nombres doit en être exclus, le recours à la DLIST chargée par un fichier texte est
la solution. Dans ce cas la solution de cosmos pour mettre 500 nombres dans une chaine de caractère serait fastidieuse.
A ce propos, quelle peut-être la longueur maximale d'une chaine de caractère que Panoramic peut accepter?
A ce sujet, j'ai testé le code suivant:
Code:

dim c$,i
for i=1 to 4680
c$=c$+"_"
next i
print c$

en mettant for i=1 to 4679; on voit le tracé de la ligne à l'écran, à partir de 4680, on ne voit plus rien. Bizzare?
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

rnd: exclure un nombre tiré au hasard Empty
MessageSujet: Re: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard EmptyMar 15 Nov 2011 - 14:26

Je crois qu'il n'y a pas de limite théorique à la longueur d'une chaîne de caractères, par exemple on peut mettre le contenu intégral d'un fichier de 2M dans une seule chaîne. Pratique pour des recherches.
Par exemple je viens de mettre un fichier texte de 8,5 M dans une seule chaîne, c'est un peu long, surtout vers la fin (quelques longues minutes, mais je n'ai que 2G de mémoire vive), mais c'est possible.
La limite à 4679, effectivement c'est curieux, mais ça doit être plutôt un problème d'affichage.
Revenir en haut Aller en bas
Contenu sponsorisé





rnd: exclure un nombre tiré au hasard Empty
MessageSujet: Re: rnd: exclure un nombre tiré au hasard   rnd: exclure un nombre tiré au hasard Empty

Revenir en haut Aller en bas
 
rnd: exclure un nombre tiré au hasard
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment déterminer le nombre de chiffres d'un nombre naturel
» Formatage d'un nombre
» Récapitulatif de tous les jeux de hasard
» Nombre d'objets
» variable nombre

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: