Tutorial:AutoValidación de Guiones

De GeoGebra Manual
Revisión del 01:34 12 may 2016 de Zbynek (discusión | contribs.) (Texto reemplaza - 'tube.geogebra.org' a 'www.geogebra.org')
Saltar a: navegación, buscar
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

"El GUION" de referencia

Rudimentaria: llamada, en el archivo de GeoGebra, siendo el "objetivo", el objeto esperado. Se debe repetir aquí: Construcción auto-validada

Tarea: Utilizando las herramientas de la barra de herramientas, construir el punto medio del segmento [AB]. (Siendo A y B dos puntos 3D)

Guión Comentario
function ggbOnInit() { Esta función se ejecutará cuando el archivo GGB se inicie
ggbApplet.debug("ggbOnInit"); (Se lo habilita, de modo opcional, para "administrar" los errores)
ggbApplet.registerAddListener("NuevoObj"); ¡¡Esta es la clave!! Establecimiento de una "cookie", que, cada creación de nuevo objeto llamará al procedimiento NuevoObj
} Fin de ggbOnInit
   
function NuevoObj (obj) { Inicio del procedimiento que se llevará a cabo cada vez que se cree un nuevo objeto
if (obj != "fini") { Cada vez que se ejecuta, el procedimiento crea una booleana llamado, por lo que no debería ser ejecutada por el objeto 'concluida', sino, ¡sería un bucle ciclando sobre este objeto!
var cmd = "fini = ("+obj+"== cible)"; Definición del comando que establecerá la booleana 'concluida' que controla si el nuevo objeto es igual al "objetivo" esperado.
ggbApplet.debug(cmd);  
ggbApplet.evalCommand(cmd); Ejecución del comando
fini = ggbApplet.getValueString("concluida"); Lectura del valor de la booleana 'concluida'
if (fini.indexOf("true") > -1) { Se controla si aparece un 'true' en la 'concluida'
alert("C'est bien !"); Si es así, se le asigna un "pop-up" al estudiante
} Fin del "si" respecto de la "concluida"
} Fin del procedimiento realizado por un nuevo objeto diferente de "concluida"
} Fin del procedimiento 'NuevoObj'

Guión 2

Una variante, siempre con un objetivo, podría ser tener dos "tipos" diferentes: por ejemplo, si uno espera una bisectriz de un ángulo (sin ser demasiado directivo el enunciado), se construye como una semirrecta o una recta, la respuesta debe ser validada.
Definir en un archivo GGB un 'destino1', la bisectriz y el objetivo 2 ', la semirrecta bisectriz.

aquí: Construcción auto-validada bisectrizi

Tarea: Utilizando sólo las herramientas proporcionadas, construir la bisectriz del ángulo \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