π
<-
Chat plein-écran
[^]

Mélanger aléatoirement une liste

Pour le TI-Basic sur Nspire

Mélanger aléatoirement une liste

Message non lude 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 ?
Avatar de l’utilisateur
wachil
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 8%
 
Messages: 4
Inscription: 03 Oct 2019, 20:43
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Mélanger aléatoirement une liste

Message non lude 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
Avatar de l’utilisateur
Hamza.SAdmin
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Prochain niv.: 28.5%
 
Messages: 4461
Images: 18
Inscription: 07 Nov 2014, 00:43
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Mélanger aléatoirement une liste

Message non lude 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.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Mélanger aléatoirement une liste

Message non lude PierreF8APV » 01 Déc 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: 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
Avatar de l’utilisateur
PierreF8APV
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Prochain niv.: 60%
 
Messages: 3
Inscription: 01 Déc 2019, 17:22
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Salarié

Re: Mélanger aléatoirement une liste

Message non lude critor » 01 Déc 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: 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.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41467
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor


Retourner vers Nspire-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
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
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
987 utilisateurs:
>970 invités
>12 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)