Sommaire
Présentation
Pour qu’une question d’un QCM QCM Questionnaire à Choix Multiple soit efficace, il est évident que la bonne réponse ne doit pas se trouver toujours à la même place (dans le fichier utilisé ici, c’est toujours la première proposition). De plus, il est intéressant de ne pas présenter toujours le même ordre dans les propositions afin que la recherche de la bonne réponse soit un petit peu plus formatrice.
Les informations de programmation sont contenues dans le code Spip SPIP Système de Publication Pour l’Internet (CMS utilisé pour le présent site). Voir Wiipedia SPIP ci-dessous.
Le code
<!-- DEBUT qcm_une_question_alea (modèle) -->
[(#REM) Réalisation : Roland Bouat]
[(#REM) Mise à jour : 17/06/2020]
[(#REM)
Ce modèle affiche une question et, en ordre aléatoire,
les propositions qui lui sont affectées (y compris la réponse attendue).
La bonne réponse est indiquée.
L'affichage des boutons radio est fonctionnel mais aucune réponse n'est ni vérifiée ni enregistrée.
]
[(#REM) Déclarations)]
[(#REM) Nom du fichier contenant les questions.]
#SET{source,#ENV{nom_fichier}}
[(#REM) le n° de la ligne demandée dans le fichier.]
#SET{numligne,#ENV{id}}
[(#REM) le nombre de propositions à afficher.]
#SET{nbprop,#ENV{nbprop}}
[(#REM) n° de la question tel qu'il est enregistré dans le fichier (colonne n°0)]
#SET{numqenreg,0}
[(#REM) la question au format texte (colonne n°1).]
#SET{q,"Question ?"}
[(#REM) la réponse attendue au format texte (colonne n°2).]
#SET{exact, "La réponse attendue"}
[(#REM) La proposition pX (tirage aléatoire dans colonne n°2 à n°7).]
#SET{p1, ""}
#SET{p2, ""}
#SET{p3, ""}
#SET{p4, ""}
#SET{p5, ""}
#SET{p6, ""}
[(#REM) le n° du cours... peut-être (colonne n°8).]
#SET{cours, ""}
[(#REM) le n° de l'article contenant le cours... peut-être (colonne n°9).]
#SET{article,""}
[(#REM) Suite au tirage aléatoire, la proposition contenant la réponse attendue.]
#SET{pexact,""}
[(#REM)
Récupération des données associées à la question retenue (question, propositions...)
Pas d'affichage.
]
<BOUCLE_laquestion(DATA){source csv,#CHEMIN{csv/#GET{source}}}{cle=#GET{numligne}}>
#SET{numqenreg,#VALEUR{0}}[(#REM) n° de la question]
#SET{q,#VALEUR{1}}[(#REM)question (texte)]
#SET{exact, #VALEUR{2}}[(#REM) réponse attendue (texte).]
[(#REM) Boucle de tirage aléatoire.]
[(#REM) ----------------------------------------------]
<BOUCLE_tirage(DATA){enum 1,#GET{nbprop}}{par hasard}>
[(#REM) Aux propositions Px, on affecte une proposition au hasard (numéro).
La réponse attendue est en troisième colonne (n°2) et est incluse aux propositions.
]
#SET{p#_tirage:COMPTEUR_BOUCLE, #_laquestion:VALEUR{#_tirage:VALEUR|plus{1}}}
[(#REM) Repérage de la proposition contenant la bonne réponse.
(On aurait aussi pu comparer plus tard...) ]
[(#_tirage:VALEUR|=={2}|?{#SET{pexact,p#_tirage:COMPTEUR_BOUCLE}})]
</BOUCLE_tirage>
[(#REM) ----------------------------------------------]
#SET{cours, #VALEUR{8}}[(#REM) n° du cours... peut-être.]
#SET{article,#VALEUR{9}}[(#REM) n° de l'article contenant le cours... peut-être.]
</BOUCLE_laquestion>
[(#REM) Affichage des données associées à la question retenue (question, propositions...]
[(#REM) Nom du fichier utilisé.]
<hr />Fichier utilisé : #GET{source}<br />
[(#REM) N° de la question tel qu'il est enregistré dans le fichier
et position dans le fichier (n° de ligne).]
Question enregistrée sous le n° #GET{numqenreg} (enregistrée dans le fichier à la ligne n° #GET{numligne})<br />
<hr />
[(#REM) Affichage de la question (texte).]
<strong>#GET{q}</strong> <br />
[(#REM) Affichage des propositions avec bouton radio.]
[<label for="choix1"><input type="radio" id="choix1" name="reponse" value="P1">(#GET{p1})</label>]
[<label for="choix2"><input type="radio" id="choix2" name="reponse" value="P2">(#GET{p2})</label>]
[<label for="choix3"><input type="radio" id="choix3" name="reponse" value="P3">(#GET{p3})</label>]
[<label for="choix4"><input type="radio" id="choix4" name="reponse" value="P4">(#GET{p4})</label>]
[<label for="choix5"><input type="radio" id="choix5" name="reponse" value="P5">(#GET{p5})</label>]
[<label for="choix6"><input type="radio" id="choix6" name="reponse" value="P6">(#GET{p6})</label>]
<hr />
[(#REM) Affichage de la bonne réponse.]
La réponse attendue est : <strong>#GET{exact}</strong>
<br />
[(#REM) Référence du cours et de l'article correspondant]
[Pour s'informer, consulter le <a href="#URL_ARTICLE{#GET{article}}">cours n° (#GET{cours})</a>.<hr />]
</B_laquestion>
<hr />(La ligne demandée n'existe pas encore dans le fichier.)<hr />
<//B_laquestion>
<!-- FIN qcm_une_question_alea (modèle) -->
Exemples
Voici deux fois le même ensemble question/propositions pour illustration avec la question n°3. Balise utilisée : <qcm_une_question_alea1|nom_fichier=qcmdemo.csv|nbpropo=6>
Première édition
Fichier utilisé : qcmdemo.csv
Question enregistrée sous le n° 1 (enregistrée dans le fichier à la ligne n° 1)
Que signifie QCM ?
La réponse attendue est : Questionnaire à Choix Multiple
Pour s'informer, consulter le cours n° 1.
Deuxième édition
Fichier utilisé : qcmdemo.csv
Question enregistrée sous le n° 1 (enregistrée dans le fichier à la ligne n° 1)
Que signifie QCM ?
La réponse attendue est : Questionnaire à Choix Multiple
Pour s'informer, consulter le cours n° 1.
Limiter le nombre de propositions
Balise utilisée : <qcm_une_question_alea1|nom_fichier=qcmdemo.csv|nbprop=4>
Fichier utilisé : qcmdemo.csv
Question enregistrée sous le n° 1 (enregistrée dans le fichier à la ligne n° 1)
Que signifie QCM ?
La réponse attendue est : Questionnaire à Choix Multiple
Pour s'informer, consulter le cours n° 1.
Propositions absentes
Balise utilisée : <qcm_une_question_alea5|nom_fichier=qcmdemo.csv|nbprop=6>
Fichier utilisé : qcmdemo.csv
Question enregistrée sous le n° 4 (enregistrée dans le fichier à la ligne n° 5)
Combien un QCM propose-t-il de réponses ?
La réponse attendue est : Nombre libre mais souvent une.