Genexo
Créateur d'exos interactifs
Comme la page précédente est suffisamment agencée sous javascript, il a été possible de l'exploiter pour automatiser le processus de création de la page web: je vous propose le logiciel suivant:
GenExo V1.4
v1.2: mise en place de la sauvegarde du projet.
v1.1: Correction de bugs
v1.0: Premier jet.
V1.2 accessible ici!
Tutoriel
1-Télécharger le Zip précédent, et le décompresser: dans le dossier créé, exécuter GenExo.exe
2- Dans le logiciel, commencer à préciser le répertoire de sortie.
Utilisation:

4- Un arbre est présent à gauche, qui résume l'architecture de la page en création. Cliquer sur Global000 dans l'arbre: et l'éditeur de texte en bas vous indique /* Ici, javascript global */, vous y tapez vos variables globales en javascript: Disons par exemple que l'on désire créer des exos sur les fonctions affines, on aura déjà besoin de deux variables a et b, qui doivent être accessibles de partout: on tape dans l'éditeur:
let a; let b;
Le code javascript dans Global0000 n'est exécuté qu'au lancement de la page web.
5- On clique sur Enoncé: l'arbre s'en trouve modifié: on clique dans Enoncé0001 dans l'arbre, et on se place dans l'éditeur de texte qui affiche:
/* L'affichage est dans la variable affich: l'ensemble est dans une fonction js */
affich=" ";
On modifie la dernière ligne en
affich="On considère dans cet exercice la fonction $f$ affine sur $\\mathbb{R}$<br>";
Comme on le constate, ce qui est entre les $ est du latex... (attention, dans une chaine javascript, l'antislash est doublé!. Le rendu mathématique est fait par la bibiliotèque JS KATEX.
Ce qui est tapé ici est dans une fonction JS, donc seules les variables globales( voir paragraphe précédent) sont accessibles.
En fait, entre les guillements délimitateurs de la chaine String affich, on tape du...HTML. D'où la balise non fermante <br> qui permet le saut de ligne.
On rajoute alors la ligne suivante:
affich+="$\\forall x,f(x)="+a+"*x+"+b+"$";
On génère alors la page pour vérifier: le résultat est frustant en apparence, mais prévisible:
les variables globales a et b n'ont pas été définies..

6- On se replace donc sur le noeud parent de l'arbre, en l'occurence Global0000, et on clique sur JsScript:
les fonctions crées dans JsScript sont exécutées au lancement de la page, et lors de l'actualisation par click sur "regénérer l'exercice"....
On y inscrit:
a=getRandomInt(7)-4;
b=getRandomInt(7)-4;
Bien sûr, a et b sont ici générés aléatoirement, mais on reste déçu par l'affichage:

6- C'est là que l'on se sert de la bibliotèque JS de calcul formel nerdamer, qui va nous simplifier la manoeuvre....On reclique dans l'arbre sur Enoncé0001 , et on remplace le contenu par:
/* L'affichage est dans la variable affich: l'ensemble est dans une fonction js */
affich="On considère dans cet exercice la fonction $f$ affine sur $\\mathbb{R}$<br>";
affich+="$\\forall x,f(x)=";
let zz=nerdamer(a+'*x+'+b).toTeX();
affich+=zz+"$";
Et le résultat est enfin à l'attente de nos espérances:
Par ailleurs, la regénération de l'exo fonctionne....

7- La fonction étant définie, on va commencer par poser quelques questions aux élèves...et les corriger!
Posons d'abord la question: on rajoute un nouveau Groupe, et on clique sur Enoncé.
On sélectionne Enoncé0101 dans l'arbre, et dans la fenêtre d'édition, on remplace affich=" "; par :
affich="1.1- Quel est le coefficient directeur de cette fonction affine?";
On contrôle la génération, et on rajoute dans l'éditeur:
affich+="Le coefficient directeur est de:" ;
8- On se repositionne sur l'arbre sur Groupe0100, et on clique sur Mathquill.
Une interface de saisie de texte sera créée, avec un clavier éventuel associé par click( Mathqill.js ne fonctionne pas sur android sinon).
Et on rajoute une vérification de la réponse donnée par l'utilisateur: on clique sur le bouton CheckBox.
Dans l'arbre apparait MathQuill0102:
La réponse de l'utilisateur est stockée dans l'objet javascript nerdamer intitulé enteredMath(102).
SUITE DU TUTORIEL EN PREPARATION...


8- On va vériifier si la réponse de l'utilisateur est juste: on clique sur CheckBox103 et on tape dans la fenêtre de saisie:
/* Vous écrivez le corps d'une foonction qui renvoie le contenu de la variable booléenne test */
let reponse=nerdamer.convertFromLaTeX(enteredMath(102));
reponse=reponse.toString();
test=(reponse==a.toString());
et on génère la page:
Si test prend la valeur true, le checkbox passe en vert lors du click sur le boutton "Cerner les erreurs", et en rouge sinon!
.
