DocAide Exercices OEF

Plan

 

Ce document est une introduction à la programmation d'exercices OEF et quelques sources commentés d'exercices. Vous trouverez une présentation des autres documentations utiles dans les conseils de base que vous lirez avant de vous lancer dans la programmation.

Vous pouvez mettre ce document en version imprimable (en haut à droite) pour avoir une vue d'ensemble de son contenu ou faire une recherche sur un mot (à l'aide de la fonction recherche de votre navigateur). Si vous programmez un exercice OEF en même temps, il est conseillé d'ouvrir cette documentation dans un autre signet de votre navigateur.

Les exemples commentés qui émaillent cette présentation sont aussi accessibles par le lien
Analyse d'exemples d'exercices .

Une petite flèche bleue vous indique le lien vers un exemple d'exercice. exemple

conseils de base

 

Le premier exercice dans votre classe

Les sauvegardes

Quand vous envoyez le source, vous pouvez tester votre exercice mais il n'est pas enregistré dans votre classe. Ainsi, si vous fermez alors le navigateur, vous ne retrouverez pas votre source la prochaine fois. Pour l'enregistrer la première fois, utilisez le lien mettre cet exercice dans votre classe. Ensuite vous avez le choix entre L'exercice est complètement contenu dans son source. Recopiez le source dans un fichier texte pour en faire une sauvegarde, pour l'envoyer à un collègue, pour travailler dans une fenêtre plus grande avec les outils d'un éditeur et ensuite coller le source dans la fenêtre de Createxo. Pensez à commenter votre source par des lignes de textes.

Modtool

Vous pouvez aussi créer un exercice dans Modtool si vous avez un compte développeur. Dans Modtool, les exercices OEF sont groupés par modules. Ce sont les modules qui peuvent être publiés (rendus publics).

Utilisation dans une feuille d'exercices

Les exercices de votre classe sont utilisables par les élèves de votre classe si vous faites un lien dans une feuille de travail (insérer).

Documentation

Ce document est une introduction à la programmation des exercices OEF. Il est indispensable de consulter la documentation du serveur. Voici la liste par niveau d'avancement

Comment construire son exercice

Vous n'êtes pas obligé de programmer votre exercice comme l'étudiant le résoudra. Il vaut souvent mieux partir de la réponse pour calculer les données qui apparaîtront dans l'énoncé. Voir Exercice à étape sur les polynômes du second degré .

Analyse d'exemples d'exercices

Un exemple du type correspond
Exemple de compose
Puissances
Pays et capitales
Utilisation de matrices dans un exercice de grammaire
Expressions idiomatiques
Equation d'une droite affine
Noeud
Travail
Base de l'image
Exercice à étape sur les polynômes du second degré
Un exemple du type dragfill
Exemple d'utilisation de click avec des images
Clic sur une image
Exemple élaboré d'exercice utilisant coord
Possibilité d'écrire sur un dessin (réponse à choix)
Exercices à étape
Exercice à trous
Un exemple d'exercices où l'élève doit recommencer
nextstep
Condition

Puissances

 

L'exercice Le fichier
\title Encadrement de nombres décimaux }
\language{ fr }
\author{ Bernadette, Perrin-Riou }
\email{ bpr@math.u-psud.fr}
\computeanswer{ no } 
Le résultat numérique doit être calculé complétement.
\precision{ 10000 } 
Précision du résultat du calcul, ici les réponses sont des entiers, donc cela ne sert à rien.
\integer{ n = randint(3..6) } 
Un entier entre 3 et 6
\integer{ p = random(randint(5..7),randint(1..3)) } 
p sera soit un entier entre 5 et 7 soit un entier entre 1 et 3.
\real{ a = randint(10^( \n)..10^( \n + 1)-1) } 
Un entier entre les deux puissances de 10. On utilise la variable n définie plus haut, on la fait donc précéder de \
\real{ A = \a/10^(\p) }
\real{ sol1 = \n-(\p) }
\real{ sol2 = \n-(\p) + 1 } 
Ici se finissent les définitions permettant de poser l'exercice. On va donc passer à l'énoncé.
\statement{ Donner un encadrement du nombre \( \A)
 par des puissances de 10 consécutives.
 <div class="wimscenter">10<sup><sup>
 \embed{ reply 1,4 } </sup></sup>
 \leq \A < 10
 <sup><sup> \embed{ reply 2,4 } </sup></sup>
 </div> } 
