Subversion Repositories wimsdev

Rev

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

Rev Author Line No. Line
23 reyssat 1
type=datalist
2
textarea="data"
3
 
4
:Classer les objets selon leurs propriétés, glisser-déposer.
5
 
6
On présente une liste d'objets, et il faut les classer selon leurs
7
propriétés, en les tirant vers les cases prévues avec la souris.
8
<p>
9
Pour construire un exercice avec ce modèle, il suffit d'entrer la liste
10
d'objets et leurs propriétés.
11
<p>
12
Avec une petite modification, une variante de ce modèle peut accepter des
5272 bpr 13
images comme objets.
5131 bpr 14
$image_help
23 reyssat 15
<p>
8002 bpr 16
Auteur du modèle : Gang Xiao <qualite@wimsedu.info>
23 reyssat 17
 
18
:%%%%%%%%%%%%%%%%%      ATTENTION      %%%%%%%%%%%%%%%%%%%%
19
 
2880 bpr 20
Enlevez l'en-tête ci-dessus si vous détruisez les balises pour le modèle !
23 reyssat 21
(Ce sont les lignes qui commencent par un ':'.)
22
Sinon l'exercice risque de ne pas pouvoir repasser sous Createxo.
23
 
24
:%%%%%%%% Paramètres d'exemples à redéfinir %%%%%%%%%%%%%%%%%
25
 
26
:\title{Classer par propriété}
5147 bpr 27
:\author{XIAO, Gang}
8002 bpr 28
:\email{qualite@wimsedu.info}
7137 bpr 29
:\credits{}
23 reyssat 30
 
31
:Nombre d'objets à classer par exercice. Jusqu'à 20.
32
\integer{tot=8}
33
 
34
: Le nombre maximal d'objets présentés ayant une même propriété.
35
Ce nombre doit être strictement plus grand que 1.
36
\integer{max1=4}
37
 
4744 bpr 38
: Le nombre de propriétés à présenter (par défaut le nombre de propriétés)
39
Si le nombre de propriétés est strictement inférieur au nombre de propriétés,
40
un distracteur sera choisi parmi les propriétés non tirées.
41
\text{prop_cnt=}
42
 
23 reyssat 43
:La taille des objets à glisser, en pixels, x fois y.
44
Pensez aux gens qui augmentent la taille de polices de leurs navigateurs !
45
Ne mettez pas les cases trop petites.
46
\text{size1=100x40}
47
 
48
:Liste de propriétés. Jusqu'à 10, séparées par des virgules.
49
\text{prop=Insecte,Oiseau,Mammifère}
50
 
51
:Données principales.
52
Définir un objet par ligne, d'abord le nom,
53
ensuite la propriété, séparés par une virgule. <p>
54
Il vaut mieux définir des données en quantité abondante pour chaque
55
catégorie. <p>
56
Attention à ne pas introduire d'erreurs de frappe dans les propriétés !
57
Sinon l'objet correspondant peut causer des dysfonctionnements de l'exercice.
58
\matrix{data=
59
L'aigle,Oiseau
60
L'albatros,Oiseau
61
L'alouette,Oiseau
62
L'araignée,Insecte
63
La blatte,Insecte
64
Le canard,Oiseau
65
Le chat,Mammifère
66
Le cheval,Mammifère
67
Le chien,Mammifère
68
Le cochon,Mammifère
69
Le corbeau,Oiseau
70
Le criquet,Insecte
71
L'éléphant,Mammifère
72
Le faucon,Oiseau
73
Le goéland,Oiseau
74
La guêpe,Insecte
75
Le lion,Mammifère
76
Le moineau,Oiseau
77
La mouche,Insecte
78
Le moustique,Insecte
79
Le mouton,Mammifère
80
L'oie,Oiseau
81
Le papillon,Insecte
82
Le pigeon,Oiseau
83
Le renard,Mammifère
84
Le rossignol,Oiseau
85
Le scorpion,Insecte
86
Le singe,Mammifère
87
Le tigre,Mammifère
88
La vache,Mammifère
89
Le vautour,Oiseau
90
}
91
 
92
:Mots d'option.
5134 bpr 93
Ajouter le mot <span class="wims_code_words">shuffle</span> si on veut que l'ordre des propriétés soit
94
aléatoire.
23 reyssat 95
\text{option=}
96
 
97
:Texte avant le tableau. Balises html admises.
7137 bpr 98
\text{pre=Classez les animaux ci-dessous selon leurs catégories.}
23 reyssat 99
 
