Diferencia entre revisiones de «Tutorial:AutoValidación de Guiones»

De GeoGebra Manual
Saltar a: navegación, buscar
(Página creada con «{{tutorial| title=AutoValidación de Guiones }} Los siguientes guiones están escritos en la pestaña ''Guión > Javascript Global''' En efecto, apelan a la función '''ggb...»)
 
Línea 161: Línea 161:
 
Cela n'a rien à voir avec la structure de script, dans le présent fichier, le "alert" des exemples de scripts précédents a été remplacé par un texte défini dans le fichier,<br/> avec pour "Propriétés > Avancé > Condition pour afficher l'objet"  <code>test1 & & test2</code> (la double esperluète <nowiki> & & </nowiki> est le '''ET''' logique en js.)
 
Cela n'a rien à voir avec la structure de script, dans le présent fichier, le "alert" des exemples de scripts précédents a été remplacé par un texte défini dans le fichier,<br/> avec pour "Propriétés > Avancé > Condition pour afficher l'objet"  <code>test1 & & test2</code> (la double esperluète <nowiki> & & </nowiki> est le '''ET''' logique en js.)
  
[[Category:Tutorial]]
+
[[Category:Tutoriales Avanzados]]
 
__NOTOC__
 
__NOTOC__

Revisión del 21:15 4 abr 2015

Tutorial: AutoValidación de Guiones

Los siguientes guiones están escritos en la pestaña Guión > Javascript Global' En efecto, apelan a la función ggbOnInit para desencadenar el lanzamiento del archivo; después de cambiar la secuencia de comandos, se guarda el archivo, se lo cierra y, a continuación, se lo abre nuevamente para controlar la relevancia de los cambios realizados.

Guión 1

"LE SCRIPT" de référence

rudimentaire : on nomme, dans le fichier GeoGebra, 'cible' l'objet attendu.

repris ici : Construction auto-validée Tâche : En utilisant les outils présents dans la barre d'outils, construire le milieu du segment [AB]. (A et B étant deux points 3D)

Script Commentaire
function ggbOnInit() { Cette fonction va être exécutée au lancement du fichier GGb
ggbApplet.debug("ggbOnInit"); (facultatif, "gérer" les erreurs)
ggbApplet.registerAddListener("NouvObj"); C'est le point clé !! Création d'un "mouchard", qui, à chaque création de nouvel objet, va appeler la procédure NouvObj
} Fin de ggbOnInit
   
function NouvObj (obj) { Début de la procédure qui va être exécutée à chaque création d'un nouvel objet
if (obj != "fini") { Chaque fois qu'elle est exécutée, la procédure crée un booléen nommé 'fini', il ne faut donc pas qu'elle soit exécutée pour l'objet 'fini', sinon elle tournerait en rond sur cet objet !
var cmd = "fini = ("+obj+"== cible)"; Définition de la commande qui va définir le booléen 'fini' testant si le nouvel objet est égal à l'objet 'cible' attendu
ggbApplet.debug(cmd);  
ggbApplet.evalCommand(cmd); Exécution de la commande
fini = ggbApplet.getValueString("fini"); Lecture de la valeur du booléen 'fini'
if (fini.indexOf("true") > -1) { on teste si 'true' est présent dans 'fini'
alert("C'est bien !"); Si oui, un "pop-up" à destination de l'élève
} Fin du "if" sur 'fini'
} Fin de la partie de procédure exécutée pour un nouvel objet différent de 'fini'
} Fin de la procédure 'NouvObj'





Script 2

Une variante avec, toujours 1 cible, mais pouvant avoir 2 "natures" différentes : par exemple, si on attend une bissectrice d'angle (sans avoir été plus directif dans l'énoncé), que soit construite une demi-droite ou une droite, la réponse doit être validée.
Définir dans le fichier GGb une 'cible1', la droite bissectrice et une 'cible 2', la demi-droite bissectrice.

ici : Construction auto-validée bissectrice Tâche : En utilisant uniquement les outils proposés, construire la bissectrice de l'angle \hat{ABC}.


