Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Condition variable = une des valeurs de liste ?
OtaKiller le 22/09/2015 à 20:39
Bonjour, je suis nouveau et sur le forum et en TI-Basic et je souhaiterai savoir comment faire pour savoir si une variable est égale a une des valeurs d'une liste. En gros je souhaiterai faire: If a=L1(1) OU a=L1(2) OU etc... sauf que dans mon programme des valeurs s'ajoutent sans cesse à la liste donc il je voudrait eviter de devoir faire If a=L1(1)......a=L1(999)Mingerton le 22/09/2015 à 21:00
C'est un coup un prendre. Voilà le code (je vais t'expliquer) :
A=L1 crée une liste de test qui est remplie de 0 au rang N lorsque L1(N) est différent de A, et de 1 lorsque L1(N)=A.
On teste si le maximum de cette liste est positif (sous entendu, logique booléenne) avec le test If max(A=L1).
Tu peux regarder ce code étapes par étapes pour mieux comprendre le principe.
OtaKiller le 22/09/2015 à 23:20
Donc si j'ai bien compris avec ce code; si par exemple a=3 et ma liste L1 est {2,7,9,3,4} (au moment du test pour la condition) créera une liste {0,0,0,1,0} puis additionnera toutes les valeurs (donc ici 1) et s'il est positif la condition est validée sinon elle ne s’exécute pas ?Mingerton le 23/09/2015 à 07:13
You got it !
Fonctionne aussi avec sum() (la somme des valeurs de la liste de test)
OtaKiller le 23/09/2015 à 09:33
Merci, le problème maintenant est que je veux empêcher un point d'atteindre certaines coordonnées mais celles si sont générées aléatoirement a chaque boucle de GetKey.
Sauf que si je fais IF x=a ET y=b la conditions n'est validée que pour le dernier point qui s'est crée dans la boucle et pas ceux qui l'ont été dans les precedentes. J'ai donc essayé de compiler les cordonnées dans 2 listes (une pour, une pour b) et de faire IF max(x=L1 ET max(y=L2mais du coup la condition est valide si mon point se trouve sur la ligne d'un des points crées et la colonne d'un autre (exemple: a(0,3) b(3,6) la condition est validée pour (0,6) alors qu'aucun point n'y figure).
Y'a t'il donc un moyen de contourner ce problème, par exemple rentrer des coordonnées dans une liste ou autre ?Mingerton le 23/09/2015 à 19:22
Je ne suis pas sur d'avoir tout compris. Je résume :
Un point par tour est interdit, et le test d'interdiction doit se faire uniquement sur ce point.
Voilà ce que je te propose pour faire simple.
Code
Repeat Ans
getkey
randInt(1,95->A
randInt(1,63->B
End
// pour le getkey, c'est le plus simple. Tu peux remplacer Ans par K si tu réutilises la valeur
If prod({X,Y}={A,B
...
Le produit simule le booléen ET, tandis que sum/max simule le booélen OU.
Je te conseille cet excellent article de Linkakro pour en savoir plus :
https://tout82.pages-perso.fre[...].php?sujet=2741 OtaKiller le 23/09/2015 à 21:54
Hélas non, je n'ai pas été assez clair dsl: un point interdit est créé par boucle et le test d'interdiction doit se faire sur tout les points interdits existants...Mingerton le 23/09/2015 à 22:17
Oh damn, tu t'en sortira jamais...
Les listes sont bloquées à 99 valeurs, tu pourras jamais faire le tour de l'écran.
Je te conseille plutôt un pxlTest(X,Y), si tu traces un point sur chaque pixel interdit.m@thieu41 le 24/09/2015 à 20:58
On est a 999 pour la taille max d'une liste si la mémoire le permet

Mingerton le 24/09/2015 à 21:40
Euh oui. Mais bon, si la variable fait cette taille, il peut même plus lancer son programme ^^
Le pxlTest reste la meilleure idée je pense. Si t'as besoin d'explications n'hésite pas

Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.