Subversion Repositories wimsdev

Rev

Rev 17348 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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