|
Présentation
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
Script
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>
Voir
un exemple réel
Téléchargez
le script
Retour
|