IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Rectification script QCM


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut Rectification script QCM
    bonjour,

    Sur mon site il y a un QCM qui intéresse quelques personnes.
    http://www.leparamoteur.fr/qcm/qcm12.html

    Mais j'ai un problème que je n'arrive pas à résourdre.

    Actuellement pour avoir le corrigé du qcm il faut répondre à toutes les questions. Je ne veux plus de cette fonctionnalité. je voudrai que le corrigé fonctionne quelque soit le nombre de réponses cochées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
     
     
    var enonce_quest = new Array;
    var nb_eltsform = new Array;
    var formans = new Array;
    var commentaire = new Array;
    var ans = new Array;
    var done = new Array;
    var panswer = new Array;
    var score = 0;
    var rep = 0;
    compte3=0;
     
    var nb_elts=40;
     
     
    var nb_elts_tot=nb_elts
     
    enonce_quest [	1	]="	Vous êtes envol de navigation il est 19h12. Le coucher du soleil est intervenu à 19h02. Vous êtes équipé d'une radio permettant le contact avec un organisme au sol. Puisque le coucher du soleil est passé depuis 10 minutes : 	"
    nb_eltsform[	1	]=4		
    formans[	1	]="	vous devez absolument vous poser car vous êtes en infraction avec la réglementation qui interdit le vol de nuit aux ULM.	"
    formans[	2	]="	vous devez avoir rejoint votre destination avant 19h32, le VFR de nuit étant interdit aux ULM.	"
    formans[	3	]="	vous devez avoir déposé par radio un plan de vol (VFR de nuit ULM) avant 19h17, pour poursuivre votre vol en VFR de nuit.	"
    formans[	4	]="	vous devez absolument déposer par radio un plan de vol (VFR de nuit) au plus tard 30 minutes avant le coucher du soleil. 	"
    ans[	1	]= 	2	;
    commentaire[	1	]="	Vous devez avoir rejoint votre destination avant 19H32, le VFR de nuit étant interdit aux ULM.	"
     
    enonce_quest [	2	]="	En VFR, l'action préliminaire au vol doit comprendre l'étude attentive des bulletins et prévisions météorologiques disponibles les plus récents :	"
    nb_eltsform[	2	]=4		
    formans[	5	]="	sauf si aucun atterrissage n'est envisagé à plus de 30 km du départ.	"
    formans[	6	]="	sauf s'il n'est pas prévu de s'éloigner de plus de 30 km de l'aérodrome de départ.	"
    formans[	7	]="	sauf si le vol reste dans le circuit d'aérodrome.	"
    formans[	8	]="	pour tous les vols, sans exception.	"
    ans[	2	]= 	3	;
    commentaire[	2	]="	sauf si le vol reste dans le circuit d'aérodrome.	"
     
    enonce_quest [	3	]="	En vol, vous apercevez derrière vous un avion rapide qui vous rattrape. Vous:	"
    nb_eltsform[	3	]=4		
    formans[	9	]="	virez vers la gauche pour le laisser passer. 	"
    formans[	10	]="	diminuez votre altitude pour qu'il vous dépasse par dessus. 	"
    formans[	11	]="	maintenez votre trajectoire et votre altitude, l'avion vous dépassera par la droite. 	"
    formans[	12	]="	virez vers la droite pour le laisser passer.	"
    ans[	3	]= 	3	;
    commentaire[	3	]="	maintenez votre trajectoire et votre altitude, l'avion vous dépassera par la droite. 	"
     
    enonce_quest [	4	]="	Afin d'intégrer le circuit d'un aérodrome doté d'un organisme AFIS, en dehors des horaires de fonctionnement de cet organisme :	"
    nb_eltsform[	4	]=4		
    formans[	13	]="	vous vous reportez à la verticale du terrain en procédant à l'examen de l'aérodrome puis vous vous reportez directement en étape de base. 	"
    formans[	14	]="	vous vous reportez à la verticale du terrain à basse hauteur en procédant à l'examen de l'aérodrome puis vous rejoignez la branche vent arrière. 	"
    formans[	15	]="	vous vous reportez à la verticale du terrain en procédant à l'examen de l'aérodrome puis vous vous reportez directement en finale. 	"
    formans[	16	]="	vous vous reportez à la verticale du terrain en procédant à l'examen de l'aérodrome à une hauteur supérieure à celle du tour de piste puis vous rejoignez le début de la branche vent arrière. 	"
    ans[	4	]= 	4	;
    commentaire[	4	]="	vous vous reportez à la verticale du terrain en procédant à l'examen de l'aérodrome à une hauteur supérieure à celle du tour de piste puis vous rejoignez le début de la branche vent arrière. 	"
     
    enonce_quest [	5	]="	La présence d'une flèche de couleur voyante dans l'aire à signaux indique que :	"
    nb_eltsform[	5	]=4		
    formans[	17	]="	le circuit d'aérodrome s'effectue par la droite par rapport à l'axe de la piste en service. 	"
    formans[	18	]="	le dégagement de la piste après l'atterrissage s'effectue par la droite. 	"
    formans[	19	]="	le circuit d'aérodrome s'effectue par la gauche par rapport à l'axe de la piste en service. 	"
    formans[	20	]="	le dégagement de la piste après l'atterrissage s'effectue par la gauche. 	"
    ans[	5	]= 	1	;
    commentaire[	5	]="	le circuit d'aérodrome s'effectue par la droite par rapport à l'axe de la piste en service. Le tour de piste est toujours à main gauche, si ce n'est pas le cas, la flèche dans l'aire à signaux l'indique en tournant à droite.	"
     
    .....
    ......
    ......
     
    enonce_quest [	40	]=" Les conditions aérologiques sont turbulentes, vous vous présentez en finale :	"
    nb_eltsform[	40	]=4		
    formans[	157	]="	 plus lentement que par temps calme.	"
    formans[	158	]="	 plus vite que par temps calme.	"
    formans[	159	]="	 à la même vitesse que par temps calme. 	"
    formans[	160	]="	 avec une pente plus faible que par temps  calme.	"
    ans[	40	]= 	2	;
    commentaire[	40	]="	 plus vite que par temps calme.	Rappel : Vitesse égale sécurité "  
     
    function Engine(question, answer) {
    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 () {
     
    score=0;
    for (var i=1;i<(nb_elts_tot+1);i++){
     if (panswer[i]==ans[i]){score++;
     }
    }
     }
    function correction() {
    if (rep>= nb_elts ) 
    {
    NextLevel ()
     
    correc=open("","correction","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=1,resizable=1,width=550,height=450");
    correc.document.write('<BODY TEXT="#333333" BGCOLOR="#F2F2F2" LINK="#333333" VLINK="#333333" ALINK="#333333"><b><a href="http://www.leparamoteur.fr">QCM PARIS-FRANCE-PARAMOTEUR</a><br><br>- Si vous avez 30 bonnes r&eacute;ponses vous &ecirc;tes re&ccedil;us... 36 bonnes r&eacute;ponses  vous d&eacute;crochez le th&eacute;orique instructeur... Sinon encore un peu de travail !<br>_________________<br><br>VOS REPONSES AUX QCM N° 12<BR><BR>');
      score=0;
    for (var i=1;i<(nb_elts_tot+1);i++){
     correc.document.write('A la question <font color="#333333" size="2"><b><strong>'+i+' votre réponse a été -- '+panswer[i].toUpperCase()+'</font ></b></strong>');
    if (panswer[i]==ans[i]){score++;
     correc.document.write(" -- OK<BR>");
    }
    else{
     correc.document.write(" -- FAUX<BR>");
    }
    }
     
     
     
     correc.document.write("    <br>");
    valid=1;
     correc.document.write("Vous avez "+score+" bonnes réponses sur "+nb_elts_tot+"<BR><BR>");
     
     
    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='#333333' size='2'><b><strong>"+k+" "+enonce_quest[k]+"</font></b></strong>  - la bonne réponse était :<font color='#333333'><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("Répondez d'abord à toutes les questions, SVP !");
      }  
      }
     
    function affich_pag(){
     var compte=0
    var compte2=0
    inumber=3
     randomnumber = Math.random() ;
     rand1 = Math.round( (inumber-1) * randomnumber) + 1 ;
     
    for (var i=1;i<=(nb_elts);i++) {document.write("<p><font color='#333333' size='1'><b><strong>"+i+" Question : <br>" +enonce_quest[i]+"</strong></font></p></b><font color='#003333' size='1'><blockquote>");
    compte2=compte
    trouv=0
    for (var j=rand1+compte2;j<(nb_eltsform[i]+1+compte2);j++){
     
     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  color="#333333" size="1"><form method="POST"><p>Cochez votre réponse : </font>')
    for (var k=1;k<(nb_eltsform[i]+1);k++){document.write(' <input type="radio" name="q"  value="'+k+'"onclick="Engine('+i+',this.value)"><font color="#FF0000" size="2"><strong>'+k+'   </strong></font>')
    }
    document.write('</p></form></blockquote><br><hr width="75%">')}
                  }

    Est-ce que ma demande de modification est possible sur se script ?

    Vadim

  2. #2
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Salut,

    Sans avoir lu le code, je pense qu'il faut enlever ce if :

    Et le else qui va avec. A priori, c'est lui qui vérifie que toutes les questions ont une réponse.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    bonjour vermine,

    Je viens d'enlever le 'if' et le 'else' qui va avec et effectivement la page correction s'ouvre bien maintenant, mais sans le corrigé...

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Pardon d'insister, mais peut-être qu'il n'y a pas de solution à mon problème.
    Si vous pourriez me le faire savoir !? Ca m’empêcherait de tourner en rond.

    En espérant ne pas trop vous importuner.

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    même si la méthode choisie est maladroite (open + write), le principe de la page bilan est cohérent, donc, pas de problème de faisabilité...

    message d'erreur?

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Bonjour,

    Je n'ai pas de message d'erreur.
    Mon QCM fonctionne très bien, à conditions de répondre à toutes les questions, sinon j'ai le message
    Répondez d'abord à toutes les questions, SVP !
    Dans le fonctionnement actuelle c'est normal.
    C'est justement cela que je voudrai changer.
    Je voudrai pouvoir répondre qu'a une partie du QCM et avoir le corrigé, ce qui n'est pas possible actuellement.

    L'indication de vermine >
    Salut,

    Sans avoir lu le code, je pense qu'il faut enlever ce if :

    Code : if (rep>= nb_elts )
    Et le else qui va avec. A priori, c'est lui qui vérifie que toutes les questions ont une réponse.
    J'ai bien supprimé ces lignes (109 et plus bas 146, 147, 148)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    else { 
       alert("Répondez d'abord à toutes les questions, SVP !");
      }
    et ça empêche bien le
    Répondez d'abord à toutes les questions, SVP !
    quand je ne répond pas à la totalité du QCM. cela ouvre bien la bonne fenetre de correction, mais malheureusement il manque à l'intérieure le corrigé.

    pour voir voici le lien avec l'indication de vermine sans les lignes 109 et plus bas 146, 147, 148
    http://www.leparamoteur.fr/qcm/qcm12.html
    Répondez à une ou deux questions au hazard pour voir le résultat (bouton correction tout en bas)

    Maintenant un autre lien pour voir le fonctionnement d'origine > http://www.leparamoteur.fr/qcm/qcm11.html
    vous verrez qu'il faut impérativement répondre à toutes les questions pour voir le corrigé en entier.

    Pardon, tout ça est un peu 'brouillon, mais comme vous l'aurez remarqué, je ne suis pas développeur, sans compter ma mauvaise syntaxe :o)

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    IE envoie effectivement l'alerte, mais Fox ouvre la page correction sans que le questionnaire soit complet (bonne nouvelle), tout en signalant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panswer[i] is undefined; (418)
    Il semble que tu t'embrouilles dans tes indices, peut-être en déclarant elts_tot+1 comme condition;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (var i=1;i<(nb_elts_tot+1);i++){
    (je n'ai pas eu le temps de vérifier le détail de tes déclarations de variables / tableaux; la différence de résultats selon le navigateur laisse songeur)

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Pourtant de mon coté l'alerte est avec les 2 navigateur, sauf sur le qcm 12 qui est bidouillé suivant les indications de ermine, mais qui ne donne pas la correction.

    Par contre merci javatwister pour ton aide, mais il faudrait que tu sois indulgent avec moi qui ne suis pas du tout développeur, quand je te lis c'est presque du "chinois", façon de parler bien sur.

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 205
    Par défaut
    Bonjour,
    dans ton code "normal" à chaque click sur une CHECKBOX tu testes la réponse et tu initialises le tableau des réponses panswer[].

    Lorsque tu appelles la fonction correction, dans ton code "normal" le tableau est prêt à être parcouru, il y a autant de réponses que de question.

    Dans ton code"modifié" et lors de l'appel à la fonction, sans qu'il y eut de réponse ton tableau de résultat n'est initialisé qu'avec les réponses données et donc pas forcément avec toutes les réponses, ce qui fait que ton tableau panswer[] contient moins d'indices que de questions et vlan cela plante!

    Change la chronologie de test est fait un test global sur les réponses dans ta fonction correction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function correction() {
      var i, nb = nb_question;
      var score=0;
      // récup. des réponses
      for( i=0; i < nb_question; i++){
        // récupération et initialisation de panswer[]
      }
      // calcul du score
      for( i= 0; i< nb_question; i++){
        if( panswer[i] == ans[i]){
          score++;
        } 
      }
      // affichage résultat
      //... la suite
    }
    voilà pour les grandes lignes, sachant que cela est optimisable.

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    bonjour,

    Merci pour votre aide.
    mais je n'arrive toujours pas à avoir le corrigé du qcm en ne répondant pas à la totalité des questions.

    Ça vient surement de moi, je n'arrive pas à comprendre l'emplacement ou changer les codes indiqués.
    J'ai bien essayé plusieurs possibilités, avec ou sans les premières indications de vermine, mais rien n'y fait.

  11. #11
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Essayez d'implémenter la chronologie de NoSmoking et dîtes nous à partir de quel moment vous êtes bloqué.

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Citation Envoyé par vermine Voir le message
    Essayez d'implémenter la chronologie de NoSmoking et dîtes nous à partir de quel moment vous êtes bloqué.
    Et pour le neuneu que je suis, vous pourriez traduire svp !?

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 205
    Par défaut
    Le principe est le suivant
    - tu supprimes les onclick de tes INPUT RADIO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="radio" onclick="Engine(2,this.value)" value="1" name="q">
    - tu reportes le comptage, correction dans ta seule fonction correction(), il te faudra gérer les groupes de 4.

    Autre principe, tu ne touches à rien mais tu initialises tout de suite ton tableau de résultat, panswer[], à la bonne taille avec une valeur à -1, par exemple, pour indiquer que la question n'est pas traitée.

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  2. Script et XMLmodule
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/01/2003, 16h10
  3. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  4. Réponses: 2
    Dernier message: 11/07/2002, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo