Subversion Repositories wimsdev

Rev

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