Moodle – Question de type « STACK »

Création d’une question de type « STACK » pour un test Moodle


Les questions STACK sont des questions mathématiques utilisant un système de calcul formel (basé sur Maxima) pour établir les propriétés des réponses des élèves.

L’utilisation du calcul formel apporte des fonctionnalités très intéressantes. Les réponses des élèves sont analysées et comparées en terme d’équivalents par rapport à celle attendue.

Contrairement aux autres type de questions, les réponses numériques des élèves peuvent ne pas être décimales. On peut demander une réponse numérique rationnelle non décimale sous la forme d’une fraction (irréductible ou non) ou même une réponse irrationnelle.

On peut également demander des expressions algébriques (en imposant ou non leurs formes). STACK les compare à la réponse attendue en terme d’équivalent algébrique pour valider ou non une réponse.

Par exemple, si la réponse attendue est \(\frac{\sqrt{2}}{2}\) alors \(\frac{1}{\sqrt{2}}\) sera acceptée ou encore si la réponse attendue est l’expression \(-6x+3\), tout équivalent algébrique tel que les expressions \(3-6x\) ou \(-3(2x-1)\) pourront être acceptées (sauf si on impose une forme donnée).


Quelques exemples :

Ici, \(f\) est une fonction polynôme du 3e degré dont les coefficients sont des entiers aléatoirement choisis entre -10 et 10. (Le coefficient des \(x^3\) ne pouvant pas être nul.
L’élève fournit l’expression de \(f'(x)\). L’ordre des termes n’a pas d’importance.

Dans cet exemple, l’identité remarquable \((a+b)^2\) est générée aléatoirement avec \(a\) et \(b\), entiers non nuls.
La forme de la réponse est imposée : Ce doit être une forme développée.
On a également interdit les parenthèses pour éviter, par exemple, une réponse contenant \((-5x)^2\) et le mot expand qui permet de développer une expression algébrique.

Un produit de deux fractions pour lesquelles le numérateur et le dénominateur sont des entiers choisis aléatoirement dans des listes de valeurs. On s’assure que la fraction n’est pas entière.
Le résultat ne pourra pas être validé s’il n’est pas donnée sous la forme d’une fraction irréductible.

Une expression de la forme \(|a-\sqrt{b}|\) est proposée à l’élève. \(a\) est un entier choisi aléatoirement entre 1 et 9 et \(b\) un entier choisi aléatoirement dans une liste de nombres.
Les réponses \(\sqrt{11}-1\) et \(-1+\sqrt{11}\) seront considérées comme correctes.

Il est demandé de saisir la valeur exacte du sinus d’un réel pris aléatoirement dans une liste de valeurs.
La réponse est saisie avec la syntaxe de STACK et est interprétée en temps réel et affichée avant que l’élève ne la valide.
Toute réponse égale à la valeur exacte sera acceptée.

A noter que Maxima dispose d’un langage de programmation (instruction conditionnelles, itératives…) qui peut être utilisé avec STACK pour aller plus loin.


Rédaction pas à pas d’une question STACK :


1. Variables de la question

On définit tout d’abord toutes les variables qui seront utilisées dans la question : paramètres, fonctions…

La syntaxe utilisée est celle de Maxima.

On définit l’ensemble des variables qui seront utilisées dans la question.

Voici un exemple ci-contre :

\(e\) est une valeur numérique, initialement égale à 7.
\(k\) est un entier choisi aléatoirement entre 0 et 5.
\(t\) est un flottant compris entre 0 et 2.
\(a\) et \(b\) sont des entiers choisis aléatoirement entre -9 et 9.
avec \(a \neq -1\) , \(a \neq 0\) et \(b \neq 0\)
\(f(x)\) , \(g(x)\) et \(h(x)\) sont des expressions algébriques de la variable réelle \(x\).
\(h\) est la dérivée première de \(g\).

affichage des valeurs
des variables

Les fonctions suivantes permettent d’introduire des valeurs aléatoires pour des paramètres dans les questions.

fonctionsdescriptions
rand(n)renvoie un entier entre 0 et n-1
rand(n.0)génère un flottant entre 0 et n
rand([a, b, …,z])renvoie un élément
aléatoire pris dans une liste
rand_with_step(m, M, pas)renvoie un nombre aléatoire de {m, m+pas, m+2×pas, …}
rand_with_prohib (m, M, liste)renvoie un entier entre m et M en excluant les éléments de la liste.

2. Texte de la question

Le texte de la question est saisie de la même façon que pour toute autre type de question.

En bleu, on trouve des formules LaTeX.

En rouge, on a les valeurs des variables (qui sont précédées de {@ et suivies de @} .

En vert, [[input:ans1]] est le champ de saisie de la réponse de l’élève. [[validation:ans1]] permet de visualiser l’interprétation par STACK de la saisie.
Ces deux champs sont présents par défaut dans le texte de la question.

Il est possible d’insérer d’autres champs de réponses : [[input:ans2]] [[validation:ans2]]


3. Input

On définit ici les propriétés du ou des champs de saisie :

  • La taille de la zone de saisie ;
  • La nature de la réponse attendue (numérique, algébrique…),
  • Ce que peut et ne peut pas être écris dans le champ (mot interdit, nombre à virgules…)

On choisit le type d’entrée.

On indique le modèle de réponse qui sera affiché lorsque l’élève aura valider son entrée. (Si Moodle a été configuré pour affiché la bonne réponse)

Nombre maximal de caractères pour la réponse.
15 caractères est la valeur par défaut.

STACK a besoin du symbole opératoire * pour les multiplication.
Il est toutefois possible de lui faire ajouter ce symbole, là où les multiplications sont implicites.
2x n’est pas compris par STACK, il faut saisir 2*x sauf si on a choisi d’insérer des étoiles, là où les multiplications sont implicites.

Ne pas insérer d’étoile :

L’élève doit saisit le symbole * pour indiquer une multiplication.

Si le symbole * n’est pas présent, STACK refuse de valider la réponse de l’élève.

Insérer des étoiles pour les multiplications implicites.

STACK ajoute les symboles *

La saisie est plus naturelle pour les élèves.

On peut suggérer la forme attendue pour la réponse.
Par exemple ?*x+? (Les ? sont à remplacer par l’élève)
Cet indice apparait dans le champ de réponse à compléter.

On peut interdire des « mots » dans la zone de saisie.
Par exemple, on peut interdire l’utilisation de la fonction diff qui permet de dériver ou expand pour développer.

En fonction du paramétrage, les fonctions de plus de 2 caractères peuvent ne pas être autorisées.
Dans ce cas, on indique ici la liste des fonctions qui sont autorisées dans la zone de saisie de la réponse. (Pour notre version de Moodle, les mots de plus de 2 caractères semblent permis)

Il est possible d’interdire les résultats sous la forme de nombres à vigule.

Si des fractions sont saisies dans la réponse, on peut imposer qu’elles soient réduites.
Dans ce cas, la réponse ne pourra pas être validée si la fraction n’est pas réduite.

On demande la vérification du type de réponse saisie.
Si le type ne correspond pas, la validation de la réponse ne sera pas possible.
Par exemple, si on attend une réponse numérique, la saisie « 2x+1 » ne sera pas accepté.

Ce paramétrage permet d’interpréter en temps réel la réponse de l’élève et de l’afficher.

sans vérification
avec vérification

Définit le format de la vérification précédente.
« Yes compact » donne le résultat précédent.
On peut également avoir un texte d’explication avec ou sans les variables identifiées.

Certains type d’input nécessitent des options supplémentaires.


4. Arbre de réponse potentiel

On définit un arbre pour analyser la réponse de l’élève.
Cet arbre est constitué d’un ou plusieurs nœuds.

Voici deux exemples d’arbres qui schématisent l’analyse que STACK effectue sur la réponse de l’élève.

Le 1er arbre est basique. STACK effectue la vérification paramétrée au niveau du nœud 1. Si le test est validé, STACK attribue 1 point, 0 sinon.

Pour le 2e arbre, STACK effectue tout d’abord la vérification paramétrée au niveau du nœud 1. Si le test n’est pas validé, STACK attribue 0 point et l’analyse s’arrête. Si le test du nœud 1 est validé, STACK attribue 0,75 point puis effectue la vérification du nœud 2. En fonction du résultat soit il ajoute 0,25 point ou rien.

On peut ainsi par exemple demander une dérivée sous la forme factorisée. On vérifie que la dérivée est correcte puis on regarde si l’élève a bien saisi une forme factorisée.



On renseigne le type de test à réaliser. Ici on vérifie que l’on a des équivalents algébriques.
SAns (Student Answer) correspond à la réponse fournie par l’élève (telle qu’elle figure dans le texte de la question).
TAns (Teacher Answer) est la bonne réponse à la question. Ici l’expression algébrique g(x) peut être définie dans les variables de question.
Certains type de vérifications nécessite des options.


Si le test réalisé au nœud 1 renvoie vrai on fixe le score à 1 est on stoppe les vérifications.
On pourrait créer un nœud 2 et indiquer dans ce cas, nœud 2 dans « Suivant » pour effectuer un autre test de vérification.


Si le test réalisé au nœud 1 renvoie faux on fixe le score à 0 est on stoppe les vérifications.

On trouve une documentation assez complète (en anglais) concernant les différents tests que l’on peut réaliser sur ce site.


5. Options

Dans les options, on peut personnaliser les Feedback standards.
On peut également choisir le signe de multiplication (Aucun, point, croix).

Pour le reste des options, les choix par défaut, n’ont normalement pas besoin d’être modifiés.


Auteur : Christophe THOMAS, IAN pour les mathématiques dans l’académie de Nancy-Metz.
Date : Juin 2023