TI 82 Stats fr - Nombre aléatoire avec exception [Résolu/Fermé]

Signaler
-
Messages postés
9679
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 mars 2021
-
Bonsoir,

Je programme actuellement un jeu de puzzle du même principe que ce genre là (http://www.virtuoflash.com/puzzles/puzzle-a-deplacer-452.html).
Pour commencer, je vais utiliser des nombres à mettre dans l'ordre à la place d'une vraie image. Pour ce faire, j'ai besoin que 8 variables aient toutes une valeur aléatoire, mais que celles-ci ne soient pas égales entre-elles (Il serait étrange de trouver deux fois la même pièce dans un puzzle).

J'utilise donc la fonction EntAléat pour donner une valeur à chaque variable.

Je bloque cependant au moment où il faut vérifier que le nombre aléatoire donné à la variable n'est pas utilisé par les autres.

Je me demandais si il n'existait pas une fonction comme EntAléat permettant de choisir un nombre dans une intervalle, sauf des nombres définis.

Exemple (ce que j'aimerais faire):

EntAléa(1,8 "SAUF A, B, C, D, E, F et H") -> G

4 réponses

je pense qu'il faudrait que tu utilises une liste qui contiendrait la liste des valeurs possibles pour tes valeurs aléatoires

et que tu enleves de la liste la valeur tirée, ainsi de suite..

Qu'en penses-tu ?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
59
Date d'inscription
lundi 22 novembre 2010
Statut
Membre
Dernière intervention
2 juin 2014
8
Salut,

Tu as essayé tout bêtement de redonner une valeur aléatoire si G est égale à une autre variable ?

Je ne me rappelle plus de la syntaxe, alors j'écris le résumé en français

If G = A ou G=B ou G=C ou G=D, etc...
While G = A ou G=B ou G=C ou G=D, etc...
EntAléa(1,8) -> G
Fin While
Fin Si

C'est surement un peu plus long à écrire, mais ça devrait marcher.

En effet, je n'avais pas pensé à utiliser une liste !
J'ai réussi à faire ce que je voulais. Merci !

Voilà l'algorithme pour ceux qui voudraient faire la même chose:

8 -> dim(LPUZZL // Permet de définir la taille de la liste PUZZL
Remplir(1,LPUZZL // Remplis la liste PUZZL de 1

entAléat(1,8) -> A
While LPUZZL(A)=0
entAléat(1,8) -> A
End
0 -> LPUZZL(A)

Il suffit de répéter les quelques lignes ci-dessus autant de fois que l'on a de variables (ici, huit fois).
Messages postés
9679
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 mars 2021
2 045
Bonjour

Il y a peut être mieux

// remplir L1 avec les entiers de 1 à 8
8 sto dim(L1)
For(K,1,8)
K sto L1(K)
End
// mélanger la liste L1 ( par exemple avec 8 permutations aléatoires)
For(K,1,8)
entAleat(1,8) sto I
entAleat(1,8) sto J
L1(I) sto A
L1(J) sto L1(I)
A sto L1(J)
End

Bonne suite