Parfois le test des réponses par WIMS déconcerte les étudiants par la précision exigée. En sciences physiques ou chimiques, les données ne comportent pas des dizaines de décimales et l’essentiel est une réponse de bon ordre de grandeur. Dans ces cas de figure, l’utilisation des chiffres significatifs peut poser les mêmes problèmes que l’utilisation de la précision et l’enseignant souhaite pouvoir accepter une réponse dans un intervalle donné.
Le but de cet article est de partager des pratiques. J’attends vos commentaires.
Précision par défaut dans un exercice
La précision est définie au début de l’exercice, prec=1000 par défaut.
La réponse est considérée comme juste pour
∣reponse−bonne_reponse∣ ≤ M(prec)
avec M(prec)=max(∣reponse∣+∣bonne_reponse∣,1/prec)/prec
Arrondi
On dispose des fonctions suivantes pour arrondir la réponse à donner.
- ceil( ) le plus petit entier supérieur
- floor( ) le plus grand entier inférieur
- rint( ) l’entier le plus proche
Nombre de décimales pour afficher un nombre
Exemple 1
Pour imposer le nombre de décimales à afficher, par exemple pour que le pH soit affiché avec 2 décimales, on peut utiliser rint (l’entier le plus proche) pour un pH déjà calculé :
\real{pH = rint(100*(\pH))/100}
Exemple 2
On peut aussi utiliser moneyprint à condition de l’appliquer à un nombre déjà calculé. L’aide de cette commande se trouve par le chemin : Documentation, WIMS technical documentation puis Interfaces to external software packages.
La commande moneyprint renvoie un nombre (ou plusieurs nombres) avec un nombre donné de décimales (par défaut 2 décimales) .
Exemples : Le nombre x = 245.534 avec deux décimales est xx = 245.53. Le nombre y = 245.537 avec deux décimales est yy = 245.54.
Code dans un exercice
\real{x=245.534}
\text{xx=wims(exec moneyprint \x 2)}
\real{y=245.537}
\text{yy=wims(exec moneyprint \y 2)}
Nombre de chiffres significatifs
La slib sigunits permet d’imposer une nombre de chiffres significatifs et même une unité. Aide pour cette slib
Un type de réponse sigunits y correspond, consulter l’aide de createxo / types de réponse.
Ces différentes façons d’arrondir une valeur permettent de préciser l’intervalle où la réponse est acceptée.
Le type de réponse qui admet des valeurs dans un intervalle est range.
Dans l’aide de Createxo, dans la partie types de réponses, chercher range.
Exemple 1
Si on attend une précision de 0,01 sur le deuxième chiffre après la virgule, on définit l’intervalle pour le type de réponse range ainsi (ici \pH2 est la valeur du pH avec deux décimales).
\real{tolerance=0.01}
\text{rangepH = \pH2-\tolerance,\pH2+\tolerance}
La réponse est alors du type range :
\answer{}{\rangepH}{type=range}
On peut ajouter cette consigne pour éviter que les étudiants s’inquiètent de la précision.
Il suffit de deux chiffres après la virgule qui, elle, doit être remplacée par un point.
Exemple 2
Dans un exercice, on demande d’abord la concentration puis le nombre de goutes. Dans le source, on calcule une valeur approchée à deux chiffres significatifs de la concentration :
\text{concarr=slib(text/sigunits \conc ,2)}
Ensuite on utilise la slib text/approximation (voir l’aide) qui renvoie les bornes de l’intervalle et la valeur arrondie, par exemple :
\text{A=slib(text/approximation 45.987543,5,10)}
résultat
45.978,45.998,45.988
Ainsi on définit l’intervalle en prenant les deux premiers termes. La réponse sera acceptée avec une tolérance de 1 sur le dernier des deux chiffres significatifs :
\text{rangeconc = item(1..2,slib(text/approximation \concarr,2,1))}
La syntaxe de la réponse est \answer{}{\rangeconc}{type=range}
Ensuite on calcule les bornes de l’intervalle pour le nombre de gouttes (un entier) à ajouter en utilisant les valeurs approchées de la concentration obtenues au-dessus. Pour ceil( . ) et floor( . ) voir plus haut.
borne inférieure
\integer{gouttesinf=floor(item(1,slib(text/approximation \concarr,2,1))*\V/(\concajout*\vol1goutte))}
\if{\gouttesinf=0}{\integer{gouttesinf=1}}
borne supérieure
\integer{gouttessup=ceil(item(2,slib(text/approximation \concarr,2,1))*\V/(\concajout*\vol1goutte))}
\text{rangegoutte=\gouttesinf,\gouttessup}
La syntaxe de la réponse est alors :
\answer{}{\rangegoutte}{type=range}