π
<-
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: 62.5%
 
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: 11.2%
 
Posts: 3911
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: 48.3%
 
Posts: 5480
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.)

Code: Select all
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 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 0%
 
Posts: 3
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 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 5.8%
 
Posts: 35449
Images: 9461
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 5 guests

-
Search
-
Featured topics
L'OS 5.5 de la TI-83 Premium CE / 84 Plus CE supprime l'assembleur - la plupart des jeux et certains programme ne fonctionneront plus
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Comparaisons des meilleurs prix pour acheter sa calculatrice !
1234
-
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 Calculatrices à acheter chez Calcuso
-
Stats.
463 utilisateurs:
>457 invités
>0 membre
>6 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)