QCM et analyse des résultats


present.gif (1424 octets)

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 !!


exemple.gif (1055 octets)


script.gif (838 octets)

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>


live.gif (1590 octets)

Si vous utilisez ce script, donnez l'adresse de votre page et elle apparaitra ici

sur Petiweb

sur Stethonet


ramses.gif (3062 octets)

Téléchargez le script

ramses2.gif (3094 octets)

Retour