Différences entre versions de « Tutoriel:Scripts AutoValidation »

De GeoGebra Manual
Aller à : navigation, rechercher
(brouillon)
 
Ligne 1 : Ligne 1 :
 
Dans ce qui suit, les scripts sont écrits dans l'onglet '''Script > Javascript Global'''
 
Dans ce qui suit, les scripts sont écrits dans l'onglet '''Script > Javascript Global'''
  
Construction auto-validée
 
En utilisant les outils présents dans la barre d'outils, construire le milieu du segment [AB].
 
  
http://www.geogebra.org/material/show/id/928841
 
  
 
'''"LE SCRIPT"''' de référence
 
'''"LE SCRIPT"''' de référence
 +
 +
rudimentaire : on nomme, dans le fichier GeoGebra, 'cible' l'objet attendu.
 +
 +
repris [http://www.geogebra.org/material/show/id/928841 ici : Construction auto-validée]
 +
<u>Tâche : En utilisant les outils présents dans la barre d'outils, construire le milieu du segment [AB].</u>
 +
(A et B étant deux points 3D)
 
{|
 
{|
 
|-
 
|-
Ligne 21 : Ligne 24 :
 
| &nbsp; || &nbsp;
 
| &nbsp; || &nbsp;
 
|-
 
|-
| function NouvObj (obj) { || Texte de la cellule
+
| 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") { || Texte de la cellule
+
| 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)"; || Texte de la cellule
+
| 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);  || Texte de la cellule
+
| ggbApplet.debug(cmd);  || &nbsp;
 
|-
 
|-
| ggbApplet.evalCommand(cmd); || Texte de la cellule
+
| ggbApplet.evalCommand(cmd); || Exécution de la commande
 
|-
 
|-
| fini = ggbApplet.getValueString("fini"); || Texte de la cellule
+
| fini = ggbApplet.getValueString("fini"); || Lecture de la valeur du booléen 'fini'
 
|-
 
|-
| if (fini.indexOf("true") > -1) {e || Texte de la cellule
+
| if (fini.indexOf("true") > -1) { || on teste si 'true' est présent dans 'fini'
 
|-
 
|-
| alert("C'est bien !");  || Texte de la cellule
+
| alert("C'est bien !");  || Si oui, un "pop-up" à destination de l'élève
 
|-
 
|-
| <nowiki>}</nowiki> || Texte de la cellule
+
| <nowiki>}</nowiki> || Fin du "if" sur 'fini'
 
|-
 
|-
| <nowiki>}</nowiki> || Texte de la cellule
+
| <nowiki>}</nowiki> || Fin de la partie de procédure exécutée pour un nouvel objet différent de 'fini'
 
|-
 
|-
| <nowiki>}</nowiki> || Texte de la cellule
+
| <nowiki>}</nowiki> || Fin de la procédure 'NouvObj'
 
|}
 
|}
  
Ligne 52 : Ligne 55 :
  
 
====
 
====
http://www.geogebra.org/material/show/id/932023
+
Une variante avec, toujours 1 cible, mais pouvant avoir 2 "natures" différentes :
Construction auto-validée bissectrice
+
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.<br/> Définir dans le fichier GGb une 'cible1', la droite bissectrice et une 'cible 2', la demi-droite bissectrice.
 +
 
 +
[http://www.geogebra.org/material/show/id/932023 ici : Construction auto-validée bissectrice]
 +
<u>Tâche : En utilisant uniquement les outils proposés, construire la bissectrice de l'angle <math>\hat{ABC}</math>ˆ.</u>
 +
 
 +
 
 +
function ggbOnInit() {   
 +
ggbApplet.debug("ggbOnInit");
 +
ggbApplet.registerAddListener("NouvObj");
 +
}
 +
 
 +
function NouvObj (obj) {
 +
if (obj != "fini") {
 +
 
 +
{|
 +
|-
 +
| <nowiki>var cmd = "fini = ("+obj+"== cible1 || "+obj+"== cible2 )";</nowiki> || Définition 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 <nowiki> || </nowiki> obtenue par 2 pressions successives sur {{KeyCode|AltGr+6}} est le '''OU''' logique en js.)
 +
|}
  
function ggbOnInit() {   
 
ggbApplet.debug("ggbOnInit");
 
ggbApplet.registerAddListener("NouvObj");
 
}
 
  
function NouvObj (obj) {
+
ggbApplet.debug(cmd);  
if (obj != "fini") {
+
ggbApplet.evalCommand(cmd);
var cmd = "fini = ("+obj+"== cible1 || "+obj+"== cible2 )";
+
fini = ggbApplet.getValueString("fini");
ggbApplet.debug(cmd);  
+
if (fini.indexOf("true") > -1) {
ggbApplet.evalCommand(cmd);
+
alert("C'est bien !");  
fini = ggbApplet.getValueString("fini");
+
}
if (fini.indexOf("true") > -1) {
+
}
alert("C'est bien !");  
 
}
 
}
 
  
}
+
}
  
 
===
 
===

Version du 4 avril 2015 à 14:00

Dans ce qui suit, les scripts sont écrits dans l'onglet Script > Javascript Global


"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'





==

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 )"; Définition 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 !"); 
}
}
}

=

http://www.geogebra.org/material/show/id/933499 Const. auto-valid Pts équidistants de deux droites sécantes

function ggbOnInit() { ggbApplet.debug("ggbOnInit"); ggbApplet.registerAddListener("NouvObj"); }

function NouvObj (obj) { if (obj != "fini") { type=ggbApplet.getObjectType(obj); if(type=="point"){ var cmd = "fini = (Distance["+obj+",c] ==Distance["+obj+",d] )"} ggbApplet.debug(cmd); ggbApplet.evalCommand(cmd); fini = ggbApplet.getValueString("fini"); if (fini.indexOf("true") > -1) { alert("En voici un !"); } }


}

=

http://www.geogebra.org/material/show/id/940779 Const. auto-valid des 2 bissectrices de 2 droites sécantes


Construction auto-validée des 2 droites bissectrices des angles associés à 2 droites sécantes.

Avec utilisation du SoitValeur (SetValue) GeoGebra implémentée par Michel Iroir

function ggbOnInit() { ggbApplet.debug("ggbOnInit"); ggbApplet.registerAddListener("NouvObj"); }

function NouvObj (obj) { type=ggbApplet.getObjectType(obj); if(type=="line"){ test1 = ggbApplet.getValue("test1"); test2 = ggbApplet.getValue("test2"); cmd1="SetValue[test1,"+obj+"== cible1]"; cmd2="SetValue[test2 ,"+obj+"== cible2]"; if (test1 == 0) {ggbApplet.evalCommand(cmd1);}; if (test2 == 0) {ggbApplet.evalCommand(cmd2);}; } }

© 2021 International GeoGebra Institute