From 10706c3a70f3e9fddecadbe16be2ee15995b575f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolas=20M=2E=20Thi=C3=A9ry?= <nthiery@users.sf.net>
Date: Mon, 12 Oct 2015 15:23:42 +0200
Subject: [PATCH] Import QCM WIMS 2014-2015

---
 qcms/CoursComplexite.oef       | 101 ++++++++++++++++++++
 qcms/CoursFonctions.oef        | 162 +++++++++++++++++++++++++++++++++
 qcms/CoursTableauxCreation.oef | 160 ++++++++++++++++++++++++++++++++
 3 files changed, 423 insertions(+)
 create mode 100644 qcms/CoursComplexite.oef
 create mode 100644 qcms/CoursFonctions.oef
 create mode 100644 qcms/CoursTableauxCreation.oef

diff --git a/qcms/CoursComplexite.oef b/qcms/CoursComplexite.oef
new file mode 100644
index 0000000..230137e
--- /dev/null
+++ b/qcms/CoursComplexite.oef
@@ -0,0 +1,101 @@
+type=first
+textarea="data explain"
+:Remettre en bon ordre des objets donnés, glisser-déposer.
+
+On présente une liste d'objets, et il faut les trier selon l'ordre précisé
+en les tirant vers les cases prévues avec la souris.
+<p>
+Pour construire un exercice avec ce modèle, il suffit d'entrer la liste
+d'objets à trier et changer le texte explicatif.
+<p>
+Avec une petite modification, une variante de ce modèle peut accepter des
+images comme objets.
+
+<p>
+Auteur du modèle : Gang Xiao <qualite@wimsedu.info>
+
+:%%%%%%%%%%%%%%%%%      ATTENTION      %%%%%%%%%%%%%%%%%%%%
+
+Enlevez l'en-tête ci-dessus si vous détruisez les balises pour le modèle !
+(Ce sont les lignes qui commencent par un ':'.)
+Sinon l'exercice risque de ne pas pouvoir repasser sous Createxo.
+
+:%%%%%%%% Paramètres d'exemples à redéfinir %%%%%%%%%%%%%%%%%
+
+:\title{Complexité}
+:\author{Viviane, Pons}
+:\email{viviane.pons@lri.fr}
+:\credits{}
+:Nombre d'objets à trier par exercice. Jusqu'à 20.
+Si ce nombre est plus petit que les objets disponibles, une partie tirée au
+hasard des objets seront présentés. <p>
+Si ce nombre est plus grand que les objets disponibles, il sera ramené au
+nombre d'objets.
+\integer{tot=4}
+
+:La taille des objets à glisser, en pixels, x fois y.
+Pensez aux gens qui augmentent la taille de polices de leurs navigateurs !
+Ne mettez pas les cases trop petites.
+\text{size=80x40}
+
+:La liste d'objets à réordonner
+Ecrivez les objets dans le bon ordre, séparés par des virgules.
+\text{data=log(n),n,nlog(n),n^2,n^3,2^n}
+
+:Le texte qui explique ce qu'il faut faire.
+
+\text{explain=Ordonner ces complexités de la plus rapide (à gauche) à la plus lente (à droite) pour n grand.}
+
+:Mise en aléatoire par des accolades emboitables
+help
+\text{accolade=item(1,1 oui, 2 non)}
+
+:%%%%%%%%%%%%%% Rien à modifier avant l'énoncé %%%%%%%%%%%%%%%%
+\text{accolade=wims(word 1 of \accolade)}
+\text{data=\accolade=1 ? wims(embraced randitem \data)}
+\integer{datacnt=items(\data)}
+\integer{tot=min(20,min(\tot,\datacnt))}
+\if{\tot<\datacnt}{
+ \text{sh=shuffle(\datacnt)}
+ \text{sh=wims(sort numeric items \sh[1..\tot])}
+ \text{data=item(\sh,\data)}
+}
+
+\text{st=wims(makelist r x for x=1 to \tot)}
+\steps{\st}
+
+:%%%%%%%%%%%%% Maintenant l'énoncé en code html. %%%%%%%%%%%%%%%%%%%%
+
+::Vous n'avez pas besoin de modifier ceci en général.
+\statement{\explain
+<table class="wimsnoborder"><tr>
+\for{k=1 to \tot}{<td>\embed{r\k,\size}</td>}
+</tr></table>}
+
+:%%%%%%%%%%%%% Rien à modifier ci-après. %%%%%%%%%%%%%%%%%5
+
+\answer{1}{\data[1]}{type=dragfill}
+\answer{2}{\data[2]}{type=dragfill}
+\answer{3}{\data[3]}{type=dragfill}
+\answer{4}{\data[4]}{type=dragfill}
+\answer{5}{\data[5]}{type=dragfill}
+\answer{6}{\data[6]}{type=dragfill}
+\answer{7}{\data[7]}{type=dragfill}
+\answer{8}{\data[8]}{type=dragfill}
+\answer{9}{\data[9]}{type=dragfill}
+\answer{10}{\data[10]}{type=dragfill}
+\answer{11}{\data[11]}{type=dragfill}
+\answer{12}{\data[12]}{type=dragfill}
+\answer{13}{\data[13]}{type=dragfill}
+\answer{14}{\data[14]}{type=dragfill}
+\answer{15}{\data[15]}{type=dragfill}
+\answer{16}{\data[16]}{type=dragfill}
+\answer{17}{\data[17]}{type=dragfill}
+\answer{18}{\data[18]}{type=dragfill}
+\answer{19}{\data[19]}{type=dragfill}
+\answer{20}{\data[20]}{type=dragfill}
+
+
+
+
+
diff --git a/qcms/CoursFonctions.oef b/qcms/CoursFonctions.oef
new file mode 100644
index 0000000..caaf47f
--- /dev/null
+++ b/qcms/CoursFonctions.oef
@@ -0,0 +1,162 @@
+type=first
+textarea="datatrue datafalse explain"
+:Une question à choix multiples avec permutation aléatoire des choix.
+
+Voici un modèle de question à choix multiples. L'ordre des choix est aléatoire,
+ainsi que les choix s'il y en a suffisamment qui sont définis.
+Quand il y a plusieurs bons choix, il suffit d'en choisir un, peu importe lequel.
+
+<p>
+Le texte n'est pas aléatoire. Un autre modèle <b>QCM à la suite</b>
+permet d'avoir aussi un texte aléatoire.
+
+
+
+
+
+
+<p>Auteur du modèle : Gang Xiao <qualite@wimsedu.info></p>
+
+:%%%%%%%%%%%%%%%%%      ATTENTION      %%%%%%%%%%%%%%%%%%%%
+
+Enlevez l'en-tête ci-dessus si vous détruisez les balises pour le modèle !
+(Ce sont les lignes qui commencent par un ':'.)
+Sinon l'exercice risque de ne pas pouvoir repasser sous Createxo.
+
+:%%%%%%%% Paramètres d'exemples à redéfinir %%%%%%%%%%%%%%%%%
+
+:\title{Appel de fonctions}
+:\author{Viviane Pons}
+:\email{viviane.pons@upsud.fr}
+:\credits{}
+:Nombre de choix à présenter. Au plus 10.
+Vous devez définir suffisamment de choix. Sinon l'exercice affichera seulement ce qui est disponible.
+\integer{tot=4}
+
+:Le nombre de bons choix dans chaque exercice. Ne doit pas depasser le total.
+
+\integer{givetrue=1}
+
+:Nombre de mauvais choix "obligatoires".
+Par exemple si ce nombre est 2, les deux premiers mauvais choix dans la liste seront toujours présentés dans les exercices générés.
+<p> Dans le doute, mettez 0.</p>
+\integer{minfalse=0}
+
+:Le texte qui explique ce qu'il faut faire.
+help
+\text{explain=Sélectionner un appel correct pour la fonction dont la signature est 
+
+<pre>int max(int a, int b)</pre>}
+
+:Le(s) bon(s) choix, un par ligne.
+On peut en placer plusieurs (un par ligne) pour tirer au hasard.
+Evitez les phrases trop longues ! Aucun point-virgule dans la phrase.
+help
+\matrix{datatrue=max(3,4)
+max(-1,5)
+max(6,2)
+max(max(1,2),3)}
+
+:Les mauvais choix, un par ligne.
+Vous pouvez en donner plus que ce qu'il faut tirer au hasard.
+Evitez les phrases trop longues ! Aucun point-virgule dans la phrase.
+help
+\matrix{datafalse=max(2.5,3)
+max("abab","bcbc")
+max(5)
+max(8)
+max(5,4,2,9)
+max(1.2,5.3)
+max(4,4,"hop")
+min(2,5)
+Max(3,3)}
+
+:Mots d'option :  <span class="tt wims_code_words">checkbox</span>,  <span class="tt wims_code_words">split</span>.
+Ajouter le mot  <span class="tt wims_code_words">checkbox</span> s'il y a plusieurs bonnes réponses et si l'élève doit choisir toutes les bonnes réponses (au lieu d'une seule).
+Dans ce cas, ajouter aussi le mot  <span class="tt wims_code_words">split</span> si on autorise une note partielle quand seulement une partie des bonnes réponses sont choisies.
+\text{option=}
+
+:Feedback Général
+Ce texte s'affichera après la réponse de l'apprenant, qu'elle soit juste ou fausse.
+\text{feedback_general=}
+
+:Feedback en cas de bonne réponse
+Ce texte s'affichera après la réponse de l'apprenant, en cas de bonne reponse ou de reponse partielle.
+\text{feedback_bon=}
+
+:Feedback en cas de mauvaise réponse
+Ce texte s'affichera après la réponse de l'apprenant, s'il a coché au moins une mauvaise réponse.
+\text{feedback_mauvais=}
+
+:Mise en aléatoire par des accolades emboitables
+help
+\text{accolade=item(1,1 oui, 2 non)}
+
+:%%%%%%%%%%%%%% Rien à modifier avant l'énoncé %%%%%%%%%%%%%%%%
+\text{accolade=wims(word 1 of \accolade)}
+
+\text{empty=}
+\if{\feedback_general != \empty}{
+  \text{feedback_general=<p class="feedback">\feedback_general</p>}
+}
+\if{\feedback_bon != \empty}{
+  \text{feedback_bon=<p class="feedback good_answer">\feedback_bon</p>}
+}
+\if{\feedback_mauvais != \empty}{
+  \text{feedback_mauvais=<p class="feedback bad_answer">\feedback_mauvais</p>}
+}
+
+\text{datatrue=wims(nonempty rows \datatrue)}
+\text{datafalse=wims(nonempty rows \datafalse)}
+\integer{truecnt=rows(\datatrue)}
+\integer{falsecnt=rows(\datafalse)}
+\integer{givetrue=\givetrue<1?1}
+\integer{givetrue=\givetrue>\truecnt?\truecnt}
+\integer{tot=\tot > \falsecnt+\givetrue?\falsecnt+\givetrue}
+\integer{givetrue=\givetrue>\tot-1?\tot-1}
+\integer{minfalse=\minfalse>\tot-\givetrue?\tot-\givetrue}
+\text{tsh=shuffle(\truecnt)}
+\text{true=row(\tsh,\datatrue)}
+\if{\minfalse>0}{
+ \text{false1=row(1..\minfalse,\datafalse);}
+ \text{false2=row(\minfalse+1..\falsecnt,\datafalse)}
+}{
+ \integer{minfalse=0}
+ \text{false1=}
+ \text{false2=\datafalse}
+}
+\text{fsh=shuffle(\falsecnt)}
+\text{false2=row(\fsh,\false2)}
+\text{pick=row(1..\givetrue,\true);\false1 row(1..\tot-\givetrue-\minfalse,\false2)}
+\text{ind=wims(makelist 1 for x=1 to \givetrue),wims(makelist 0 for x=1 to \tot-\givetrue)}
+
+\text{sh=shuffle(\tot)}
+\text{ind=item(\sh,\ind)}
+\text{pick=row(\sh,\pick)}
+\text{pick=\accolade=1 ? wims(embraced randitem \pick)}
+\text{explain=\accolade=1 ? wims(embraced randitem \explain)}
+\text{ans=positionof(1,\ind)}
+\text{list=item(1..\tot,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)}
+\text{anstype=checkbox iswordof \option?checkbox:radio}
+
+:%%%%%%%%%%%%% Maintenant l'énoncé en code html. %%%%%%%%%%%%%%%%%%%%
+
+::Vous n'avez pas besoin de modifier ceci en général.
+\statement{
+\explain
+\for{i=1 to \tot}{
+	<p class="oefreply"><label><strong>\embed{reply 1,\i}-</strong> \pick[\i;]</label></p>
+}}
+
+:%%%%%%%%%%%%% Rien à modifier ci-après. %%%%%%%%%%%%%%%%%5
+
+\answer{La réponse}{\ans;\list}{type=\anstype}{option=\option}
+
+\feedback{1=1}{\feedback_general}
+\feedback{\reply1 isitemof \list[\ans]}{\feedback_bon}
+\feedback{\reply1 notitemof \list[\ans]}{\feedback_mauvais}
+
+
+
+
+
diff --git a/qcms/CoursTableauxCreation.oef b/qcms/CoursTableauxCreation.oef
new file mode 100644
index 0000000..73598cf
--- /dev/null
+++ b/qcms/CoursTableauxCreation.oef
@@ -0,0 +1,160 @@
+type=first
+textarea="datatrue datafalse explain"
+:Une question à choix multiples avec permutation aléatoire des choix.
+
+Voici un modèle de question à choix multiples. L'ordre des choix est aléatoire,
+ainsi que les choix s'il y en a suffisamment qui sont définis.
+Quand il y a plusieurs bons choix, il suffit d'en choisir un, peu importe lequel.
+
+<p>
+Le texte n'est pas aléatoire. Un autre modèle <b>QCM à la suite</b>
+permet d'avoir aussi un texte aléatoire.
+
+
+
+
+
+
+<p>Auteur du modèle : Gang Xiao <qualite@wimsedu.info></p>
+
+:%%%%%%%%%%%%%%%%%      ATTENTION      %%%%%%%%%%%%%%%%%%%%
+
+Enlevez l'en-tête ci-dessus si vous détruisez les balises pour le modèle !
+(Ce sont les lignes qui commencent par un ':'.)
+Sinon l'exercice risque de ne pas pouvoir repasser sous Createxo.
+
+:%%%%%%%% Paramètres d'exemples à redéfinir %%%%%%%%%%%%%%%%%
+
+:\title{Création de tableau}
+:\author{Viviane, Pons}
+:\email{viviane.pons@lri.fr}
+:\credits{}
+:Nombre de choix à présenter. Au plus 10.
+Vous devez définir suffisamment de choix. Sinon l'exercice affichera seulement ce qui est disponible.
+\integer{tot=4}
+
+:Le nombre de bons choix dans chaque exercice. Ne doit pas depasser le total.
+
+\integer{givetrue=1}
+
+:Nombre de mauvais choix "obligatoires".
+Par exemple si ce nombre est 2, les deux premiers mauvais choix dans la liste seront toujours présentés dans les exercices générés.
+<p> Dans le doute, mettez 0.</p>
+\integer{minfalse=0}
+
+:Le texte qui explique ce qu'il faut faire.
+help
+\text{explain=Sélectionner l'instruction correcte pour créer un tableau d'entier.}
+
+:Le(s) bon(s) choix, un par ligne.
+On peut en placer plusieurs (un par ligne) pour tirer au hasard.
+Evitez les phrases trop longues ! Aucun point-virgule dans la phrase.
+help
+\matrix{datatrue=vector &lt;int&gt; tab = &#123;1,2,4,4,2,1&#125;;
+vector &lt;int&gt;  tab = vector &lt;int&gt; (3);
+vector &lt;int&gt;  a = &#123;3,3,4&#125;;}
+
+:Les mauvais choix, un par ligne.
+Vous pouvez en donner plus que ce qu'il faut tirer au hasard.
+Evitez les phrases trop longues ! Aucun point-virgule dans la phrase.
+help
+\matrix{datafalse=vector tab = &#123;1,2,4,4,2,1&#125;;
+int tab = vector &lt;int&gt; (3);
+vector &lt;double&gt; tab = vector &lt;double&gt;(5);
+vector&lt;int&gt; a = 5;
+int a = &#123;3,3,4&#125;;}
+
+:Mots d'option :  <span class="tt wims_code_words">checkbox</span>,  <span class="tt wims_code_words">split</span>.
+Ajouter le mot  <span class="tt wims_code_words">checkbox</span> s'il y a plusieurs bonnes réponses et si l'élève doit choisir toutes les bonnes réponses (au lieu d'une seule).
+Dans ce cas, ajouter aussi le mot  <span class="tt wims_code_words">split</span> si on autorise une note partielle quand seulement une partie des bonnes réponses sont choisies.
+\text{option=}
+
+:Feedback Général
+Ce texte s'affichera après la réponse de l'apprenant, qu'elle soit juste ou fausse.
+\text{feedback_general=}
+
+:Feedback en cas de bonne réponse
+Ce texte s'affichera après la réponse de l'apprenant, en cas de bonne reponse ou de reponse partielle.
+\text{feedback_bon=}
+
+:Feedback en cas de mauvaise réponse
+Ce texte s'affichera après la réponse de l'apprenant, s'il a coché au moins une mauvaise réponse.
+\text{feedback_mauvais=}
+
+:Mise en aléatoire par des accolades emboitables
+help
+\text{accolade=item(1,1 oui, 2 non)}
+
+:%%%%%%%%%%%%%% Rien à modifier avant l'énoncé %%%%%%%%%%%%%%%%
+\text{accolade=wims(word 1 of \accolade)}
+
+\text{empty=}
+\if{\feedback_general != \empty}{
+  \text{feedback_general=<p class="feedback">\feedback_general</p>}
+}
+\if{\feedback_bon != \empty}{
+  \text{feedback_bon=<p class="feedback good_answer">\feedback_bon</p>}
+}
+\if{\feedback_mauvais != \empty}{
+  \text{feedback_mauvais=<p class="feedback bad_answer">\feedback_mauvais</p>}
+}
+
+\text{datatrue=wims(nonempty rows \datatrue)}
+\text{datafalse=wims(nonempty rows \datafalse)}
+\integer{truecnt=rows(\datatrue)}
+\integer{falsecnt=rows(\datafalse)}
+\integer{givetrue=\givetrue<1?1}
+\integer{givetrue=\givetrue>\truecnt?\truecnt}
+\integer{tot=\tot > \falsecnt+\givetrue?\falsecnt+\givetrue}
+\integer{givetrue=\givetrue>\tot-1?\tot-1}
+\integer{minfalse=\minfalse>\tot-\givetrue?\tot-\givetrue}
+\text{tsh=shuffle(\truecnt)}
+\text{true=row(\tsh,\datatrue)}
+\if{\minfalse>0}{
+ \text{false1=row(1..\minfalse,\datafalse);}
+ \text{false2=row(\minfalse+1..\falsecnt,\datafalse)}
+}{
+ \integer{minfalse=0}
+ \text{false1=}
+ \text{false2=\datafalse}
+}
+\text{fsh=shuffle(\falsecnt)}
+\text{false2=row(\fsh,\false2)}
+\text{pick=row(1..\givetrue,\true);\false1 row(1..\tot-\givetrue-\minfalse,\false2)}
+\text{ind=wims(makelist 1 for x=1 to \givetrue),wims(makelist 0 for x=1 to \tot-\givetrue)}
+
+\text{sh=shuffle(\tot)}
+\text{ind=item(\sh,\ind)}
+\text{pick=row(\sh,\pick)}
+\text{pick=\accolade=1 ? wims(embraced randitem \pick)}
+\text{explain=\accolade=1 ? wims(embraced randitem \explain)}
+\text{ans=positionof(1,\ind)}
+\text{list=item(1..\tot,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)}
+\text{anstype=checkbox iswordof \option?checkbox:radio}
+
+:%%%%%%%%%%%%% Maintenant l'énoncé en code html. %%%%%%%%%%%%%%%%%%%%
+
+::Vous n'avez pas besoin de modifier ceci en général.
+\statement{
+\explain
+\for{i=1 to \tot}{
+	<p class="oefreply"><label><strong>\embed{reply 1,\i}-</strong> \pick[\i;]</label></p>
+}}
+
+:%%%%%%%%%%%%% Rien à modifier ci-après. %%%%%%%%%%%%%%%%%5
+
+\answer{La réponse}{\ans;\list}{type=\anstype}{option=\option}
+
+\feedback{1=1}{\feedback_general}
+\feedback{\reply1 isitemof \list[\ans]}{\feedback_bon}
+\feedback{\reply1 notitemof \list[\ans]}{\feedback_mauvais}
+
+
+
+
+
+
+
+
+
+
-- 
GitLab