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 ?
Mélanger aléatoirement une liste
Voir le premier message non lu • 5 messages
• Page 1 sur 1
-
wachil
Niveau 4: MC (Membre Confirmé)- Messages: 4
- Inscription: 03 Oct 2019, 20:43
- Genre:
- Calculatrice(s):→ MyCalcs profile
Re: Mélanger aléatoirement une liste
il existe une fonction countIf() qui compte le nombre de fois où elle croise un élément dans une liste
-
Hamza.SAdmin
Niveau 17: GM (Grand Maître des calculatrices)- Messages: 4461
- Images: 18
- Inscription: 07 Nov 2014, 00:43
- Genre:
- Calculatrice(s):→ MyCalcs profile
Re: Mélanger aléatoirement une liste
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.
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.
-
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)- Messages: 5665
- Inscription: 11 Mar 2008, 00:00
- Localisation: Lyon
- Genre:
- Calculatrice(s):→ MyCalcs profile
Re: Mélanger aléatoirement une liste
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.)
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
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: Tout sélectionner
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
-
PierreF8APV
Niveau 1: MD (Membre Débutant)- Messages: 3
- Inscription: 01 Déc 2019, 17:22
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: Salarié
Re: Mélanger aléatoirement une liste
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 :
Un appel possible serait alors
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.
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: Tout sélectionner
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.
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Messages: 41470
- Images: 14480
- Inscription: 25 Oct 2008, 00:00
- Localisation: Montpellier
- Genre:
- Calculatrice(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter/X: critor2000
- GitHub: critor
5 messages
• Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités