Forum

Catégorie : Programmes
Forum : Aide à la programmation
Vues : 566
Réponses : 4
Type : discussion
Etat : réponses autorisées

EffVar KEnd : Erreur

sandro le 11/05/2011 à 13:59
Code
:Prompt K
:If K=72
:Then
:Disp 1
:1 -> liste1 (4
:DelVar KEnd
:Disp 2
:

si k=72, on obtient sur ma ti82stats.fr:"
1
2
Fait"

sinon:"
Fait"


Alors que si l'on prend celui-ci

Code
:Prompt K
:If K=72
:Then
:Disp 1
:1 -> liste1 (4
:DelVar K:End
:Disp 2
:
Pour k=72, le résultat reste inchangé mais si k est différend de 72, on obtient:"
2
Fait"


On dirrait donc que les deux points après EffVar Var ne seraient pas toujour faculatives.
Pouriez vous m'expliquer l'origine de cette exeption (qu'il m'a falut près d'une heure pour isoler dans un programme qui l'utilisait.

Merci d'avance
Sandro
Akmdad le 11/05/2011 à 18:07
en fait c'est au niveau du End
il doit apparaitre devant des double points sinon le end ne fonctionne pas. rien de plus normal apres tout.
sandro le 11/05/2011 à 18:13
Pourtant pour une instruction standart (ex: "2*T*F -> E" ), ça fonctionne sans les deux-points. POURQUOI ?

Sandro
Akmdad le 11/05/2011 à 19:05
comment-ca?
linkakro le 11/05/2011 à 20:40
Préliminaire :
Les deux points ":" signifient "instruction suivante". Tout ce qui est entre un début de ligne, une fin de ligne ou des ":" est une instruction (qu'elle ai un sens ou non)

--
En théorie le "End" devrait être reconnu quoi qu'il arrive.
Avec les ":" toute fonction qui en suit une autre est une instruction indépendante (cf préliminaire).
Seule l'instruction "DelVar X" sous-entend la transition à la prochaine instruction, sans besoin de ":" en plein milieu de la ligne. (si elle est executée -> cause )

--
J'ai pratiqué des tests dont voici une conclusion :
Le bug ne se produit que si la calculatrice est à la recherche d'un "End" pour une sortie de boucle telle qu'un If invalidé.
Si une quelconque instruction suit "DelVar X" sans ":", alors elle n'est pas comprise, mais les instructions suivantes le sont. Ainsi un autre End sur la même ligne ou plus loin sera lu. (Dans ton programme il n'y en a pas d'autre alors ça quitte)

----
JUSTIFICATION et résumé :

L'effet de "DelVar X" concernant les deux point ":" facultatifs ne s'applique que lorsque la fonction DelVar X (instruction à part entière) est interprétée.

* Or la fonction n'est pas interprétée quand le programme recherche un "End" pour une sortie de boucle à test invalidé
* La contraction "DelVar X[instruction]" est traitée comme une unique instruction qu'elle ait un sens ou non.
=> CAR la calculatrice regarde à peine si elle voit exactement l'instruction "End" ou "Else".
(s'il n'y a aucun sens on peut avoir une erreur syntaxe lors d'une execution)

=> CAS DU END : Si on quittait une boucle en sautant des instructions, alors le "End" et le "DelVar" sont juste ignorés.
Il y a un bug sans plantage ! La calcu continue jusqu'au prochain "End" qu'elle détectera.


[..A..]:DelVar X[..B..]:[..C..]

DelVar X[..B..] n'est pas executée si la calcu cherche un "End"
: est la seule chose qui définit la fin des instructions (excepté la fin de ligne).
Quand on quittait une boucle [..A..] n'est pas executée.
[..C..] est toujours executée.

----
Tu viens de me faire découvrir un magnifique bug de TI ! crazy.gif bigmouth.gif