QCM et analyse des résultats
Proposer une liste de questions à choix multiples, recueillir les
résultats, les analyser et donner le score et la correction à l'utilisateur. Pour
compliquer un peu, l'ordre des QCM est rendu aléatoire !!
Pour être utilisé par des non-programmeurs, ce script ne nécessite que le changement de la variable du nombre de QCM et bien sûr l'énoncé des questions et réponses. Cette partie est délimité par des lignes d'étoiles. Le reste est automatique.
NB: les textes en rouge sont des commentaires à supprimer dans le code html
<script language="JavaScript"> <!-- debut du script
on déclare les tableaux des variables
var enonce_quest = new Array;
l'énoncé de nos QCM
var nb_eltsform = new Array; le nombre de réponses possibles pour
chaque QCM
var formans = new Array; l'énoncé des réponses
var commentaire = new Array; les commentaires de la correction à
chaque énoncé
var ans = new Array; les numéros des bonnes réponses
var done = new Array; les questions faites
var panswer = new Array; les réponses de l'utilisateur
var score = 0; score à zéro
var rep = 0; nombre de réponses cochées
*************************************************
var nb_elts=2; le nombre de QCM, ici 2
var nb_elts_tot=nb_elts
enonce_quest [1]="Le javascript est " l'énoncé de la 1ére question
nb_eltsform[1]=4 le nombre de réponses possibles ici 4
formans[1]="identique au langage C " les réponses possibles, notez l'incrémentation
formans[2]="du java "
formans[3]="un langage à part "
formans[4]="identique au visual basic "
ans[1] = 3; la bonne réponse, ici la 3éme de la série
commentaire[1]="Malgré certains points communs avec
d'autres, le javascript est un langage de programmation à part entiére "
le commentaire (facultatif) de la correction au 1er QCM
enonce_quest [2]="le javascript"
nb_eltsform[2]=3
les réponses possibles à la 2éme
question, notez l'incrémentation
qui se fait continuellement à partir du 1er QCM
formans[5]="se comporte de façon identique sur tous les navigateurs"
formans[6]="est compatible avec tous les navigateurs "
formans[7]="peut être désactivé par l'utilisateur "
ans[2] = 3; la bonne réponse, ici la 3éme de la série
commentaire[2]="le javascript peut être désactivé
par l'utilisateur<br>son comportement peut varier selon le navigateur et aussi selon
la version d'un même navigateur, voire marcher avec l'un et pas avec un
autre<br>Certains navigateurs (peu répandu) ne le gérent pas"
***************************************************
function affich_pag(){ Affichage des QCM dans la page
compte3=0; toutes les variables à
zéro
var compte=0
var compte2=0
inumber=3 on détermine aléatoirement le numéro de la 1ére
réponse possible à chaque qcm
randomnumber = Math.random() ;
rand1 = Math.round( (inumber-1) * randomnumber) + 1 ;
for (var i=1;i<=(nb_elts);i++)
{document.write("<p><font
color='#000000'><b><strong>"+i+"
-"+enonce_quest[i]+"</strong></font></p></b><font
color='#000080'><blockquote>");on affiche les
énoncés
compte2=compte
trouv=0
for (var j=rand1+compte2;j<(nb_eltsform[i]+1+compte2);j++){ et
les réponses possibles dans un joyeux désordre un peu difficile à expliquer et
réservé aux spécialistes
document.write(j-compte2-rand1+1+" -
"+formans[j]+"<BR>");compte++;
if (ans[i]==j-compte2 && trouv==0){
ans[i]=j-compte2-rand1+1;
trouv=1}
}
if (rand1>nb_eltsform[i]){
for (var j=compte2+1;j<(nb_eltsform[i]+1+compte2);j++){
document.write(j-compte2+" -
"+formans[j]+"<BR>");compte++;
if (ans[i]==j-compte2 && trouv==0){
ans[i]=j-compte2;
trouv=1}}
}
else{
if (rand1+compte2>compte2+1){for (var j=compte2+1;j<rand1+compte2;j++){
document.write(j-compte2+nb_eltsform[i]+1-rand1+" -
"+formans[j]+"<BR>")
compte++;
if (trouv==1){ligne=0}
if (ans[i]==j-compte2 && trouv==0){
ans[i]=j-compte2+nb_eltsform[i]+1-rand1;trouv=1}
}}
}
document.write('</font><form method="POST"><p>Cochez la bonne
réponse : </font>')on affiche les cases à cocher
for (var k=1;k<(nb_eltsform[i]+1);k++){document.write(' <input
type="radio" name="q"
value="'+k+'"onclick="Engine('+i+',this.value)">chaque case coché appelle la fonction engine qui enregistre le
nécessaire
<font color="#FF0000"><strong>'+k+'
</strong></font>')
}
document.write('</p></form></blockquote>')}
}
function Engine(question, answer) { cette
fonction enregistre les cases cochées et leurs numéros
if (answer != ans[question]) {
if (!done[question]) {
done[question] = -1;
rep++;
panswer[question]=answer;
}
else {
done[question] = -1;
panswer[question]=answer;
}
}
else {
if (!done[question]) {
done[question] = -1;
rep++;
panswer[question]=answer;
}
else {
panswer[question]=answer;
}
}}
function NextLevel () { compare les réponses de l'utilisateur aux
bonnes réponses
score=0;
for (var i=1;i<(nb_elts_tot+1);i++){
if (panswer[i]==ans[i]){score++; si c'est la bonne, on incrémente
le score
}
}
}
function correction() {
if (rep>= nb_elts ) {si tous les QCM sont faits
NextLevel () on calcule le score
puis on ouvre la fenêtre de correction
correc=open("","correction","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=1,resizable=1,width=500,height=350");
correc.document.write('<BODY TEXT="#000000" BGCOLOR="#FFFFC0"
LINK="#0000FF" VLINK="#800080"
ALINK="#FF00FF"><b><center>VOS
REPONSES!</center><BR><BR>');
for (var i=1;i<(nb_elts_tot+1);i++){on affiche les numéros des
questions et les réponses de l'utilisateur
correc.document.write('QUESTION <font
color="#FF0000"><b><strong>'+i+' :
'+panswer[i].toUpperCase()+'</font ></b></strong>');
if (panswer[i]==ans[i]){
correc.document.write(" => EXACT<BR>"); on
peut le féliciter si c'est bon
}
else{
correc.document.write(" => FAUX<BR>");
}
}
correc.document.write("VOUS AVEZ "+score+" BONNES REPONSES SUR
"+nb_elts_tot+"<BR><BR>");
Une correction plus détaillée
correc.document.write('<b><center>CORRECTION</center><BR><BR></center>');
for (var k=1;k<(nb_elts_tot+1);k++){
correc.document.write(" QUESTION <font color='#FF0000'><b><strong>"+k+" "+enonce_quest[k]+"</font></b></strong> - la bonne réponse est :<font color='#FF0000'><b><strong>"+ans[k]+"</font></b></strong><br>"+commentaire[k]+"<br><br>");}
correc.document.write('ATTENTION ! Si vous revenez aux questions précédentes le numéro des bonnes réponses peut changer, leur tirage étant aléatoire.</center><BR></font></b></strong></center></p><br><hr width="75%">');
correc.document.close();
}
else {
alert("REPONDEZ D'ABORD A TOUS LES QCM, SVP !"); si tous les QCM ne sont pas faits, on se fâche
} }
// -->// End
</script>
fin du script et corps de la page
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<title>qcm</title>
</head>
<body TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF00FF">
<table border="0" cellspacing="0"
width="100%">
<tr>
<p>
<script>
affich_pag()
</script> </p>
<form> formulaire dont le clic va
entrainer la correction
<div
align="center"><center><p><input type="button"
value=" VOS RESULTATS ET LA CORRECTION"
onclick="correction()"> </p>
</center></div>
</form>
Si vous utilisez ce script, donnez l'adresse de votre page et elle apparaitra ici
sur Petiweb
sur Stethonet