π
<-
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 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 8%
 
Posts: 4
Joined: 03 Oct 2019, 20:43
Gender: Not specified
Calculator(s):
MyCalcs profile

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: 28.5%
 
Posts: 4464
Images: 18
Joined: 07 Nov 2014, 00:43
Gender: Male
Calculator(s):
MyCalcs profile

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: 69.6%
 
Posts: 5665
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

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 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 60%
 
Posts: 3
Joined: 01 Dec 2019, 17:22
Gender: Not specified
Calculator(s):
MyCalcs profile
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: 42.6%
 
Posts: 41498
Images: 14703
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor


Return to Nspire-Basic

Who is online

Users browsing this forum: No registered users and 32 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
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.
1730 utilisateurs:
>1710 invités
>15 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)