TI 82 Stats fr - Nombre aléatoire avec exception

Résolu/Fermé
MrSheepSheep - 2 oct. 2013 à 21:32
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 4 oct. 2013 à 17:34
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
A voir également:

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
TheLastShadow Messages postés 64 Date d'inscription lundi 22 novembre 2010 Statut Membre Dernière intervention 2 juin 2014 8
3 oct. 2013 à 15:17
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.
0
MrSheepSheep
3 oct. 2013 à 21:28
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).
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 4/10/2013 à 18:03
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
0