π
<-
Chat plein-écran
[^]

Mélanger aléatoirement une liste

Pour le TI-Basic sur Nspire

Mélanger aléatoirement une liste

Unread postby wachil » 07 Oct 2019, 21:12

J'ai deja ecris
local liste,i
liste[1]:=randint(1,14)
Pour i allant de 1 a 14
Tant que liste[i] appartient a liste
faire liste[i]:=randint(1,14)
Fin tant que
Finpour
Disp liste

Qql peut m'aider a modifier le appartient pour que je l'écrive sur la calculatrice s'il vous plait ?
User avatar
wachil
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 43.8%
 
Posts: 4
Joined: 03 Oct 2019, 20:43
Gender: Not specified

Re: Mélanger aléatoirement une liste

Unread postby Hamza.S » 24 Nov 2019, 16:40

il existe une fonction countIf() qui compte le nombre de fois où elle croise un élément dans une liste
Image
User avatar
Hamza.SAdmin.
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Level up: 7.6%
 
Posts: 3605
Images: 18
Joined: 07 Nov 2014, 00:43
Gender: Male
Calculator(s):

Re: Mélanger aléatoirement une liste

Unread postby Bisam » 25 Nov 2019, 11:27

Tout d'abord, contrairement à ce que dit ton titre, ton algorithme ne mélange pas la liste !
Il crée une liste qui est une permutation aléatoire des nombres de 1 à 14.

Deuxièmement, l'algorithme choisi est relativement inefficace !!
En effet, plus tu avances dans la liste, plus il devient difficile de trouver un nombre aléatoire qui n'ait pas encore été choisi. Pour seulement 14 éléments, il faudra en moyenne 45 tirages pour réussir à remplir la liste.

Pour faire mieux, il vaut mieux choisir le mélange de Fischer-Yates.

Ce qui est encore mieux est d'utiliser les fonctions disponibles pour ta calculette !! Tu peux trouver une bibliothèque nommée "numtheory" et dedans la fonction "randperm" fait exactement ce que tu souhaites.
User avatar
BisamAdmin.
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 47.4%
 
Posts: 5423
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):

Re: Mélanger aléatoirement une liste

Unread postby PierreF8APV » 01 Dec 2019, 17:55

Hello chers amis...
Je suis avec intérêt votre discussion car je débute avec le Ti-Basic (Ou tout au moins je ne l'ai pas approché depuis plus de 20 ans !), et je m'y recolle pour le plaisir.
J'ai tenté une traduction sous forme de fonction de l'algorithme de "Fisher-Yates", que je découvre grâce à vous. (Merci pour ça)
Alors évidemment, cet code est sans doute un peu grossier, voir buggé mais c'est bien pour ça que je m'intéresse à vos critiques (positives) et à aux améliorations possibles :
(C'est un code écrit sur une TI NSpire CXII CAS.)

Define fisheryates(liste)=
Func
Local i,countliste,tmp,alea
countliste:=dim(liste)
For i,1,countliste
alea:=randInt(1,countliste)
tmp:=liste[alea]
liste[alea]:=liste[i]
liste[i]:=tmp
EndFor
Return liste
EndFunc

Remarque : Je n'ai pas trouvé de fonction dans le style de Swap(liste,indice départ, indice fin) qui permettrait de permuter deux éléments d'une liste... ça existe peut-être ?

Pierre
User avatar
PierreF8APV
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 1
Joined: 01 Dec 2019, 17:22
Gender: Not specified
Calculator(s):
Class: Salarié

Re: Mélanger aléatoirement une liste

Unread postby critor » 01 Dec 2019, 18:29

Merci. :)

Je ne connais pas de fonction
swap()
, non.

Mais après, si c'est une opération fréquemment utilisée, il y a toujours la possibilité de la définir, au moins dans le classeur courant :
Code: Select all
Define swap(l,i1,i2)
Func
  Local t
  t=l[i1]
  l[i1]:=l[i2]
  l[i2]:=t
  return l
EndFunc


Un appel possible serait alors liste:=swap(liste,3,7).

Définir la fonction en
LibPub
et enregistrer son classeur dans le dossier /MyLib/ permet de disposer des fonctions ainsi définies de manière globale, dans n'importe quel classeur donc.
Image
User avatar
critorAdmin.
Niveau 18: DC (Deus ex Calculatorum)
Niveau 18: DC (Deus ex Calculatorum)
Level up: 99.9%
 
Posts: 34109
Images: 8836
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti


Return to Nspire-Basic

Who is online

Users browsing this forum: No registered users and 1 guest

-
Search
-
Featured topics
Concours TI-Planet-Casio de rentrée 2019. 3 défis pour plus d'une 15aine de calculatrices graphiques et nombre de goodies sortant de l'ordinaire ! :D
Comparaisons des meilleurs prix pour acheter sa calculatrice !
12
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety 
-
Stats.
443 utilisateurs:
>366 invités
>72 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)