100
:Texte après le tableau. Balises html admises.
101
\text{post=}
102
 
103
:Verbe et article à afficher devant la catégorie classée.
104
\text{estun=est un}
105
 
106
:Comment dire si un objet n'est pas classé ?
107
\text{noclass=n'appartient à aucune catégorie}
108
 
109
:%%%%%%%%%%%%%% Rien à modifier avant l'énoncé %%%%%%%%%%%%%%%%
110
 
111
\integer{pcnt=items(\prop)}
4744 bpr 112
\integer{prop_cnt=\prop_cnt=? \pcnt}
113
\integer{prop_cnt=min(\prop_cnt,\pcnt)}
23 reyssat 114
\integer{datacnt=rows(\data)}
115
\integer{max2=\max1+1}
116
\integer{tot=\tot<\pcnt?\pcnt}
117
\text{prop=\pcnt>1 and shuffle iswordof \option?shuffle(\prop)}
118
 
119
\text{first=}
120
\text{firsti=}
121
\text{second=}
122
\text{secondi=}
4744 bpr 123
\text{dist=}
124
\text{disti=}
125
\for{i=1 to \prop_cnt}{
23 reyssat 126
 \text{t=shuffle(column(1,wims(select \data where column 2 issametext \prop[\i])))}
127
 \integer{s=min(\max1,items(\t))}
128
 \text{first=wims(append item \t[1] to \first)}
129
 \text{firsti=wims(append item \i to \firsti)}
130
 \if{\s > 1}{
131
  \text{second=wims(append item \t[2..\s] to \second)}
132
  \text{secondi=wims(append item wims(makelist \i for x=2 to \s) to \secondi)}
133
 }
134
}
4744 bpr 135
distracteur
136
\if{\prop_cnt<\pcnt}{
137
 \text{t=shuffle(column(1,wims(select \data where column 2 issametext \prop[\prop_cnt+1])))}
138
 \integer{s=min(\max1,items(\t))}
139
 \text{dist=wims(append item \t[1] to \dist)}
140
 \text{disti=wims(append item \i to \disti)}
141
}
23 reyssat 142
 
4744 bpr 143
\if{\tot>\prop_cnt}{
23 reyssat 144
 \integer{scnt=items(\second)}
4744 bpr 145
 \integer{secnt=min(\tot-\prop_cnt,\scnt)}
146
 \integer{tot=\prop_cnt+\secnt}
23 reyssat 147
 \text{sh2=shuffle(\scnt)}
148
 \text{sh2=\sh2[1..\secnt]}
149
 \text{second=item(\sh2,\second)}
150
 \text{secondi=item(\sh2,\secondi)}
151
 \text{all=\first,\second}
152
 \text{alli=\firsti,\secondi}
153
}{
154
 \text{all=\first}
155
 \text{alli=\firsti}
156
}
5272 bpr 157
\text{all=wims(nonempty items \all)}
158
\text{all=wims(listuniq \all)}
23 reyssat 159
\integer{acnt=items(\all)}
160
\text{sh=shuffle(\acnt)}
161
\text{all=item(\sh,\all)}
162
\text{alli=item(\sh,\alli)}
4744 bpr 163
\text{prop=\prop[1..\prop_cnt]}
23 reyssat 164
\text{props=wims(tolower \prop)}
165
\text{alls=wims(tolower \all)}
166
\text{size=\size1 x \max2}
4744 bpr 167
\text{rep=item(1..\prop_cnt,wims(makelist r x for x=1 to 10))}
23 reyssat 168
\steps{\rep}
5272 bpr 169
\integer{distc=\dist!= ? 1 : 0}
170
\conditions{wims(makelist x for x=1 to \acnt + \distc)}
23 reyssat 171
 
172
:%%%%%%%%%%%%% Maintenant l'énoncé en code html. %%%%%%%%%%%%%%%%%%%%
173
 
174
::La commande pour afficher le champs de réponse numéro 3 par exemple,
175
c'est \embed{reply 3,\size} <p>
176
Et le nom de la propriété numéro 4, c'est \prop[4] avec la première lettre
177
en majuscule, ou \props[4] tout en minuscule.
178
 
7137 bpr 179
\statement{<div class="instruction">
180
\pre
181
</div>
182
<table class="wimsnoborder">
5307 bpr 183
\for{k=1 to \prop_cnt}{
7137 bpr 184
 <tr><th>\prop[\k]</th>
11165 bpr 185
 <td style="text-align:left">\embed{reply \k, \size}
23 reyssat 186
 </td></tr>
187
}
188
</table>
4744 bpr 189
\post}
23 reyssat 190
 
191
:%%%%%%%%%%%%% Rien à modifier ci-après. %%%%%%%%%%%%%%%%%5
192
 
7137 bpr 193
\answer{\prop[1]}{\r1;\all,\dist}{type=dragfill}
23 reyssat 194
\answer{\prop[2]}{\r2}{type=dragfill}
195
\answer{\prop[3]}{\r3}{type=dragfill}
196
\answer{\prop[4]}{\r4}{type=dragfill}
197
\answer{\prop[5]}{\r5}{type=dragfill}
198
\answer{\prop[6]}{\r6}{type=dragfill}
199
\answer{\prop[7]}{\r7}{type=dragfill}
200
\answer{\prop[8]}{\r8}{type=dragfill}
201
\answer{\prop[9]}{\r9}{type=dragfill}
202
\answer{\prop[10]}{\r10}{type=dragfill}
203
 
4744 bpr 204
\text{totans=item(1..\prop_cnt,
23 reyssat 205
	wims(items2words \r1),
206
	wims(items2words \r2),
207
	wims(items2words \r3),
208
	wims(items2words \r4),
209
	wims(items2words \r5),
210
	wims(items2words \r6),
211
	wims(items2words \r7),
212
	wims(items2words \r8),
213
	wims(items2words \r9),
214
	wims(items2words \r10))}
215
text{totans=wims(replace internal &#39; to ' in \totans)}
216
\text{clean=}
217
\text{check=}
4744 bpr 218
\for{t=1 to \acnt}{
23 reyssat 219
 \integer{cat=0}
4744 bpr 220
 \for{r=1 to \prop_cnt}{
23 reyssat 221
  \integer{cat=\all[\t] iswordof \totans[\r]?\r}
222
 }
223
 \if{\cat > 0}{
224
  \text{clean=\clean \estun \props[\cat],}
225
  \text{check=\alli[\t]=\cat?\check 1,:\check 0,}
226
 }{
227
  \text{clean=\clean \noclass,}
228
  \text{check=\check 0,}
229
 }
230
}
7137 bpr 231
 
5272 bpr 232
\if{\dist!=}{
233
 \for{t=1 to 1}{
7137 bpr 234
   \integer{cat=0}
235
   \for{r=1 to \prop_cnt}{
236
    \integer{cat=\dist[\t] iswordof \totans[\r]?\r}
237
   }
238
 \if{\cat = 0}{
5272 bpr 239
   \text{clean=\clean \dist[\t] \noclass,}
240
   \text{check=\check 1,}
241
  }{
7137 bpr 242
   \text{clean=\clean \dist[\t] \estun \props[\cat],}
5272 bpr 243
   \text{check=\check 0,}
244
  }
4744 bpr 245
 }
246
}
23 reyssat 247
 
248
\condition{\all[1] \clean[1]}{\check[1]=1}
249
\condition{\all[2] \clean[2]}{\check[2]=1}
250
\condition{\all[3] \clean[3]}{\check[3]=1}
251
\condition{\all[4] \clean[4]}{\check[4]=1}
252
\condition{\all[5] \clean[5]}{\check[5]=1}
253
\condition{\all[6] \clean[6]}{\check[6]=1}
254
\condition{\all[7] \clean[7]}{\check[7]=1}
255
\condition{\all[8] \clean[8]}{\check[8]=1}
256
\condition{\all[9] \clean[9]}{\check[9]=1}
257
\condition{\all[10] \clean[10]}{\check[10]=1}
258
\condition{\all[11] \clean[11]}{\check[11]=1}
259
\condition{\all[12] \clean[12]}{\check[12]=1}
260
\condition{\all[13] \clean[13]}{\check[13]=1}
261
\condition{\all[14] \clean[14]}{\check[14]=1}
262
\condition{\all[15] \clean[15]}{\check[15]=1}
263
\condition{\all[16] \clean[16]}{\check[16]=1}
264
\condition{\all[17] \clean[17]}{\check[17]=1}
265
\condition{\all[18] \clean[18]}{\check[18]=1}
266
\condition{\all[19] \clean[19]}{\check[19]=1}
267
\condition{\all[20] \clean[20]}{\check[20]=1}