Subversion Repositories wimsdev

Rev

Rev 15107 | Rev 17347 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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