Rev 14972 | Rev 15209 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 14972 | Rev 15107 | ||
---|---|---|---|
Line 1... | Line -... | ||
1 | <h2>Advanced features of OEF</h2> |
- | |
2 | 1 | ||
- | 2 | <h2 class="wimscenter">Possibilités avancées de OEF</h2> |
|
- | 3 | ||
3 | <h3> |
4 | <h3>Cacher le nom d'images</h3> |
4 |
|
5 | Si l'exercice demande de reconnaître une image prise au hasard, le nom de l'image peut donner |
5 |
|
6 | une indication à l'exercice. Pour cacher ce nom d'image, vous pouvez écrire dans les parties |
6 | file name, you can write in parts |
- | |
7 | <span class="tt wims_code_variable">statement</span>, |
7 | <span class="tt wims_code_variable">statement</span>, |
8 | <span class="tt wims_code_variable">feedback</span>, etc |
8 | <span class="tt wims_code_variable">feedback</span>, etc |
9 | 9 | ||
10 | <pre>\img{\imagedir/picture.jpg alt="picture"}</pre> |
10 | <pre>\img{\imagedir/picture.jpg alt="picture"}</pre> |
11 | 11 | ||
12 |
|
12 | Ainsi dans le source de la page html, l'étudiant pourra voir |
13 | 13 | ||
14 | <pre><img src="a_random_unrelated_file_name" alt="picture" /></pre> |
14 | <pre><img src="a_random_unrelated_file_name" alt="picture" /></pre> |
15 | 15 | ||
16 |
|
16 | Le vrai nom de l'image est ainsi caché. |
17 | 17 | ||
18 |
|
18 | <p><b>Remarque</b>. N'utilisez pas directement la commande WIMS <em>rename</em> pour |
19 |
|
19 | traiter le nom de fichier, sinon l'exercice ne fonctionnera pas correctement dans |
20 |
|
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. |
|
21 | </p> |
22 | </p> |
22 | <h3> |
23 | <h3>Exercices à plusieurs étapes</h3> |
23 |
|
24 | Des exercices à plusieurs étapes peuvent être conçus grâce à la commande |
24 |
|
25 | <span class="tt wims_code_variable">\steps</span>. Par exemple, si vous définissez (parmi d'autres paramètres) |
25 | 26 | ||
26 | <pre>\steps{choice 1, reply 1 |
27 | <pre>\steps{choice 1, reply 1 |
27 | choice 2, reply 2, reply 3 |
28 | choice 2, reply 2, reply 3 |
28 | choice 3 |
29 | choice 3 |
29 | }</pre> |
30 | }</pre> |
30 | <p> |
- | |
31 |
|
31 | l'exercice sera présenté en trois étapes, la première proposant |
32 |
|
32 | un choix multiple (choice 1) et une réponse de type <span class="tt wims_code_words">reply</span> (reply 1), |
33 |
|
33 | la seconde proposant un choix multiple et deux réponses de type <span class="tt wims_code_words">reply</span>, etc. |
34 |
|
34 | <p> |
35 |
|
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 |
|
36 | conditionnelles de la même manière que pour la définition de paramètres. Cela permet |
37 | This allows you to selectively present response |
- | |
38 |
|
37 | de présenter des champs de réponses sélectivement selon des variations aléatoires de |
39 |
|
38 | paramètres, même dans le cas où il n'y a qu'une seule étape. |
40 |
|
39 | </p><p> |
41 |
|
40 | Il faut noter que si une erreur est faite à une étape, les étapes suivantes ne sont pas |
42 |
|
41 | proposées et sont donc considérées comme fausses. |
43 | considered all wrong). |
- | |
44 |
|
42 | </p><p> |
45 |
|
43 | Le numéro de l'étape en cours est accessible dans le champ <span class="tt wims_code_words">statement</span> |
46 |
|
44 | dans la variable |
47 | <span class="tt wims_code_variable">\step</span> |
45 | <span class="tt wims_code_variable">\step</span> qui prend donc successivement les valeurs |
48 |
|
46 | 1,2,... à mesure que l'utilisateur avances dans ses réponses. |
49 |
|
47 | </p><p> |
- | 48 | Pour faire des exercices dynamiques à plusieurs étapes |
|
50 |
|
49 | (étapes variant selon les réponses de l'étudiant), vous pouvez utiliser |
51 |
|
50 | la commande <span class="tt wims_code_variable">\nextstep{...}</span>. L'argument de |
52 |
|
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 |
53 |
|
52 | ligne est effective. Elle n'est utile que si cet argument est une variable qui change |
54 |
|
53 | après avec les définitions de paramètres après soumission. |
55 |
|
54 | L'exercice s'arrête quand le contenu de <span class="tt wims_code_variable">\nextstep</span> est vide. |
56 | </p><p> |
55 | </p><p> |
57 |
|
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> |
58 |
|
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>. |
|
59 | </p> |
84 | </p> |
60 | <h3>Conditional branching and loops</h3> |
- | |
61 | 85 | ||
62 | Available commands: |
- | |
63 | - | ||
64 | <pre> |
- | |
65 | \if{condition}{if_content} |
- | |
66 | \if{condition}{if_content}{otherwise_content} |
- | |
67 | \ifval{condition}{if_content} |
- | |
68 | \ifval{condition}{if_content}{otherwise_content} |
- | |
69 | \for{var=n1 to n2}{loop_content} |
- | |
70 | \while{condition}{loop_content} (main environment only) |
- | |
71 | </pre> |
- | |
72 | - | ||
73 | These commands can be used either within statement, hint, solution or |
- | |
74 | feedback, or in the main environment. In the latter case, the conditional |
- | |
75 | execution only affects parameter definitions. |
- | |
76 | - | ||
77 |
|
86 | <h3>Fichiers source prétraités</h3> |
78 | 87 | ||
79 |
|
88 | Cette fonctionnalité n'est pas disponible pour Createxo. Vous pouvez |
80 |
|
89 | l'utiliser si vous écrivez des exercices OEF (et Deductio) sous Modtool. |
81 | <p> |
90 | <p> |
82 |
|
91 | Elle vous permet d'inclure des parties de codes communes dans plusieurs fichiers OEF. |
83 |
|
92 | Vous pouvez également l'utiliser pour fabriquer par lots plusieurs oef à partir d'un |
84 |
|
93 | pré-source, chacun différant des autres par quelques définitions de macros. |
85 | </p><p> |
94 | </p><p> |
86 |
|
95 | Pour utiliser cette possibilité, un sous-répertoire cpp/ doit être créée sous src. Y mettre |
87 |
|
96 | les fichiers de pré-source d'extension .cpp. Dans ces fichiers, vous pouvez ajouter |
88 | cpp |
97 | des directives cpp comme <span class="tt wims_code_words">#include</span>, |
89 |
|
98 | <span class="tt wims_code_words">#define</span> ou |
90 |
|
99 | <span class="tt wims_code_words">#if</span>. (Veuillez vous référer aux |
91 |
|
100 | manuels cpp et aux spécifications c pour les détails de la syntaxe.) |
92 |
|
101 | </p><p> |
93 |
|
102 | La première ligne du fichier cpp doit définir une liste de cibles (targets), dans le format |
94 | </p> |
- | |
95 |
|
103 | </p><pre> |
96 |
|
104 | target=targ1 targ2 targ3 ... |
97 |
|
105 | </pre> |
98 |
|
106 | Cette ligne indique que ce fichier cpp doit fabriquer targ1.oef, targ2.oef, etc |
99 | (the extension .oef will be |
- | |
100 |
|
107 | (l'extension .oef sera donc ajoutée aux noms de sortie). Lors de la génération du fichier |
101 |
|
108 | cible <em>targ1.oef</em>, une macro <em>TARGET_targ1</em> est définie. |
102 |
|
109 | Par conséquent, dans le source cpp, vous pouvez ajouter des lignes comme |
103 | <pre> |
110 | <pre> |
104 | #if defined TARGET_targ1 |
111 | #if defined TARGET_targ1 |
105 | \title{Exercise 1} |
112 | \title{Exercise 1} |
106 | \integer{v1=3} |
113 | \integer{v1=3} |
107 | \text{t1=this is target 1} |
114 | \text{t1=this is target 1} |
108 | #endif |
115 | #endif |
Line 110... | Line 117... | ||
110 | \title{Exercise 2} |
117 | \title{Exercise 2} |
111 | \integer{v1=5} |
118 | \integer{v1=5} |
112 | \text{t1=this is target 2} |
119 | \text{t1=this is target 2} |
113 | #endif |
120 | #endif |
114 | </pre> |
121 | </pre> |
115 |
|
122 | afin de rendre le contenu dépendant de la cible. |
116 | <p> |
123 | <p> |
117 |
|
124 | Le nom du fichier (dans l'exemple |
118 |
|
125 | <span class="tt wims_code_words">targ1</span>, ...) est accessible par la variable |
119 | is available by the variable |
- | |
120 | <span class="tt wims_code_words">OEFFILE</span>. |
126 | <span class="tt wims_code_words">OEFFILE</span>. |
- | 127 | </p><p> |
|
121 |
|
128 | Dans l'exemple suivant, le titre de l'exercice sera |
122 | <span class="tt wims_code_words">targ1</span> |
129 | <span class="tt wims_code_words">targ1</span> |
123 | </p> |
130 | </p> |
124 | <pre> |
131 | <pre> |
125 | #if defined TARGET_targ1 |
132 | #if defined TARGET_targ1 |
126 | \title{OEFFILE} |
133 | \title{OEFFILE} |
127 | \integer{v1=3} |
134 | \integer{v1=3} |
128 | \text{t1=dit is target 1} |
135 | \text{t1=dit is target 1} |
129 | #endif |
136 | #endif |
130 | </pre> |
137 | </pre> |
131 | - | ||
132 | <p> |
138 | <p> |
133 |
|
139 | Les fichiers <span class="tt wims_code_words">include</span> doivent également être placés dans le répertoire src/cpp, avec extension |
134 |
|
140 | .inc. Une ligne |
135 | </p> |
- | |
136 |
|
141 | </p><pre> |
137 | #include "common.inc" |
142 | #include "common.inc" |
138 | </pre> |
143 | </pre> |
139 |
|
144 | va insérer le contenu de common.inc dans le fichier généré OEF. |
140 |
|
145 | Veuillez noter que pour des raisons de sécurité, il est interdit de |
141 |
|
146 | spécifier des répertoires de fichiers include. |
142 |
|
147 | <p> |
143 |
|
148 | Une remarque spéciale: cpp s'embrouille lorsque votre fichier contient dans le texte |
144 |
|
149 | des apostrophes ou guillemets qui ne sont pas fermés. Dans ce cas, vous pouvez protéger |
145 |
|
150 | les commandes contenant ces textes par des commentaires C (<span class="tt wims_code_words">/* ... */</span>). |
146 | </p> |
151 | </p> |
- | 152 | ||
147 | <div class="wims_warning"> |
153 | <div class="wims_warning"> |
148 | <span class="wims_warning">$wims_name_warning</span> : |
154 | <span class="wims_warning">$wims_name_warning</span> : Dans les commandes commençant par # comme dans |
149 | <span class="tt">#include</span>, |
155 | <span class="tt">#include</span>, le caractère <span class="tt">#</span> doit être le |
150 |
|
156 | premier caractère de la ligne. Il ne faut pas non plus utiliser |
151 |
|
157 | <span class="tt">#</span> comme caractère de commentaires. |
152 | </div> |
158 | </div> |
153 | 159 | ||
154 | - | ||
155 | <h3> |
160 | <h3>Environnement dans un exercice</h3> |
156 |
|
161 | La variable spéciale <span class="tt wims_code_variable">\oefenv</span> est utilisée pour tester un exercice |
157 |
|
162 | (si elle n'est pas redéfinie dans l'exercice). |
158 | <p> |
163 | <p> |
159 |
|
164 | Pour l'instant, le seul contenu possible de cette variable est le mot |
160 |
|
165 | ``debug''. Ce mot apparaît à l'intérieur de <span class="tt wims_code_variable">\oefenv</span> |
161 | situations |
166 | dans les situations suivantes. |
- | 167 | </p> |
|
162 |
|
168 | <ol> |
163 | <li> |
169 | <li>quand l'exercice est exécuté à l'intérieur de Createxo ;</li> |
164 | <li> |
170 | <li>quand il est testé dans Modtool par le développeur lui-même</li> |
165 | <li> |
171 | <li>quand l'exercice est dans une classe et exécuté par l'administrateur de la classe. |
- | 172 | </li> |
|
166 | </ol> |
173 | </ol> |
167 |
|
174 | Dans ces cas, la bonne réponse apparaît par défaut dans les champs de réponse |
168 |
|
175 | si vous le demandez, vous permettant de voir ce que l'exercice attend comme |
169 |
|
176 | réponse sans avoir besoin de remplir vous-même les champs. |
170 |
|
177 | <p> |
171 |
|
178 | Vous pouvez ajouter des informations de débogage à l'intérieur de votre exercice |
- | 179 | en utilisant des conditions comme |
|
172 | </p> |
180 | </p> |
173 | <pre> |
181 | <pre> |
174 | \if{debug iswordof \oefenv}{ |
182 | \if{debug iswordof \oefenv}{informations de débogage à ajouter ici} |
175 | </pre> |
183 | </pre> |
176 |
|
184 | Ces informations sont alors automatiquement montrées quand l'exercice |
177 |
|
185 | est sous test et automatiquement cachées quand les étudiants y travaillent. |