Bien que WIMS puisse faire des exercices beaucoup plus sophistiqués, il peut aussi faire des exercices du type QCM ou exercices à trous. Cela est très utile dans les disciplines non scientifiques. Par contre, il n'y a pas d'outil permettant de créer ces exercices sans "rien voir de la technique".
Pour aider les utilisateurs, nous donnons ici quelques exemples en expliquant le code. On peut d'abord les utiliser tels quels, puis en comprenant le code les adapter à son utilisation personnelle. En effet, une fois passée la difficulté de compréhension du code, il est possible de créer sa variante adaptée à son type de données, de feedback.
La présentation que nous donnons ici ainsi que les sources nécessite d'avoir un compte Modtool ( DocAide Modules d'exercices OEF ). Il serait possible de faire ces exercices à partir d'une classe, mais si vous avez beaucoup de questions ou d'exigences, cela sera beaucoup plus simple à partir d'un compte Modtool. Aussi avons-nous pris ce parti.
Sauf erreur de notre part, vous pouvez recopier le fichier source, le mettre dans votre module sous un nom du type src/toto.oef, créer un fichier data dans le module selon la description qui en est faite dans chacun des exemples et ... obtenir un exercice ....
Dans l'exercice décrit dans la suite, toutes les questions du fichier sont affichées dans l'ordre où elles ont été écrites. Le nombre de choix peut être différent selon les questions.
Le fichier de données data1 doit être de la forme
:texte de la question 1 numéro de la réponse choix1 choix2 choix3:texte de la question 2 numéro de la réponse choix1 choix2 choix3
Vous pouvez recopier Source QCM 1 dans src/qcm.oef et sauf erreur de ma part, votre qcm devrait fonctionner. Vous pouvez/devez le nombre de questions, le nom du fichier de données, le type de réponses : checkbox au lieu de radio:
Voici quelques explications sur le code :
\title{QCM sans feedback (toutes les questions)} \text{N = 3} Nom du fichier \text{data = data1} \integer{cnt_question = wims(recordcnt \data)}\text{bat = shuffle(\cnt_question)}
\matrix{question = } \matrix{rep = } \text{CNT_choix = } \matrix{CHOIX = } \for{i = 1 to \N }{ \matrix{QUEST = wims(record \bat[\i] of \data)} \matrix{question = \question \QUEST[1;]}
\integer{cnt_choix = rows(\QUEST)-2} \text{CNT_choix = \CNT_choix,\cnt_choix} \text{Choix = } \text{mix = shuffle(\cnt_choix)} \for{ j = 3 to \cnt_choix + 2}{ \text{choix = \QUEST[\j;]} \matrix{Choix = \Choix, \choix[1;]} } \text{Choix = wims(nonempty items \Choix)} \text{Choix = \Choix[\mix]}
\matrix{CHOIX = \CHOIX \Choix} \text{H = wims(nospace \QUEST[2;])} \text{pos = } \for{r in \H}{ \text{pos = \pos,position(\r,\mix)} } \text{pos = wims(nonempty items \pos)} \matrix{rep = \rep \pos} \matrix{rep = \rep position(\H,\mix)} }
\text{CNT_choix = wims(nonempty items \CNT_choix)} \text{STEP = wims(makelist r x for x = 1 to \N)} \steps{\STEP}\statement{ Répondre aux questions <ol> \for{h = 1 to \N}{ <li>\question[\h;] <ul> \for{s=1 to \CNT_choix[\h]}{ <li> \embed{reply \h , \s } </li> } </ul> </li> } </ol> }\answer{}{\rep[1;];\CHOIX[1;]}{type=radio} \answer{}{\rep[2;];\CHOIX[2;]}{type=radio} \answer{}{\rep[3;];\CHOIX[3;]}{type=radio} \answer{}{\rep[4;];\CHOIX[4;]}{type=radio} \answer{}{\rep[5;];\CHOIX[5;]}{type=radio} \answer{}{\rep[6;];\CHOIX[6;]}{type=radio} \answer{}{\rep[7;];\CHOIX[7;]}{type=radio} \answer{}{\rep[8;];\CHOIX[8;]}{type=radio} \answer{}{\rep[9;];\CHOIX[9;]}{type=radio} \answer{}{\rep[10;];\CHOIX[10;]}{type=radio} \answer{}{\rep[11;];\CHOIX[11;]}{type=radio} \answer{}{\rep[12;];\CHOIX[12;]}{type=radio} \answer{}{\rep[13;];\CHOIX[13;]}{type=radio}
On peut remplacer radio par checkbox si plusieurs réponses sont possibles.
\title{QCM sans feedback (toutes les questions en même temps)} nombre de questions \text{N = 3}Nom du fichier appelé \text{data = data1}
\integer{cnt_question = wims(recordcnt \data)} \text{bat = shuffle()}
\matrix{question = } \matrix{rep = } \text{CNT_choix = } \matrix{CHOIX = } \for{i = 1 to \N }{ \matrix{QUEST = wims(record \bat[\i] of \data)} \matrix{question = \question \QUEST[1;]} \integer{cnt_choix = rows(\QUEST)-2} \text{CNT_choix = \CNT_choix,\cnt_choix} \text{Choix = } \text{mix = shuffle(\cnt_choix)} \for{ j = 3 to \cnt_choix + 2}{ \text{choix = \QUEST[\j;]} \matrix{Choix = \Choix, \choix[1;]} } \text{Choix = wims(nonempty items \Choix)} \text{Choix = \Choix[\mix]} \matrix{CHOIX = \CHOIX \Choix} \text{H = wims(nospace \QUEST[2;])} \text{pos = } \for{r in \H}{ \text{pos = \pos,position(\r,\mix)} } \text{pos = wims(nonempty items \pos)} \matrix{rep = \rep \pos} }
\text{CNT_choix = wims(nonempty items \CNT_choix)}
\text{STEP = wims(makelist r x for x = 1 to \N)} \steps{\STEP}
\statement{ Répondre aux questions <ol> \for{h = 1 to \N}{ <li>\question[\h;] <ul> \for{s = 1 to \CNT_choix[\h]}{ <li> \embed{reply \h , \s } </li> } </ul> </li> } </ol> }\answer{}{\rep[1;];\CHOIX[1;]}{type=radio} \answer{}{\rep[2;];\CHOIX[2;]}{type=radio} \answer{}{\rep[3;];\CHOIX[3;]}{type=radio} \answer{}{\rep[4;];\CHOIX[4;]}{type=radio} \answer{}{\rep[5;];\CHOIX[5;]}{type=radio} \answer{}{\rep[6;];\CHOIX[6;]}{type=radio} \answer{}{\rep[7;];\CHOIX[7;]}{type=radio} \answer{}{\rep[8;];\CHOIX[8;]}{type=radio} \answer{}{\rep[9;];\CHOIX[9;]}{type=radio} \answer{}{\rep[10;];\CHOIX[10;]}{type=radio} \answer{}{\rep[11;];\CHOIX[11;]}{type=radio} \answer{}{\rep[12;];\CHOIX[12;]}{type=radio} \answer{}{\rep[13;];\CHOIX[13;]}{type=radio}
Dans le QCM suivant, les questions sont données une par une, les réponses aux questions précédentes s'affichent mais le QCM s'arrête à la première faute. Source QCM 2
\title{QCM : question une par une} \text{N = 3} \text{data = data1} \integer{cnt_question = wims(recordcnt \data)} \text{bat = shuffle(\cnt_question)}\matrix{question = } \matrix{rep = } \text{CNT_choix = } \matrix{CHOIX = } \for{i = 1 to \N }{ \matrix{QUEST = wims(record \bat[\i] of \data)} \matrix{question = \question \QUEST[1;]} \integer{cnt_choix = rows(\QUEST)-2} \text{CNT_choix = \CNT_choix,\cnt_choix} \text{Choix = } \text{mix = shuffle(\cnt_choix)} \for{ j = 3 to \cnt_choix + 2}{ \text{choix = \QUEST[\j;]} \matrix{Choix = \Choix, \choix[1;]} } \text{Choix = wims(nonempty items \Choix)} \text{Choix = \Choix[\mix]} \matrix{CHOIX = \CHOIX \Choix} \text{H = wims(nospace \QUEST[2;])} \text{pos = } \for{r in \H}{ \text{pos = \pos,position(\r,\mix)} } \text{pos = wims(nonempty items \pos)} \matrix{rep = \rep \pos} }
\text{CNT_choix = wims(nonempty items \CNT_choix)}
\text{STEP = wims(makelist r x for x = 1 to \N)} \text{STEP = wims(replace internal , by ; in \STEP)} \steps{\STEP}
\statement{Read the text above then answer the questions. \for{h = 1 to \step}{ <p> \question[\h;] \if{\h < \step}{ <font color = green>\CHOIX[\h;\rep[\h;]]</font> </p>} {</p><ol> \for{s = 1 to \CNT_choix[\h]}{ <li>\embed{reply \h , \s }</li> } </ol></li> } } }\answer{}{\REP[1;];\CHOIX[1;]}{type=radio} \answer{}{\REP[2;];\CHOIX[2;]}{type=radio} \answer{}{\REP[3;];\CHOIX[3;]}{type=radio} \answer{}{\REP[4;];\CHOIX[4;]}{type=radio} \answer{}{\REP[5;];\CHOIX[5;]}{type=radio} \answer{}{\REP[6;];\CHOIX[6;]}{type=radio} \answer{}{\REP[7;];\CHOIX[7;]}{type=radio} \answer{}{\REP[8;];\CHOIX[8;]}{type=radio}
\title{QCM : question une par une} \text{N = 3} \text{data = data1} \integer{cnt_question = wims(recordcnt \data)} \matrix{question = } \matrix{rep = } \text{CNT_choix = } \matrix{CHOIX = } \for{i = 1 to \N }{ \matrix{QUEST = wims(record \i of \data)} \matrix{question = \question \QUEST[1;]} \integer{cnt_choix = rows(\QUEST)-2} \text{CNT_choix = \CNT_choix,\cnt_choix} \text{Choix = } \text{mix = shuffle(\cnt_choix)} \for{ j = 3 to \cnt_choix + 2}{ \text{choix = \QUEST[\j;]} \matrix{Choix = \Choix, \choix[1;]} } \text{Choix = wims(nonempty items \Choix)} \text{Choix = \Choix[\mix]} \matrix{CHOIX = \CHOIX \Choix} \text{H = wims(nospace \QUEST[2;])} \text{pos = } \for{r in \H}{ \text{pos = \pos,position(\r,\mix)} } \text{pos = wims(nonempty items \pos)} \matrix{rep = \rep \pos} }\text{CNT_choix = wims(nonempty items \CNT_choix)}
\text{STEP = wims(makelist r x for x = 1 to \N)} \text{STEP = wims(replace internal , by ; in \STEP)} \steps{\STEP}
\statement{Répondre aux questions : \for{h = 1 to \step}{ <p> \question[\h;] \if{\h < \step}{ <font color=green>\CHOIX[\h;\rep[\h;]]</font> </p>} {</p><ol> \for{s = 1 to \CNT_choix[\h]}{ <li>\embed{reply \h , \s }</li> } </ol> } } }\answer{}{\rep[1;];\CHOIX[1;]}{type=radio} \answer{}{\rep[2;];\CHOIX[2;]}{type=radio} \answer{}{\rep[3;];\CHOIX[3;]}{type=radio} \answer{}{\rep[4;];\CHOIX[4;]}{type=radio} \answer{}{\rep[5;];\CHOIX[5;]}{type=radio} \answer{}{\rep[6;];\CHOIX[6;]}{type=radio} \answer{}{\rep[7;];\CHOIX[7;]}{type=radio} \answer{}{\rep[8;];\CHOIX[8;]}{type=radio}
Voici un QCM où les réponses sont analysées à la fin de toutes les questions. Le nombre de questions peut être variable (N), seules les conditions utiles servent. Le fichier de données correspondant est le même que pour les deux types de QCM précédents
\title{QCM : question une par une} \text{N = 3} \text{data = data1} \integer{cnt_question = wims(recordcnt ) } \text{bat = shuffle()} \matrix{question = } \matrix{rep = } \text{CNT_choix = } \matrix{CHOIX = } \for{i = 1 to \N }{ \matrix{QUEST = wims(record \bat[\i] of )} \matrix{question = \question \QUEST[1;]} \integer{cnt_choix = rows(\QUEST)-2} \text{CNT_choix = \CNT_choix,\cnt_choix} \text{Choix = } \text{mix = shuffle(\cnt_choix)} \for{ j = 3 to \cnt_choix + 2}{ \text{choix = \QUEST[\j;]} \matrix{Choix = \Choix, \choix[1;]} } \text{Choix = wims(nonempty items \Choix)} \text{Choix = \Choix[\mix]} \matrix{CHOIX = \CHOIX \Choix} \text{H = wims(nospace \QUEST[2;])} \text{pos = } \for{r in \H}{ \text{pos = \pos,position(\r,\mix)} } \text{pos = wims(nonempty items \pos)} \matrix{rep = \rep \pos} }\text{CNT_choix = wims(nonempty items \CNT_choix)}
\text{STEP = wims(makelist r x for x = 1 to \N)} \text{STEP = wims(replace internal , by ; in \STEP)} \text{CONDITION = wims(makelist x for x = 1 to \cnt_question)} \steps{\STEP} \conditions{\CONDITION}
\statement{ \for{h = 1 to \step}{ <p> \question[\h;] \if{\h < \step}{ <font color=green>\CHOIX[\h;\rep[\h;]]</font> </p>} {</p><ol> \for{s = 1 to \CNT_choix[\h]}{ <li>\embed{reply \h , \s }</li> } </ul></li> } </ol> } }\answer{}{\REP1;\CHOIX[1;]}{type=radio} \answer{}{\REP2;\CHOIX[2;]}{type=radio} \answer{}{\REP3;\CHOIX[3;]}{type=radio} \answer{}{\REP4;\CHOIX[4;]}{type=radio} \answer{}{\REP5;\CHOIX[5;]}{type=radio} \answer{}{\REP6;\CHOIX[6;]}{type=radio} \answer{}{\REP7;\CHOIX[7;]}{type=radio} \answer{}{\REP8;\CHOIX[8;]}{type=radio} \answer{}{\REP9;\CHOIX[9;]}{type=radio} \answer{}{\REP10;\CHOIX[10;]}{type=radio}\condition{Question 1 : \REP1}{\REP1 issametext \CHOIX[1;\rep[1;]]} \condition{Question 2 : \REP2}{\REP2 issametext \CHOIX[2;\rep[2;]]} \condition{Question 3 : \REP3}{\REP3 issametext \CHOIX[3;\rep[3;]]} \condition{Question 4 : \REP4}{\REP4 issametext \CHOIX[4;\rep[4;]]} \condition{Question 5 : \REP5}{\REP5 issametext \CHOIX[5;\rep[5;]]} \condition{Question 6 : \REP6}{\REP6 issametext \CHOIX[6;\rep[6;]]} \condition{Question 7 : \REP7}{\REP7 issametext \CHOIX[7;\rep[7;]]} \condition{Question 8 : \REP8}{\REP8 issametext \CHOIX[8;\rep[8;]]} \condition{Question 9 : \REP9}{\REP9 issametext \CHOIX[9;\rep[9;]]} \condition{Question 10 : \REP10}{\REP10 issametext \CHOIX[10;\rep[10;]]}
Si l'on désire que les questions du QCM contiennent des variables, on ne peut pas mettre les questions dans un fichier à part
Deux possibilités quand même
\text{texte = {Il, Elle} a un {parapluie,sac}} \text{texte = wims( embraced \texte)}
Sera choisi au hasard l'une des quatres phrases
Il a un parapluie Il a un sac Elle a un parapluie Elle a un sac
\text{prenom = randitem(Jean,Pierre)} \text{texte = wims(replace internal XXXX by \prenom in \texte)}
A partir de ce qu'on a vu précédemment, on peut imaginer d'autres manières de rentrer les données, envisager de mettre des feedback selon les questions et les réponses. Le tout est d'organiser ces données de manière systématique selon vos besoins et le type d'informations.
Donnons un exemple : il y aura un nombre variable de réponses, plusieurs réponses possibles, un feedback pour certaines réponses fausses :
On peut par exemple avoir un fichier dataqcm de la forme suivante
question nombre de questions numero des bons choix choix1 choix2 ... feedback1 feedback2 ...
le fichier source de l'exercice OEF pourrait être par exemple
\title{QCM avec feedback} \language{fr} \author{E.Durand} \format{html}\matrix{Q = wims(randrecord dataqcm)} \text{enonce = \Q[1;]} \text{n = \Q[2;]} \text{reponse = \Q[3;]} \text{choixetfeed = \Q[4..-1;]} \text{choix = \choixetfeed[1..\n;]} \text{verite = \choix[\reponse;]} \text{choix = wims(replace internal ; by , in \choix)} \text{feed = \choixetfeed[\n+1..-1;]} \text{feed = wims(replace internal ; by , in \feed)}
\text{verite1 = <ul><li>wims(replace internal ; by </li><li> in \verite)</li></ul>}
\statement{<b>\enonce : </b></p> <ul> \for{i = 1 to \n}{ <li TYPE=A> \embed{reply1,\i} </li>} </ul> }\answer{Question 1}{\reponse;\choix}{type=checkbox} \solution{\verite1} \text{commentaire = REMARQUES : <br>} \for{i = 1 to \n}{ \text{commentaire = \commentaire <B>item(\i,A,B,C,D,E) - \choix[\i] :</B>} \if{ (\choix[\i] isin \reply1) and \i isitemof \reponse } { \text{ajout = <i>vrai en effet</i><br>} } { \if{ (\choix[\i] isin \reply1 or \i isitemof \reponse)} {\text{ajout = \feed[\i] <br>}} {\text{ajout = <i>faux en effet</i><br>}} } \text{commentaire = \commentaire \ajout } } \feedback{1 = 1}{\commentaire }
Nous donnons ici un exemple de programmes permettant de créer un texte à trous à compléter par exemple à l'écoute d'un texte. Beaucoup de variantes sont possibles.
Il s'agit d'une version très simple.
image_common=yes
\title{Texte à trous (dictée)} \text{cnt_record = wims(recordcnt data)} \text{H = randint(\cnt_record)} \text{texte = wims(record \H of data)}
\text{bande = wims(word 1 of \texte)} \text{texte = wims(replace internal \bande by in \texte)}
\matrix{texte = slib(text/cutchoices \texte)} \text{cntrow = rows(\texte)} \integer{cntQ = \cntrow/2-1} \text{trou = } \for{i = 1 to \cntQ}{ \text{trou1 = \texte[2*\i;]} \text{trou = \trou, \trou1} } \text{trou = wims(nonempty items \trou)}
\text{audio = slib(media/audio /\bande )}
\text{STEP = wims(makelist r x for x = 1 to \cntQ)} \steps{\STEP}
\statement{ Ecouter \audio et compléter le texte:<p style="background-color : #AAFFFF; padding : 1%; margin : 5% 15%;"> \for{k = 1 to \cntQ}{ \texte[2*\k-1;] \embed{\STEP[\k], 10} } </p> }
\answer{}{\trou[1]}{type=case} \answer{}{\trou[2]}{type=case} \answer{}{\trou[3]}{type=case} \answer{}{\trou[4]}{type=case} \answer{}{\trou[5]}{type=case} \answer{}{\trou[6]}{type=case} \answer{}{\trou[7]}{type=case} \answer{}{\trou[8]}{type=case} \answer{}{\trou[9]}{type=case} \answer{}{\trou[10]}{type=case} \answer{}{\trou[11]}{type=case} \answer{}{\trou[12]}{type=case} \answer{}{\trou[13]}{type=case} \answer{}{\trou[14]}{type=case} \answer{}{\trou[15]}{type=case} \answer{}{\trou[16]}{type=case} \answer{}{\trou[17]}{type=case} \answer{}{\trou[18]}{type=case} \answer{}{\trou[19]}{type=case} \answer{}{\trou[20]}{type=case}
Pour être adapté au texte de l'exercice Source oef , le fichier de données doit satisfaire les règles suivantes
:dictee1.mp3 Un ??chasseur?? sachant ??chasser?? doit ??savoir?? chasser sans son ??chien?? . :dictee2.mp3 Voici ??son?? chien et ??son?? chat qui ??se?? battent.
\title{Texte à trous (dictée)}\text{cnt_record = wims(recordcnt data)} \text{H = randint(\cnt_record)} \text{texte = wims(record \H of data)} \text{bande = wims(word 1 of \texte)} \text{texte = wims(replace internal \bande by in \texte)}
\matrix{texte = slib(text/cutchoices \texte)} \text{cntrow = rows(\texte)} \integer{cntQ = \cntrow/2-1} \text{trou = } \for{i = 1 to \cntQ}{ \text{trou1 = \texte[2*\i;]} \text{trou = \trou, \trou1} } \text{trou = wims(nonempty items \trou)}
\text{audio = slib(media/audio \bande )} \text{STEP = wims(makelist r x for x = 1 to \cntQ)}
\steps{\STEP}
\statement{ Ecouter \audio et compléter le texte:<p style="background-color : #AAFFFF; padding : 1%; margin : 5% 15%;"> \for{k = 1 to \cntQ}{ \texte[2*\k-1;] \embed{\STEP[\k], 10} } \texte[2*\cntQ+1;] </p> }
\answer{}{\trou[1]}{type=case} \answer{}{\trou[2]}{type=case} \answer{}{\trou[3]}{type=case} \answer{}{\trou[4]}{type=case} \answer{}{\trou[5]}{type=case} \answer{}{\trou[6]}{type=case} \answer{}{\trou[7]}{type=case} \answer{}{\trou[8]}{type=case} \answer{}{\trou[9]}{type=case} \answer{}{\trou[10]}{type=case} \answer{}{\trou[11]}{type=case} \answer{}{\trou[12]}{type=case} \answer{}{\trou[13]}{type=case} \answer{}{\trou[14]}{type=case} \answer{}{\trou[15]}{type=case} \answer{}{\trou[16]}{type=case} \answer{}{\trou[17]}{type=case} \answer{}{\trou[18]}{type=case} \answer{}{\trou[19]}{type=case} \answer{}{\trou[20]}{type=case}
On désire faire un exercice présentant un texte avec des mots à trouver parmi une liste proposée (par exemple par un menu à choix). Il peut donc ici ne pas y avoir forcément de fichiers audio.
\title{Texte à trous avec choix} \text{cnt_record= wims(recordcnt data)} \text{H=randint(\cnt_record)} \text{texte= wims(record \H of data)}
\matrix{texte = slib(text/cutchoices \texte)} \text{cntrow=rows(\texte)} \integer{cntQ=\cntrow/2-1} \text{trou =} \text{rep = } \for{i= 1 to \cntQ}{ \text{trou1=\texte[2*\i;]} \text{cnt = items(\trou1)} \text{mix = shuffle(\cnt)} \matrix{trou=\trou \trou1[\mix]} \text{rep = \rep,position(1,)} } \text{rep =wims(nonempty items \rep)}
\text{STEP = wims(makelist r x for x=1 to \cntQ)} \steps{\STEP}
\statement{ Compléter le texte :<p style="background-color : #AAFFFF; padding : 1%; margin : 5% 15%;"> \for{k = 1 to \cntQ}{ \texte[2*\k-1;] \embed{\STEP[\k]} } \texte[2*\cntQ+1;] </p> }
\answer{}{\rep[1];\trou[1;]}{type=menu} \answer{}{\rep[2];\trou[2;]}{type=menu} \answer{}{\rep[3];\trou[3;]}{type=menu} \answer{}{\rep[4];\trou[4;]}{type=menu} \answer{}{\rep[5];\trou[5;]}{type=menu} \answer{}{\rep[6];\trou[6;]}{type=menu} \answer{}{\rep[7];\trou[7;]}{type=menu} \answer{}{\rep[8];\trou[8;]}{type=menu} \answer{}{\rep[9];\trou[9;]}{type=menu} \answer{}{\rep[10];\trou[10;]}{type=menu} \answer{}{\rep[11];\trou[11;]}{type=menu} \answer{}{\rep[12];\trou[12;]}{type=menu} \answer{}{\rep[13];\trou[13;]}{type=menu} \answer{}{\rep[14];\trou[14;]}{type=menu} \answer{}{\rep[15];\trou[15;]}{type=menu} \answer{}{\rep[16];\trou[16;]}{type=menu} \answer{}{\rep[17];\trou[17;]}{type=menu} \answer{}{\rep[18];\trou[18;]}{type=menu} \answer{}{\rep[19];\trou[19;]}{type=menu} \answer{}{\rep[20];\trou[20;]}{type=menu}
Pour être adapté au texte de l'exercice Texte à choix , le fichier de données doit satisfaire les règles suivantes
: Un ??chasseur,chaceur?? sachant ??chasser,chassé?? doit ??savoir?? chasser sans ??son,sont ??chien. : Voici ??son,sont,con?? chien et ??son,sont,con?? chat qui ??se,ce,ceux?? battent.
\title{Texte à trous avec choix} \text{cnt_record= wims(recordcnt data)} \text{H=randint(\cnt_record)} \text{texte= wims(record \H of data)}\matrix{texte = slib(text/cutchoices \texte)} \text{cntrow = rows(\texte)} \integer{cntQ = \cntrow/2-1} \text{trou = } \text{rep = } \for{i= 1 to \cntQ}{ \text{trou1 = \texte[2*\i;]} \text{cnt = items(\trou1)} \text{mix = shuffle(\cnt)} \matrix{trou = \trou \trou1[\mix]} \text{rep = \rep,position(1,)} } \text{rep = wims(nonempty items \rep)} \text{STEP = wims(makelist r x for x = 1 to \cntQ)} \steps{\STEP}
\statement{ Compléter le texte :<p style="background-color : #AAFFFF; padding : 1%; margin : 5% 15%;"> \for{k = 1 to \cntQ}{ \texte[2*\k-1;] \embed{\STEP[\k]} } \texte[2*\cntQ+1;] </p> }
\answer{}{\rep[1];\trou[1;]}{type=menu} \answer{}{\rep[2];\trou[2;]}{type=menu} \answer{}{\rep[3];\trou[3;]}{type=menu} \answer{}{\rep[4];\trou[4;]}{type=menu} \answer{}{\rep[5];\trou[5;]}{type=menu} \answer{}{\rep[6];\trou[6;]}{type=menu} \answer{}{\rep[7];\trou[7;]}{type=menu} \answer{}{\rep[8];\trou[8;]}{type=menu} \answer{}{\rep[9];\trou[9;]}{type=menu} \answer{}{\rep[10];\trou[10;]}{type=menu} \answer{}{\rep[11];\trou[11;]}{type=menu} \answer{}{\rep[12];\trou[12;]}{type=menu} \answer{}{\rep[13];\trou[13;]}{type=menu} \answer{}{\rep[14];\trou[14;]}{type=menu} \answer{}{\rep[15];\trou[15;]}{type=menu} \answer{}{\rep[16];\trou[16;]}{type=menu} \answer{}{\rep[17];\trou[17;]}{type=menu} \answer{}{\rep[18];\trou[18;]}{type=menu} \answer{}{\rep[19];\trou[19;]}{type=menu} \answer{}{\rep[20];\trou[20;]}{type=menu}
Bien qu'on s'éloigne de plus en plus des qcm, on ne résiste pas à l'envie de vous proposer un autre type d'exercices qui consistent à faire marquer certains mots.
Par exemple, vous désirez faire un exercice demandant de marquer tous les articles définis d'une phrase. Pour cela, on peut utiliser le type de réponses mark Ce type comme checkbox demande de connaître :
la position des items sur lesquels on doit cliquer ; les items en questionPar exemple :
1,4;le,chien,et,le,chat
Le fichier de données datamark adapté à l'exercice qui suit est de la forme :
:??le?? chien et ??le?? chat ??La?? montagne lui plaît:??un??village et ??une?? ville
\title{Marquer les articles} \text{cnt_record= wims(recordcnt datamark)} \text{H=randint(\cnt_record)} \matrix{texte=randtow( wims(record 0 of datamark))} \matrix{texte = slib(text/marktext \texte)} \text{cnt = \texte[3;]} \matrix{texte=\texte[1,2;]}
\statement{ <p style="background-color : #AAFFFF; padding : 1%; margin : 5% 15%;"> \for{s = 1 to \cnt}{\embed{reply1,\s} } }\answer{}{\texte}{type=mark}
Vous pouvez voir ce qu'il y a derrière le script. Regardez-le si vous désirez l'adapter. Exemple de source sans slib
On peut aussi imaginer plutôt que ?? des indicateurs plus précis comme <ART> <GN> etc adaptés à l'analyse grammaticale ... A vous de voir et de proposer !
Mais nous nous éloignons du sujet.
\title{Marquer les articles} \text{cnt_record = wims(recordcnt datamark)} \text{H = randint(\cnt_record)} \text{texte = randtow(wims(record 0 of datamark))} \text{texte = wims(embraced randitem \texte)} \text{test = wims( 1 to 2 of wims(replace internal ?? by || in \texte))} \text{u = \test issametext || ? 1: 0} \matrix{texte = slib(text/cutchoices \texte)} \text{cntrow = rows(\texte)} \text{TEXTE = } \text{rep = } \text{cnt = 0} \text{texte = wims(replace internal , by XXX in \texte)} \for{i = 1 to \cntrow}{ \text{H = \texte[\i;]} \text{cnt_w=wims(wordcnt \H)} \text{j = \i%2} \text{rep = \j = \u ? \rep, wims(values \cnt + x for x = 1 to \cnt_w)} \integer{cnt = \cnt+\cnt_w} \text{TEXTE = \TEXTE, wims( \H)} }
\text{TEXTE = wims(nonempty items \TEXTE)} \text{TEXTE1 = wims(replace internal XXX by in \TEXTE)} \text{rep = wims(nonempty items \rep)}\statement{ <p style="background-color : #AAFFFF; padding : 1%; margin : 5% 15%;"> \for{k = 1 to \cnt}{ \if{XXX isin \TEXTE[\k]}{ \embed{reply1,\k}, }{\embed{reply1,\k} } } }\answer{}{\rep;\TEXTE1}{type=mark}{option=split}