Poster un nouveau sujet Poster une réponse
EffVar KEnd : Erreur
Auteur Message
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 11 Mai 2011, 13:59   Citer 


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

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Mer 11 Mai 2011, 18:07   Citer 

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.

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 11 Mai 2011, 18:13   Citer 

Pourtant pour une instruction standart (ex: "2*T*F -> E" ), ça fonctionne sans les deux-points. POURQUOI ?

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 717
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Mer 11 Mai 2011, 19:05   Citer 

comment-ca?

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 11 Mai 2011, 20:40   Citer 

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

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink