Subversion Repositories wimsdev

Rev

Rev 15190 | Rev 15209 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
196 bpr 1
 
15208 lemaire 2
<h2 class="wimscenter">Exercices avec plusieurs questions et autres possibilités avancées</h2>
196 bpr 3
 
15208 lemaire 4
<h3>Exercices ayant plusieurs questions</h3>
5
La commande <span class="tt wims_code_variable">\steps</span> permet de définir des exercices ayant un nombre variable de champs de réponses présentés toutes en même temps ou en plusieurs fois (exercice à étapes).
6
 Par exemple, si vous définissez (parmi d'autres paramètres)
196 bpr 7
 
8
<pre>\steps{choice 1, reply 1
9
choice 2, reply 2, reply 3
10
choice 3
11
}</pre>
8367 bpr 12
l'exercice sera présenté en trois étapes, la première proposant
11241 bpr 13
un choix multiple (choice 1) et une réponse de type <span class="tt wims_code_words">reply</span> (reply 1),
5903 bpr 14
la seconde proposant un choix multiple et deux réponses de type <span class="tt wims_code_words">reply</span>, etc.
15208 lemaire 15
<div>
5903 bpr 16
L'argument de <span class="tt wims_code_variable">\steps</span> accepte des paramètres définis auparavant aussi bien que des définitions
196 bpr 17
conditionnelles de la même manière que pour la définition de paramètres. Cela permet
2663 reyssat 18
de présenter des champs de réponses sélectivement selon des variations aléatoires de
15208 lemaire 19
paramètres, même dans le cas où il n'y a qu'une seule étape.
20
 
21
Par exemple,
22
<pre>
23
\integer{n=randint(1..4)}
24
\text{lisrep=reply1,reply2,reply3,reply4}
25
\text{listrep=\listerep[1..\n]}
26
\steps{\listerep}
27
</pre>
28
permettra de définir un énoncé comportant de 1 à 4 champs de réponses. <br/>
29
Le nombre d'instructions <span class="tt wims_code_variable">\answer</span> que l'exercice comporte est fixe lui. Dans cet exemple, le fichier aura 4 commandes  <span class="tt wims_code_variable">\answer</span>. Celles utilisées pour analyser l'exercice seront les <span class="tt wims_code_words">\n</span> premières.
30
</div><div>
31
Il faut noter que par défaut si une erreur est faite à une étape, les étapes suivantes ne sont pas
32
proposées et sont donc considérées comme fausses
33
(l'option <span class="tt wims_code_words">nonstop</span> peut être ajoutée dans les commandes <span class="tt wims_code_variable">\answer</span> pour que l'exercice continue même en cas d'erreur).
34
</div><div>
5903 bpr 35
Le numéro de l'étape en cours est accessible dans le champ <span class="tt wims_code_words">statement</span>
196 bpr 36
dans la variable
8367 bpr 37
<span class="tt wims_code_variable">\step</span> qui prend donc successivement les valeurs
15208 lemaire 38
 1,2,... à mesure que l'utilisateur avance dans ses réponses.
39
</div><div>
8367 bpr 40
Pour faire des exercices dynamiques à plusieurs étapes
196 bpr 41
(étapes variant selon les réponses de l'étudiant), vous pouvez utiliser
8367 bpr 42
la commande <span class="tt wims_code_variable">\nextstep{...}</span>. L'argument de
5903 bpr 43
<span class="tt wims_code_variable">\nextstep</span> est semblable à celui de <span class="tt wims_code_variable">\steps</span> mais seule la première
196 bpr 44
ligne est effective. Elle n'est utile que si cet argument est une variable qui change
8367 bpr 45
après avec les définitions de paramètres après soumission.
11241 bpr 46
L'exercice s'arrête quand le contenu de <span class="tt wims_code_variable">\nextstep</span> est vide.
15208 lemaire 47
</div><div>
5903 bpr 48
Dans tous les cas, une seule déclaration parmi <span class="tt wims_code_variable">\steps</span> ou <span class="tt wims_code_variable">\nextstep</span>
196 bpr 49
doit apparaître dans un source OEF.
15208 lemaire 50
</div>
51
<div>
52
La commande <span class="tt wims_code_variable">\conditions</span> peut être utilisée en même temps que <span class="tt wims_code_variable">\steps</span> ou <span class="tt wims_code_variable">\nextstep</span> pour définir la liste des numéros des commandes <span class="tt wims_code_variable">\condition</span> qui seront utilisées pour l'analyse des réponses.
53
</div>
14040 bpr 54
 
196 bpr 55
<h3>Branchements conditionnels et boucles</h3>
56
 
57
Commandes disponibles:
58
 
59
<pre>
60
\if{condition}{contenu conditionnel}
61
\if{condition}{contenu_conditionnel}{autre_contenu_conditionnel}
8367 bpr 62
\ifval{condition}{contenu conditionnel}
63
\ifval{condition}{contenu_conditionnel}{autre_contenu_conditionnel}
196 bpr 64
\for{var=n1 to n2}{contenu_de_la_boucle}
8367 bpr 65
\while{condition}{contenu_de_la_boucle} (uniquement dans l'environnement principal)
196 bpr 66
</pre>
8367 bpr 67
Les commandes de branchements conditionnels et de boucles peuvent être utilisées
5903 bpr 68
dans l'environnement principal ou (sauf pour <span class="tt wims_code_words">while</span>)
8367 bpr 69
à l'intérieur de l'énoncé (<span class="tt wims_code_words">statement</span>), d'une aide (<span class="tt wims_code_words">hint</span>),
5903 bpr 70
d'une solution (<span class="tt wims_code_words">solution</span>), d'un feedback (<span class="tt wims_code_words">feedback</span>).
3337 bpr 71
Lorsque ces commandes sont dans l'environnement principal, elles n'affectent
196 bpr 72
que la définition de paramètres.
13759 bpr 73
<p>
74
Attention, dans les commandes <span class="tt wims_code_words">statement</span>,
75
<span class="tt wims_code_words">feedback</span> ..., la variable utilisée
76
pour faire une boucle (ici <span class="tt wims_code_words">var</span>) ne doit pas
77
avoir été déjà définie avant la commande
78
<span class="tt wims_code_words">statement</span>.
79
</p>
15208 lemaire 80
<h3>Cacher le nom d'images</h3>
81
Si l'exercice demande de reconnaître une image prise au hasard, le nom de l'image peut donner
82
une indication à l'exercice. Pour cacher ce nom d'image, vous pouvez écrire dans les parties
83
<span class="tt wims_code_variable">statement</span>,
84
<span class="tt wims_code_variable">feedback</span>, etc
196 bpr 85
 
15208 lemaire 86
<pre>\img{\imagedir/picture.jpg alt="picture"}</pre>
87
 
88
Ainsi dans le source de la page html, l'étudiant pourra voir
89
 
90
<pre>&lt;img src="a_random_unrelated_file_name" alt="picture" /&gt;</pre>
91
 
92
Le vrai nom de l'image est ainsi caché.
93
 
94
<p><b>Remarque</b>. N'utilisez pas directement la commande WIMS <em>rename</em> pour
95
traiter le nom de fichier, sinon l'exercice ne fonctionnera pas correctement dans
96
l'environnement sauvegardé. D'autre part, le nom sera changé uniquement dans le
97
cas où l'exercice est sauvé dans un module et non dans une classe.
98
</p>
99
 
2663 reyssat 100
<h3>Fichiers source prétraités</h3>
196 bpr 101
 
8367 bpr 102
Cette fonctionnalité n'est pas disponible pour Createxo. Vous pouvez
2663 reyssat 103
l'utiliser si vous écrivez des exercices OEF (et Deductio) sous Modtool.
196 bpr 104
<p>
2663 reyssat 105
Elle vous permet d'inclure des parties de codes communes dans plusieurs fichiers OEF.
106
Vous pouvez également l'utiliser pour fabriquer par lots plusieurs oef à partir d'un
107
pré-source, chacun différant des autres par quelques définitions de macros.
7423 bpr 108
</p><p>
2663 reyssat 109
Pour utiliser cette possibilité, un sous-répertoire cpp/ doit être créée sous src. Y mettre
110
les fichiers de pré-source d'extension .cpp. Dans ces fichiers, vous pouvez ajouter
7423 bpr 111
des directives cpp comme <span class="tt wims_code_words">#include</span>,
8367 bpr 112
<span class="tt wims_code_words">#define</span> ou
113
<span class="tt wims_code_words">#if</span>. (Veuillez vous référer aux
2663 reyssat 114
manuels cpp et aux spécifications c pour les détails de la syntaxe.)
7423 bpr 115
</p><p>
2663 reyssat 116
La première ligne du fichier cpp doit définir une liste de cibles (targets), dans le format
11272 bpr 117
</p><pre>
196 bpr 118
target=targ1 targ2 targ3 ...
119
</pre>
2663 reyssat 120
Cette ligne indique que ce fichier cpp doit fabriquer targ1.oef, targ2.oef, etc
8367 bpr 121
(l'extension .oef sera donc ajoutée aux noms de sortie). Lors de la génération du fichier
7423 bpr 122
cible <em>targ1.oef</em>, une macro <em>TARGET_targ1</em> est définie.
2663 reyssat 123
Par conséquent, dans le source cpp, vous pouvez ajouter des lignes comme
196 bpr 124
<pre>
8367 bpr 125
#if defined TARGET_targ1
196 bpr 126
 \title{Exercise 1}
127
 \integer{v1=3}
128
 \text{t1=this is target 1}
129
#endif
8367 bpr 130
#if defined TARGET_targ2
196 bpr 131
 \title{Exercise 2}
132
 \integer{v1=5}
133
 \text{t1=this is target 2}
134
#endif
135
</pre>
2663 reyssat 136
afin de rendre le contenu dépendant de la cible.
196 bpr 137
<p>
8559 bpr 138
Le nom du fichier (dans l'exemple
139
<span class="tt wims_code_words">targ1</span>, ...) est accessible par la variable
140
<span class="tt wims_code_words">OEFFILE</span>.
11272 bpr 141
</p><p>
11063 bpr 142
Dans l'exemple suivant, le titre de l'exercice sera
8559 bpr 143
<span class="tt wims_code_words">targ1</span>
144
</p>
145
<pre>
146
#if defined TARGET_targ1
147
 \title{OEFFILE}
148
 \integer{v1=3}
149
 \text{t1=dit is target 1}
150
#endif
151
</pre>
152
<p>
5903 bpr 153
Les fichiers <span class="tt wims_code_words">include</span> doivent également être placés dans le répertoire src/cpp, avec extension
4892 bpr 154
.inc. Une ligne
11272 bpr 155
</p><pre>
196 bpr 156
#include "common.inc"
157
</pre>
2663 reyssat 158
va insérer le contenu de common.inc dans le fichier généré OEF.
8367 bpr 159
Veuillez noter que pour des raisons de sécurité, il est interdit de
2663 reyssat 160
spécifier des répertoires de fichiers include.
196 bpr 161
<p>
2663 reyssat 162
Une remarque spéciale: cpp s'embrouille lorsque votre fichier contient dans le texte
6978 bpr 163
des apostrophes ou guillemets qui ne sont pas fermés. Dans ce cas, vous pouvez protéger
5903 bpr 164
les commandes contenant ces textes par des commentaires C (<span class="tt wims_code_words">/* ... */</span>).
7423 bpr 165
</p>
196 bpr 166
 
4892 bpr 167
<div class="wims_warning">
8367 bpr 168
<span class="wims_warning">$wims_name_warning</span> : Dans les commandes commençant par # comme dans
169
<span class="tt">#include</span>, le caractère <span class="tt">#</span> doit être le
7423 bpr 170
premier caractère de la ligne. Il ne faut pas non plus utiliser
8367 bpr 171
<span class="tt">#</span> comme caractère de commentaires.
4892 bpr 172
</div>
173
 
196 bpr 174
<h3>Environnement dans un exercice</h3>
15190 bpr 175
<h4>Variable de débogage</h4>
176
La variable spéciale <span class="tt wims_code_variable">\oefenv</span>
177
est utilisée pour tester un exercice
196 bpr 178
(si elle n'est pas redéfinie dans l'exercice).
179
<p>
180
Pour l'instant, le seul contenu possible de cette variable est le mot
15190 bpr 181
<span class="tt wims_code_variable">debug</span>.
182
Ce mot apparaît à l'intérieur de <span class="tt wims_code_variable">\oefenv</span>
7423 bpr 183
dans les situations suivantes.
184
</p>
196 bpr 185
<ol>
787 bpr 186
<li>quand l'exercice est exécuté à l'intérieur de Createxo ;</li>
15190 bpr 187
<li>quand il est testé dans Modtool par le développeur lui-même ;</li>
787 bpr 188
<li>quand l'exercice est dans une classe et exécuté par l'administrateur de la classe.
196 bpr 189
</li>
190
</ol>
787 bpr 191
Dans ces cas, la bonne réponse apparaît par défaut dans les champs de réponse
8367 bpr 192
si vous le demandez, vous permettant de voir ce que l'exercice attend comme
196 bpr 193
réponse sans avoir besoin de remplir vous-même les champs.
194
<p>
195
Vous pouvez ajouter des informations de débogage à l'intérieur de votre exercice
8367 bpr 196
en utilisant des conditions comme
7423 bpr 197
</p>
196 bpr 198
<pre>
199
\if{debug iswordof \oefenv}{informations de débogage à ajouter ici}
200
</pre>
787 bpr 201
Ces informations sont alors automatiquement montrées quand l'exercice
202
est sous test et automatiquement cachées quand les étudiants y travaillent.
15190 bpr 203
 
204
<h4>Autres variables</h4>
205
Deux autres variables d'environnement sont prédéfinies :
206
<span class="tt wims_code_variable">lang</span>
207
et <span class="tt wims_code_variable">presentgood</span>.
15208 lemaire 208
On peut récupérer leur valeur à l'aide de la slib <span class="tt wims_code"> oef/env</span>.
209
<p>
15190 bpr 210
La variable <span class="tt wims_code_variable">lang</span> peut être utilisée
211
pour l'internationalisation des modules.
15208 lemaire 212
</p><p>
213
La variable  <span class="tt wims_code_variable">presentgood</span>  permet de tenir compte,  dans la présentation des textes d'un exercice, de la valeur que l'utilisateur choisira pour le paramétrage "Afficher la bonne réponse" proposé dans l'introduction d'un module oef. Cette variable vaut 0 lorsque la bonne réponse ne doit pas être affichée et 1 sinon.
15190 bpr 214
 
215
Pour l'utiliser, écrire avant le <span class="tt wims_code_variable">\statement</span>
216
<pre>
217
\text{presentgood=}
218
</pre>
219
et après le <span class="tt wims_code_variable">\statement</span>
220
<pre>
221
\text{presentgood=slib(oef/env presentgood)}
222
</pre>
223
Il est alors possible de tester la valeur de cette variable
224
et d'afficher des textes différents selon sa valeur.
225
Attention, sa valeur est vide lors de l'affichage du premier "écran" de l'exercice,
226
puisqu'elle n'est utile que pour l'affichage de textes analysant la réponse
227
de l'élève.
15208 lemaire 228
</p>