L'énoncé est fini. Le champ \embed permet de demander la réponse à l'intérieur même de l'énoncé. reply 1, reply 2 ... sont les noms à donner aux réponses. Le nombre 4 est la taille du formulaire. On a utilisé du code html pour faire mettre des exposants et pour centrer. On a utilisé du code TeX pour "inférieur ou égal" : \leq ou \( \leq) .
\answer{ exposant }{ \sol1 }{ type=numeric }
\answer{ exposant }{ \sol2 }{ type=numeric } 
Il y a deux réponses attendues. Pour chacune d'elle, on indique un titre, la solution, le type de réponses (numeric, function,...). Les variables \sol1 et \sol2 ont été définies avant l'énoncé.
\hint{ Vous pouvez d'abord écrire le nombre avec la notation scientifique. } 
Voici une aide qui vaut ce qu'elle vaut !
L'exercice

Le fichier

 

\title{ Encadrement de nombres décimaux }
\language{ fr }
\author{ Bernadette, Perrin-Riou }
\email{ bpr@math.u-psud.fr }
\computeanswer{ no }
\precision{ 10000 }
\integer{ n = randint(3..6) }
\integer{ p = random(randint(5..7),randint(1..3)) }
\real{ a = randint(10^(\n)..10^(\n + 1)-1) }
\real{ A = \a/10^(\p) }
\real{ sol1 = \n - (\p) }
\real{ sol2 = \n - (\p) + 1 } 
\statement{ Donner un encadrement du nombre \(\A)
par des puissances de 10 consécutives.
  <div class="wimscenter">10<sup><sup> \embed{ reply 1,4 } </sup></sup>
 \leq \A < 10<sup><sup> \embed{ reply 2,4 } </sup> </sup>
 </div> }
\hint{ Vous pouvez d'abord écrire le nombre avec la notation scientifique. } 
\answer{ exposant }{ \sol1 }{ type=numeric }
\answer{ exposant }{ \sol2 }{ type=numeric }

Structure d'un exercice OEF

 

La programmation d'un exercice OEF a une structure linéaire : la position des commandes dans le programme a de l'importance. On peut distinguer trois zones importantes du programme que nous allons détailler et dont l'exécution correspond à des actions pratiques précises.
Nous les appellerons Avant, Pendant, Après :
Un exemple simple Voici le fichier d'un exercice qui demande de calculer le carré d'un entier choisi aléatoirement et met un avertissement si la réponse donnée est négative :
Avant :
\title{ Le carré d'un entier }
\computeanswer{ no }
\integer{ n = randint(-50..50) }
\integer{ N = \n^2 }
Pendant :
\statement{ Calculer le carré de \n. }
Après :
\answer{ Carré de \n }{ \N }{ type=numeric } \feedback{ \reply1 < 0 }{ Le carré d'un entier est toujours positif. }
Avant : Quand on appelle un exercice ou qu'on le renouvelle, s'exécute la première partie du programme.

Dans cette partie du programme on trouve en particulier :

On utilise une variable déjà définie en la faisant précéder par un \ :
\integer{ a = 3 + 4}
\integer{ b = (\a)^2}
\real{ c = sqrt(\a)}
Pendant : Et voici qu'arrive l'énoncé. C'est ce qui est écrit dans les commandes de type \statement  

\statement{ Enoncé de l'exercice }
\help{ Aide en popup }
\hint{ Indication}
Dans cette partie, on peut utiliser Les cases de réponses peuvent être "immergées" dans le statement ( voir Immersion des cases de réponses )

Attention :

Après : Une réponse a été donnée, il reste à l'analyser.  

Pour cela, il faut déclarer les questions et leurs réponses ainsi que la manière dont elles doivent être analysées. C'est le rôle du type :
\answer { Commentaire }{ \reponse }{ type = mot_reserve}
\choice{ Commentaire }{ \bonchoix }{ \tousleschoix }
Le type est donc quelque chose de très important, il détermine à la fois quel style de réponses est demandé (click, clickfill ou numeric) et comment elles vont être testées (voir les différences entre formal ou algexp ou function).
On peut alors faire une analyse plus précise des réponses avec la commande \condition, utiliser les réponses fournies par l'utilisateur, renvoyer des commentaires (\feedback ou \solution). Si besoin, on peut définir des variables et faire des calculs comme dans la première partie.

Réordonner

 

Voici le fichier d'un exercice qui demande de remettre les parties du spectre électromagnétiques dans l'ordre croissant des longueurs d'onde :
Avant :
\title{ Spectre électromagnétique }
\text{ liste = rayons \(\gamma\),rayons X, ultraviolet,lumière visible,
 infrarouge, micro-ondes, ondes radio}
Pendant :
\statement{ Remettre les parties du spectre dans l'ordre croissant des
longueurs d'onde :

\embed{reply 1 }
}
Après :
\answer{ }{ \liste }{ type = reorder }
 

Un exemple du type correspond

 

\text{ a=Paris,Moscou,Washington }
\text{ b=France,Russie,Etat-Unis } 
\statement{ \embed{ r1 } } 
\answer{ blabla }{ \a;\b }{ type=correspond }
Un exemple très simple de l'emploi du type correspond. On met simplement les éléments qui apparaîtront sur la première colonne puis après le point virgule les éléments correspondants de la deuxième colonne. WIMS se charge de mélanger. Bien sûr dans un vrai exercice, a sera pris dans une plus grande liste.
Tel qu'il est, l'exercice accordera la note 0 ou 10. Si on désire qu'un crédit partiel soit accordé dans le cas où une partie des réponses est juste, on peut rajouter une option à answer :
\answer{ blabla }{ \a;\b }{ type=correspond }{ option=split }
Attention : comparer les deux codes suivants :
\text{ a = 1,2,3 }
\text{ b = 1,1,1 } 
\statement{ } 
\answer{ }{ \a;\b }{ type=correspond } 
\text{ a = 1,2,3 }
\text{ b = 1,1,1 } 
\statement{ } 
\answer{ }{ \b;\a }{ type=correspond } 
Le premier est mieux que le second : s'il peut y avoir des répétitions dans une des colonnes, il faut donc que ce soit celle de droite.

Variables

La plupart des commandes de variables se trouve dans l'aide de Createxo . Mais il vaut mieux l'avoir un peu "feuilleté" pour y trouver ce que l'on a besoin. Dans la rubrique Paramètres aléatoires dans un exercice interactif, il y a la plupart des fonctions ou procédures accessibles.

Boucles et branchements

 

On peut utiliser des boucles et des branchements à la fois pour la définition des variables et dans la partie statement.

\if{ \a = 1 }{\text{ b = 2}}{\text{ b = 3 }}

\text{ b = \a = 1 ? 2 : 3 }
Les deux instructions font la même chose : si a est l'entier 1, alors b est défini comme étant 2, sinon b est défini comme étant 3.
\for{ i = 1 to 10 }{ \text{ b = \b,\i } } 
Boucle qui définit b comme étant une liste commençant par l'ancienne valeur de b, suivi des entiers 1,2,3,4,5,6,7,8,9,10.
\integer{ k = 1 }
\text{ b = \k }
\while{ \k < 10 }{
  \integer{ k = \k+1 }
  \text{ b = \b,\k }
}
Boucle "tant que ... faire..." qui définit b comme étant la liste 1,2,3,4,5,6,7,8,9,10.
Voici un exemple dans la rédaction d'un énoncé :
\text{ a = randint(1..2) }
\statement{On tire \a \if{ \a = 1 }{ boule }{ boules}. }
Un exemple : exemple

Exemples de slib

 

Il existe une bibliothèque de macros qui sont créées au fur et à mesure des besoins des utilisateurs. Voici quelques thèmes concernés par ces macro slib : chimie, graphe, langue, matrice, statistique, dessin.

Pour accéder à la liste des macros existant sur le serveur, cliquer sur WIMS technical documentation Si vous cliquez sur une des commandes, vous obtenez un tableau dans lequel sont indiqués le nom, la signification des paramètres et de temps en temps un exemple de même que la syntaxe à utiliser (Call from OEF / DOC) :

Pour l'utiliser dans un exercice, la syntaxe est la suivante :
\text{ resultat = slib(nom parametre) } 
Voici quelques exemples, mais le mieux est que vous alliez voir.

pour dessiner

Exercice utilisant coord : exemple

draw/clock

\text{ horloge =slib( draw/clock 02:45:33, 120) }
\statement{ \draw{ \horloge}}

lang/frapostrophe

\text{ cheval = slib( lang/frapostrophe de le cheval) }
\text{ ane = slib( lang/frapostrophe de le âne) } 
Résultat : du cheval, de l'âne

Cela est commode si vous voulez faire des énoncés en français par exemple l'atome de chlore, d'oxygène où l'élément chimique est pris au hasard.

\text{ atome = randitem(chlore,oxygène,carbone,hydrogène) }
\text{ datome = slib( lang/frapostrophe de ) }

d'hydrogène

text/comblin

\text{ a = slib(text/comblin [1,2,3] , [\vec{e_1}, \vec{e_3}, \vec{e_2}]) }
\statement{ \(\a) } 
Permet d'écrire et simplifier des combinaisons linéaires même si les deuxièmes termes sont des expressions Tex non évaluables.

stat

On trouvera

Commandes wims

 

Certaines des commandes que l'on trouve dans la documentation technique WIMS technical documentation sont utilisables à travers la commande wims et donnent de grandes facilités de manipulation de texte. Par exemple :
\text{ S = wims(values x^2 for x = 1 to 10) }
\text{ S2 = wims(values exp(x) for x in \S) }
\text{ S3 = wims(nospace a b ) }
\statement{ S = \S;
 S2 = \S2 ; S3 = \S3 } 
Très commode, l'utilisation des commandes WIMS directes. Par exemple ce qui précède permet de donner la liste des carrés de 1 à 10 (pour S) puis leur exponentielle. La commande nospace enlève les espaces.
\text{ A = 3,6,8,9,2 }
\text{ S = wims(replace internal item number 4 by z in \A) }
\text{ T = wims(replace internal 3 by oui,non in \A) }
\statement{ A = \A; S = \S; T = \T } 
pour remplacer rapidement. Il y a d'autres possibilités de replace, voir la documentation technique.
\text{ L = 1,3,7,8,9,10 }
\text{ L= wims(replace item number 3 by non in \L) } 
pour remplacer le troisième élément d'une liste
\text{ L = 1,3,7,8,9,10 }
\text{ L= wims(replace item number 3 by in \L) }
\text{ L= wims(nonempty items \L) } 
pour enlever le troisième élément d'une liste
\text{ L = 1,3,7,8,9,10 }
\text{ L= wims(replace item number 3 by \L[3],oui in \L) } 
pour insérer entre le troisième élément et le quatrième.
\text{ L = wims(values x^2 for x = 1 to 20) }
\text{ L = wims(makelist r x for x = 1 to 20) } 
pour construire rapidement une liste évaluée ou non

Utilisation de logiciels

 

Nous ne parlons ici que de l'utilisation d'un logiciel dans un exercice OEF, bien qu'il en soit de même (souvent plus simple) dans un module WIMS. Si vous ne disposez pas de ces logiciels, vous pouvez les utiliser et faire vos tests à travers Direct exec .

Comment appeler le logiciel

De manière générale, on appelle un logiciel en utilisant la commande exec à travers wims
\text{ a = wims(exec povray ...) }
\text{ a = wims(exec octave ...) } 
Ce qui remplace ... sont des commandes du logiciel.
Il y a deux cas particuliers : pari et maxima.
\text{ a = pari( ...) }
\text{ a = maxima(....) } 
En cas de commande existant à la fois dans wims et dans le logiciel (deux exemples classiques sont random et solve), c'est la commande wims qui a priorité, pour éviter d'y faire appel, il faut rajouter un \ devant la première parenthèse : random\( ... )

Maxima :

Documentation Maxima
\text{ f = sin(x)/x^3 }
\text{ f = maxima(diff(\f,x,2)) } 

Octave :

Documentation Octave
\real{ a = randint(1..10)/10 }
\text{ fonct = \a*t*x }
\text{ reponse = wims(exec octave
 f=@(x,t) \fonct;
 f(4,5))} 
Réponse : pour a=1.

GP/PARI :

Documentation GP/Pari
\integer{ n = randint (20..23) }
\text{ N = pari(factor(\n!+1)) } 
factor(23!+1) =
exemple Base de l'image d'une application linéaire.
Pour plus de détails : Utilisation de Pari .

Réutiliser des commandes

Dans un module OEF, le logiciel reste ouvert entre deux exécutions et l'on peut donc garder des routines ou des variables "ouvertes". Un exemple :
\text{ essai_pari = pari( (f(x) = my(t) ; t=x^2 ; t)) }
\text{ data_pari = pari(a = 2 ; M = 3)
\integer{ n = randint(2..8) }
\text{ f1 = pari(f(\n)) }
\text{ f2 = pari(f(M)) }
\text{ a = pari(a) }
\text{ b = \a^2 }
\text{ c = pari(a^2) } 
Ici, \n appelle une variable définie par wims, M un entier défini dans Pari/GP et appelé par Pari/GP, a est à la fois une variable de WIMS et de Pari/GP et donc on l'appelle par \a dans WIMS et par a dans GP/Pari.
Résultats : essai_pari= ; f1 = ; f2 = ; a = ; b = ^2 ; c = ; M = M ; f = .

Utilisation de programmes internes aux logiciels de calcul

Il est possible d'entrer des programmes dans le langage des logiciels appelés et de les réutiliser ensuite.
Voir des exemples dans Utilisation de Pari

Quelques paramètres par défaut

WIMS :
 precision=10000, print_precision=8
PARI/GP :
 pari_precision=18
Maxima :
 maxima_precision=print_precision
 expon:0; expop:0; factlim:6; prederror: false;
 maxnegex:20; maxposex:20; ratfac:true; keepfloat:true;

Quelques difficultés pouvant être rencontrées

Chaque logiciel a sa manière de prendre les données et de les ressortir. WIMS essaie dans la mesure du possible de passer de l'un à l'autre. Il y a quand même quelques petits problèmes.
Celui qu'on rencontre en premier est le problème des matrices : Une matrice dans GP/Pari ou Octave est de la forme [1,2,3;1,4,5]. GP/Pari renvoie une matrice sous la même forme, mais pas Octave. Et de toute façon, WIMS enlève les crochets de la matrice :
\text{ A = [1,2,3;4,5,6] }
\text{ Aoct = wims(exec octave [1,2,3;4,5,6]) }
\matrix{ Aoct2 = wims(exec octave [1,2,3;4,5,6]) }
\text{ Apari = pari( [1,2,3;4,5,6]) } 
Aoct = 
Aoct2 = 
Apari = 
Octave passe des lignes et Aoct est formé de lignes et les éléments d'une ligne sont séparés par des espaces. On peut utiliser un slib pour la remettre sous forme "normalisée" (sans crochets quand même).
\text{ Boct = slib(text/octavematrix \Aoct) } 
Boct = 
Autre exemple :
\text{ matrice = wims(exec octave
[5^2 *4 + 5,2,3;5,6,7]) }
\text{ matrice = slib(text/octavematrix ) } 
matrice = 

Présentation des questions

 

Il ne suffit pas de poser les questions dans l'énoncé. Pour chaque case de réponses que l'on désire ouvrir, on doit écrire une ligne du type
\answer{ }{ }{ type = xxx}
ou
\choice{ }{ }{ }
Pour \answer : la manière dont la réponse est analysée dépend du troisième argument qui est de la forme type = xxx. Voir Types de réponses pour la liste des types possibles.
Le premier argument est un texte libre, le troisième indique le type de réponses qui est demandé, le second est selon le type la réponse ou une matrice liée à la réponse. Deux autres arguments sont optionnels : { option=} et { weight=}
Il doit donc y avoir autant de lignes avec \answer ou \choice que de questions que l'on désire poser.

Conseils plus avancés

Types de réponses

Il y a plusieurs types de réponses possibles. Il est important de maîtriser les nuances (et de tester ...) car la qualité de l'exercice en dépend. En effet, si la réponse fournie n'est pas interprétée comme on veut, la note va s'en ressentir.
L'aide en ligne est très complète sur ce sujet. Il est donc conseillé d'aller la consulter : Types de réponses. Aide . De plus de nouveaux types de réponses apparaissent.
Grâce à WIMS, vous pouvez traiter (pour revenir à cette page, utiliser la flèche Hist).

numeric

 

\precision { 1000 }
\computeanswer { yes }
\real { a = sqrt(2) }
\statement { rentrer a = \(sqrt(2)) }
\answer { }{ \a }{ type=numeric }
numeric doit être mis en relation avec d'une part, \precision{ M } et d'autre part \computeanswer{ } .
Pour une précision relative , la réponse numérique r est acceptée pour la solution demandée s si et seulement si:
en d'autres termes, Avec \computeanswer{ yes }, des expressions comme sqrt(2) sont acceptées ainsi que 1 + 2. Si vous utilisez ce type, il est conseillé de préciser dans l'énoncé ce que vous demandez.

Types à choix

 

Ces types permettent de disposer de manière variée les questions à choix. Ils sont utilisés en liaison avec \embed. L'utilisation de la commande shuffle permet que les choix ne soient pas toujours donnés dans le même ordre : exemple
Essayez-en un et changez le type pour un de ceux de la liste.
menu
pour un exercice avec des choix imposés présentés dans un menu déroulant (exemple)  

\text{ a=oui, non, pourquoi pas }
\text{ rep=1 }
\statement{ Répondre oui :
 <p class="wimscenter">\embed{ reply1 } </p> }
\answer{ }{ \rep;\a }{ type=menu } 
\rep est le numéro du bon choix dans la liste des choix possibles \a

exemple
click
pour un exercice avec des choix imposés sur lesquels il faut cliquer. exemple
radio
pour un exercice avec des choix imposés présentés avec des boutons.
checkbox
pour un exercice avec des choix imposés présentés avec des boutons mais où plusieurs choix sont possibles. Tous les bons choix sont alors attendus. exemple  

Premier exemple :
\text{ a = oui, non, pourquoi pas }
\text{ rep = 1,2 }
\statement{ Répondre oui ou pourquoi pas :
<div class="wimscenter">\embed{ reply1 } </div> }
\answer{ }{ \rep;\a }{ type=checkbox } 
\rep est le numéro des bons choix dans la liste des choix possibles \a. Tous les bons choix sont demandés
Deuxième exemple :
\text{ a = oui, non, pourquoi pas }
\text{ rep = 1 }
\statement{ Répondre oui :
<ul>
  <li>\embed{ reply1,1 } </li>
  <li>\embed{ reply1,2 } </li>
  <li>\embedreply1,3 } </li>
</ul> }
\answer{ }{ \rep;\a }{ type=checkbox } 
Même "exercice" mais on a disposé autrement les choix, en liste ici : sur la première ligne apparaîtra oui ... Ainsi, à la place de \embed{ reply1,2 } apparaîtra le deuxième choix possible

??

 

  dragfill
La réponse est à choisir parmi des étiquettes : exemple
  clickfill
La réponse est à choisir parmi des étiquettes. On donne ici un exemple plus avancé : exemple
  correspond
utile dans les exercices où on demande de faire correspondre deux listes (attention : il faut qu'il y ait au moins trois objets à faire correspondre pour que l'exercice fonctionne.) exemple
  coord
la réponse sont les coordonnées d'un point choisi sur un dessin avec la souris. exemple
  compose (comparer à dragfill et clickfill)
la réponse est composée à l'aide d'éléments à choisir. exemple

Réutilisation des réponses

 

Vous pouvez réanalyser les réponses envoyées par l'étudiant,

Remplacement des réponses analysées automatiquement

Au lieu de mettre la bonne réponse dans le deuxième champ de answer, mettez un nom de variable non encore utilisée
\answer{ Réponse }{ \nouvelle_var }{ type=numeric}
Le type servira uniquement pour la présentation de la "case"
\condition{ commentaire du test }{ \nouvelle_var = 1 or \nouvelle_var = 2 } 
Dans cet exemple, la réponse doit être égale à 1 ou 2 pour être considérée comme bonne. Le commentaire du test apparaît au moment de l'affichage de l'analyse de la réponse.

Pour une utilisation plus avancée (dans le cas d'un nombre variable de conditions), voir Condition .

Options

Si vous ne désirez pas que ces conditions apparaissent dans le texte de l'analyse de la réponse, par exemple parce que vous préférez rédiger vous même un commentaire dans un feedback, utilisez l'option option=hide. Vous pouvez aussi mettre des poids sur les conditions weight=
\condition{ condition à cacher }{ \reply1 > 2 }{ option=hide }{ weight=1 }
\condition{ condition à cacher }{ \reply1 > 3 }{ option=hide }{ weight=5 } 

Faire un feedback

\feedback{ \reply1 = 3 }{ commentaires } 
les commentaires s'afficheront seulement si la variable \reply1 est égal à 3.
\solution{ texte expliquant la solution } 
Les mots \reply1 ... sont des mots réservés. Dans le cas de types de réponses compliqués, faites les afficher dans un feedback (ils ne contiennent pas toujours ce qu'on attend).
\feedback{ 1=1 }{  } 

Tests préliminaires

Vous pouvez faire des calculs utilisant les réponses de l'étudiant comme dans la première partie ("Avant").
Un exemple d'analyse de réponses sur un texte Test sur un texte

Précision

 

Dans le cas d'un exercice où une réponse numérique est demandée, les deux commandes \precision{ } et \computeanswer{ } sont importantes
Ajouter présentation des slib range et chiffres significatifs

Exercices à étape

 

Un exercice à étapes est un exercice qui ne pose pas toutes les questions à la fois. On pose des questions, si la réponse est juste, on en pose d'autres ...

Etapes dont on peut précalculer toutes les questions

On utilise une commande \steps qui crée automatiquement une variable \step. A chaque fois que l'utilisateur clique sur Répondre, la variable est incrémentée de 1. On peut donc l'utiliser pour décider quel texte doit être vu à un moment donné. exemple
exemple Exercice à étape sur les polynômes du second degré

Nombre variables de questions

Vous avez besoin d'un nombre variables de questions selon les données aléatoires. c'est la commande \step qui vous permettra de résoudre ce problème : on introduit à la fin du source un nombre trop important de \answer{ }{ }{ } et on indique dans \steps{ } les réponses effectivement demandées en fonction des variables aléatoires.
\text{ n = randint (3..5) }
\text{ STEP = wims(makelist r x for x = 1 to \n) }
\steps{ \STEP }
Un exemple détaillé

Etapes qu'on ne peut pas précalculer

Dans certains cas, on désire proposer une suite à l'exercice selon ce qu'aura répondu l'élève et qu'il n'est pas possible de prévoir totalement. Dans ce cas, on ne peut pas définir au départ la liste des r1,..., r10. La commande \steps qui permet de décrire la liste des questions-réponses pour chaque étape est remplacée par la commande \nextstep. Un exemple d'exercices où l'élève doit recommencer
Un autre exemple
Il est conseillé d'indiquer le nombre d'étapes que l'exercice a par exemple dans un environnement <div class="wims_instruction"></div>. Il est aussi recommandé d'indiquer aux étapes les réponses données par l'élève aux questions des étapes précédentes.

Matrices

 

Une matrice dans wims est un tableau pouvant avoir un nombre variable de colonnes selon les lignes.
On le déclare par la commande \matrix{ A = } en allant à la ligne pour chaque nouvelle ligne. Le séparateur sur une ligne est la virgule.
\matrix{ ma_matrice=voici,voilà
un chien, un chat, une porte } 
Remarque : Il faut savoir qu'en interne, la matrice \ma_matrice est
voici,voilà;un chien, un chat, une porte
Il faut donc faire attention aux virgules ou points-virgules qui seraient dans le texte et les remplacer préventivement par le code html ( , &#44; et ; &#59;).

Utilisation des matrices pour réaliser des exercices

Une matrice n'a pas seulement une utilité en mathématiques, mais permet de stocker des données, par exemple celle d'un QCM.
Pays et capitales
Grammaire
Expressions idiomatiques

Utilisation en mathématiques

Mais une matrice garde une utilité en mathématiques à condition de l'utiliser ensuite dans le logiciel pari : Utilisation de Pari

Transformation en html

Vous trouverez ici le code pour mettre une matrice dans un tableau en html : Transformer une matrice en matrice html

Utilisation de slib

Dessins

Ajouter canvasdraw
 

Documentation

La documentation complète des commandes utilisables dans un dessin se trouve dans l'aide de Createxo. Nous attirons votre attention sur le fait que WIMS propose deux commandes draw légèrement différentes pour obtenir des dessins.

Exemples

Avancé

Dans certains exercices (utilisation du type coord sur une image fabriquée, insertion d'une première image dans une seconde), on a besoin du nom de l'image. On le récupère de la manière suivante : la ligne
\text{ url_dessin = draw(200,200
ligne1
ligne2
ligne3) }
\text{ nom_image = slib(oef/insfilename) }
La dernière ligne doit être juste après la définition du dessin (et en tout cas avant le dessin suivant).

Les commandes

 

Commandes (les * désignent des commandes dont je ne suis pas sûre qu'elles existent, en tout cas non testées par moi).
\author : \author{ xxx }
\title : \title{ xxx }
\answer : \answer{ blablabla }{ }{ type=xxx }{ weight = yyy }
\choice : \choice{ xxx }{ test }{ }
\computeanswer : \computeanswer{ yes }
\condition : \condition{ blablabla }{ test }{ option=hide }  (dernier champ optionnel)
\conditions : \conditions{ 1,2,3 }
\email : \email{ xxx }
\feedback : \feedback{ test }{ blablabla }
\help : \help{ xxx }
\hint : \hint{ xxx }
\next : \next{ xxx }
\nextstep : \nextstep{ xxx }
\reply : \reply{ xxx }{ }{ }{ }  = \answer{ }{ }{ }
\solution : \solution{ xxx }
\statement : \statement{ xxx }
\steps : \steps{ reply1, reply2
 reply3,reply4 }
 
ou
\steps{ r1, r2
r3, r4 }(pas d'autres lettres que r)
\complex : \complex{ xxx = yyy }
\function : \function{ f = x^2 }
\language : \language{ fr }
\precision : \precision{ 1000 }
\range : \range{ -5,5 }

\for : \for{ i=1to 5 }{ } \if : \if{ test }{ }{ } Il n'y a pas d'évaluation préliminaire des deux membres de la condition ? : \text{ a = condition ? xx : yy }
ici condition est évaluée. Sans troisième argument, la variable a n'est pas modifiée si condition est faux
\while : \while{ test }{ }
\integer : \integer{ a = yyy }
\matrix : \matrix{ a = yyy }
\rational : \rational{ r = 3/2 }
\real : \real{ r = 3/2 }
\text : \text{ xxx }

*variable : \variable{ xxx } *mdef : \mdef{ { xxx } *parameter : \parameter{ xxx } *plot : \plot{ xxx }
Autres : permettent la définition des variables
column : \text{ a = column(1,xxx) }
deriv : \text{ a = deriv(xxx,x) }
derivative : \text{ a = derivative(xxx,x) }
det : \text{ a = det(xxx) }
diff : \text{ a = diff(xxx,x) }
draw : \text{ a = draw(xxx) }
evaluate : \text{ a = evaluate(x^2,x = 2) }
evalue : \text{ a = evalue(x^2, x = 2) }
htmlmath : \text{ a = htmlmath(xxx) }
int : \text{ a = int(x^2,x= 0 .. 2) }
integral : \text{ a = integral(xxx) }
integrate : \text{ a = integrate(xxx,x=1 .. 2) }
item : \text{ a = item(1,xxx) }
items : \text{ a = items(xxx) }
mathexp_cut : \text{ a = mathexp_cut(xxx) }
maxima : \text{ a = maxima(xxx) }
pari : \text{ a = pari(xxx) }
pickone : \text{ a = pickone(xxx) }
position : \text{ a = position(xxx) }
positionof : \text{ a = positionof(xxx) }
randint : \text{ a = randint(xxx) }
randitem : \text{ a = randitem(xxx) }
random : \text{ a = random(xxx) }
randomitem : \text{ a = randomitem(xxx) }
randomrow : \text{ a = randomrow(xxx) }
randtow : \text{ a = randtow(xxx) }
row : \text{ a = row(2,xxx) }
rows : \text{ a = rows(xxx) }
shuffle : \text{ a = shuffle(xxx) }
simplify : \text{ a = simplify(xxx) }
slib : \text{ a = slib(xxx)}
solve : \text{ a = solve(xxx) }
texmath : \text{ a = texmath(xxx) }
wims : \text{ a = wims(xxx) }  permet d'utiliser du code wims.
yacas : \text{ a = yacas(xxx) }
Noms ayant une signification imposée :
imagedir : \imagedir
confparm1 : \confparm1
confparm2 : \confparm2
confparm3 : \confparm3
confparm4 : \confparm4
step : \step
r1 : r1 pour reply1
Gestion des tableaux :
\matrix{ A = x,y,z
u,v,t }
\statement{ \A[1;3] } 
solve

Rudiments d'HTML et exemples de styles css prédéfinis

L'affichage des exercices se fait sur un navigateur, c'est à dire qu'on utilise le langage html. La mise en forme d'une page utilise les styles css, équivalent les styles d'un traitement de texte. Il existe un nombre incalculable de tutoriels d'apprentissage sur le langage html et les styles css. Vous pouvez aussi utiliser une IA pour générer un code propre et ensuite l'adapter à votre exercice.
La propreté du code est importante car elle peut impacter sur la présentation des exercices. Nous vous conseillons de vérifier le code en soumettant votre page au validateur W3C (voir plus bas).
Nous présentons ici les idées principales.

des balises HTML

Le texte et les médias insérés dans une page web, sont déclarés ou mis en forme en les encadrant par des balises. Les balises sont des chaines de caractères encadrées par les signes < et >. Toute balise ouvrante (<chaine>) est accompagnée d'une balise fermante correspondante (</chaine>), sinon, l'analyse de votre code HTML remontera une erreur.

Division du document


Pour une meilleure accessibilité, nous vous conseillons de préférer les balises <div> et <span> aux tableaux.

Listes

Les balises de liste sont au nombre de trois :

  • <ul>
  • <li>élément 1</li>
  • <li> élément 2</li>
  • </ul>
donne :
  • élément 1
  • élément 2

Tableau

<table class="wimsborder">
 <tr>
  <td> Il était une fois</td>
  <td> un tableau </td>
 </tr>
</table>
Donne, à l'encadrement près :
Il était une fois un tableau
Notez que nous avons utilisé le style css wimsborder qui est un style prédéfini dans WIMS pour tracer les bordures du tableau.

Caractères spéciaux

Le langage html est un langage textuel très simple, de nombreux caractères spéciaux doivent être précisés, comme par exemple, les caractères accentués. Vous trouverez sur la page Codes utiles , la liste des codes permettant d'afficher ces caractères spéciaux.

des styles affectés aux balises

Les styles css permettent de standardiser la mise en forme des balises html. Certains styles s'appliquent sur du texte, ou sur des paragraphes ou sur des conteneurs génériques, comme les styles de mise en forme dans un traitement de texte. Les styles sont soit définis au niveau du serveur WIMS lui-même (styles par défaut), soit définis dans le code de l'exercice en utilisant la commande . Nous vous conseillons d'utiliser les styles pas défaut dans la mesure du possible car la présentation de votre exercice sera ainsi en cohérence avec les couleurs du serveur.

Appliquer un style

Les styles sont affectés à la balise en ajoutant dans cette balise l'ordre class="nom du style". Dans les exemples suivants, des styles prédéfinis dans WIMS sont utilisés.
Vous souhaitez centrer une phrase. Vous allez écrire le code suivant :
<div class="center">Vous souhaitez centrer une phrase.</div>

Vous obtiendrez le résultat suivant :
Vous souhaitez centrer une phrase.
Pour mettre en évidence un ensemble de mots dans la phrase, vous allez écrire :
<span class="wims_emph">un ensemble de mots</span>
Vous obtiendrez:
un ensemble de mots

Utiliser les styles css prédéfinis dans WIMS

La liste complète des styles css par défaut est disponible dans la documentation oef. En voici quelques exemples, les plus pratiques.
de votre exercice et d'utiliser le style wims_instruction pour donner les instructions indispensables.
Pour une meilleure homogénéité, nous vous conseillons d'utiliser le style wims_question pour mettre en évidence la question de votre exercice et d'utiliser le style wims_instruction pour donner les instructions indispensables.
<div class="wims_question">Écrivez le verbe de la phrase :
<div>Le chat mange la souris.</div>
</div>
<div class="wims_instruction">On écrira le verbe à l'infinitif et en minuscules. Attention aux accents !</div>
donne :
Écrivez le verbe de la phrase :
Le chat mange la souris.
On écrira le verbe à l'infinitif et en minuscules. Attention aux accents !
Il est recommandé de garder l'esprit de ces styles (ne pas utiliser par exemple oef_indgood pour un autre emploi que celui indiqué)

Utiliser ses propres styles

Vous pouvez insérer vos propres styles dans vos exercices en utilisant la commande . Par exemple, la séquence suivante permet de définir la mise en forme de la balise h3 et d'une classe appelée autre qui surligne le en vert le contenu du conteneur sur lequel s'applique la classe (<span class="autre">).
\css { <style>
h3{ background-color:#D9D2C0;
font-size:110%;
padding-left:0.3em; }
.autre{ background-color:green}
<style> }

la vérification du code html

Utilisez le validateur en ligne, par exemple https://validator.w3.org. Donnez l'adresse de votre exercice (vous la trouverez sous l'icône "à propos" lorsque vous avez lancé votre exercice).
Par exemple, l'exercice puissance
Attention, certaines erreurs ou avertissement sont issues du code de WIMS, en particulier les commentaires sur l'encodage des pages. Si les erreurs ne mentionnent pas les lignes de code de votre exercice, n'en tenez pas compte.

Le premier dépannage

 

Votre programme ne marche pas ?

document d'aide à la programmation d'exercices OEF.
: wimshelp, interactive mathematics, interactive math, server side interactivity


Cette page n'est pas dans son apparence habituelle parce que WIMS n'a pas pu reconnaître votre navigateur web.
Afin de tester le navigateur que vous utilisez, veuillez taper le mot wims ici : puis appuyez sur ``Entrer''.

Veuillez noter que les pages WIMS sont générées interactivement; elles ne sont pas des fichiers HTML ordinaires. Elles doivent être utilisées interactivement EN LIGNE. Il est inutile pour vous de les ramasser par un programme robot.