function ggbOnInit() {    
ggbApplet.debug("ggbOnInit");
ggbApplet.registerAddListener("NouvObj");
}
function NouvObj (obj) {
if (obj != "fini") {
var cmd = "fini = ("+obj+"== cible1 || "+obj+"== cible2 )"; Écriture de la commande qui va définir le booléen 'fini' testant si le nouvel objet est égal à l'un ou l'autre des objets 'cible1' ou 'cible2' attendu. (la double barre || obtenue par 2 pressions successives sur AltGr + 6 est le OU logique en js.)


ggbApplet.debug(cmd); 
ggbApplet.evalCommand(cmd);
fini = ggbApplet.getValueString("fini");
if (fini.indexOf("true") > -1) {
alert("C'est bien !"); 
}
}
}

Script 3

On reprend le "même", mais sans définir au préalable de cible
et en ne poursuivant une action que pour un nouvel objet d'un type donné, ici : un point.

ici : Const. auto-valid Pts équidistants de deux droites sécantes Tâche : En utilisant uniquement les outils proposés, placer des points équidistants des droites (AB) et (BC).

function ggbOnInit() {    
ggbApplet.debug("ggbOnInit");
ggbApplet.registerAddListener("NouvObj");
}
function NouvObj (obj) {
if (obj != "fini") {
type=ggbApplet.getObjectType(obj); On se pose la question du "type" du nouvel objet créé
if(type=="point"){ Les instructions suivantes ne seront exécutées que si le nouvel objet créé est un 'point
var cmd = "fini = (Distance["+obj+",c] ==Distance["+obj+",d] )"} La commande va tester si le point est à égale distances des 2 droites 'c' et 'd' qui ont été construites dans le fichier
ggbApplet.debug(cmd); 
ggbApplet.evalCommand(cmd);
fini = ggbApplet.getValueString("fini");
if (fini.indexOf("true") > -1) {
alert("En voici un !"); 
}
}
}

Script 4

On veut que 2 cibles soient, toutes les 2 !, atteintes. et, d'aucuns n'appréciant pas le if (obj != "fini") { du script "fondateur", en plus des 2 cibles : 'cible1' et 'cible2'
on crée 2 booléens : 'test1' et 'test2' (initialisés à 'false'|'0')

ici : Const. auto-valid des 2 bissectrices de 2 droites sécantes
(finalisé par Michel Iroir) Tâche : Construire les 2 droites bissectrices des angles associés aux droites construites.


function ggbOnInit() {    
ggbApplet.debug("ggbOnInit");
ggbApplet.registerAddListener("NouvObj");
}
function NouvObj (obj) { remarquer que la ligne suivante n'est plus if (obj != "fini") {
type=ggbApplet.getObjectType(obj); Pour reprendre ce qui a été introduit en 3) : On se pose la question du "type" du nouvel objet créé
if(type=="line"){ Les instructions suivantes ne seront exécutées que si le nouvel objet créé est une 'droite, line en anglais
test1 = ggbApplet.getValue("test1"); Lecture de la valeur actuelle du booléen 'test1' (0 au départ)
test2 = ggbApplet.getValue("test2"); idem pour 'test2'
cmd1="SetValue[test1,"+obj+"== cible1]"; Écriture de la commande qui, par la primitive SetValue, va laisser à 0, ou mettre à 1, si la 'cible1' est atteinte, le booléen 'test1'
cmd2="SetValue[test2 ,"+obj+"== cible2]"; idem pour 'test2'
if (test1 == 0) {ggbApplet.evalCommand(cmd1);}; Si 'test1' est à 0, c'est-à-dire que la 'cible1' n'a pas été précédemment atteinte, on teste si elle est atteint par le nouvel objet
if (test2 == 0) {ggbApplet.evalCommand(cmd2);}; .../...
} Fin de la partie de procédure exécutée pour un nouvel objet de type 'line'
} Fin de la procédure 'NouvObj'

Cela n'a rien à voir avec la structure de script, dans le présent fichier, le "alert" des exemples de scripts précédents a été remplacé par un texte défini dans le fichier,
avec pour "Propriétés > Avancé > Condition pour afficher l'objet" test1 & & test2 (la double esperluète & & est le ET logique en js.)

© 2024 International GeoGebra Institute