Accueil › Forums › Programmation WIMS › Programmation dans le langage wims › analyse d'une réponse jsxgraphcurve
Étiqueté : jsxgraphcurve
- Ce sujet contient 3 réponses, 2 participants et a été mis à jour pour la dernière fois par bernadette, le il y a 9 années et 3 mois.
-
AuteurMessages
-
-
1 septembre 2015 à 14:05 #3054Richard TailletParticipant::
Bonjour,
Je suis en train de finaliser un exercice portant sur la réfraction et sur l’utilisation d’un rapporteur, l’utilisateur doit tracer un trait faisant un angle donné avec la verticale (code complet ci-dessous), puis si c’est correct, doit en tracer un autre. Mon problème est le suivant : je vérifie que la première droite tracée a la bonne pente grâce à la commande
\condition{}{abs(\angle+\angleincident-90)<1}
Quand je teste le code joint, effectivement à la première étape, WIMS me sort un OUI ou un NON, selon que j’ai bien tracé ce qui était demandé. En revanche, il passe à l’étape 2 de toute façon, indépendamment de la réussite ou non de l’étape 1. Du coup j’ai l’impression que \condition, en fait, c’est juste une fonction qui écrit la ligne OUI ou NON, une fois la réponse donnée, mais que ce qui gère le fait que la réponse soit considérée correcte ou pas dans l’exo (et donc fait éventuellement recommencer), c’est \answer. Du coup, quel est le mécanisme permettant de ne pas passer à la seconde étape si la première n’est pas correcte ?
Merci d’avance !
Richard.
\title{Loi de Snell-Descartes pour une réfraction verre-air} \language{fr} \author{Richard Taillet} \css{<style type="text/css"> .consigne{font-style:italic;border:1px solid silver;font-size:small;margin:1.5rem 0.5rem 0rem 0.3rem;background-color:rgba(230,230,230,0.3);color:rgb(100,100,100)} .consigne, .consigne h2{padding:.3rem .4rem;} .consigne h2{display:inline-block;font-size:0.8em;margin:-0.3rem;background-color:silver;color:rgb(80,80,80)} .jxgbox {margin-left:auto;margin-right:auto;} .jsxgraph_button {text-align:center;} </style>} \computeanswer{no} \format{html} \precision{1000} \range{-5..5} \integer{angleincident=5*randint(1..17)} \real{indice=1.5} \real{anglerefracte=asin(sin(\angleincident*3.14159/180.)/\indice)*180/3.14159} \real{anglerefracte=floor(\anglerefracte*10)*0.1} \integer{rayon=300} \integer{xpix=2*\rayon*1.2} \integer{ypix=2*\rayon*1.2} \real{xmin=-1.2} \real{xmax=1.2} \real{ysize=1} \real{ymin=-0.2} \real{ymax=1.2} \text{rapporteur=linewidth 1 frect 0,0,\xpix,\ypix/2,lightgray text black,\xpix/4, \ypix/2*0.92, large, verre text black,\xpix/4, \ypix/2*1.05, large, air } \text{rapporteurbas=\rapporteur} \for{i=90 to 180 step 10}{ \real{ang=\i*3.14/180} \real{ang=floor(\ang*1000)/1000} \text{rapporteur=\rapporteur line \xpix/2+\rayon*cos(\ang), \ypix/2-\rayon*sin(\ang), \xpix/2+\rayon*1.1*cos(\ang),\ypix/2-\rayon*1.1*sin(\ang), black } } \for{i=90 to 180 step 30}{ \text{rapporteur=\rapporteur text black, \xpix/2+\rayon*1.1*cos(\i*3.14/180),\ypix/2-\rayon*1.1*sin(\i*3.14/180),large, \i } } \text{rapporteur=\rapporteur line \xpix/2-0.1*\rayon, \ypix/2, \xpix/2+0.1*\rayon, \ypix/2, black line \xpix/2, \ypix/2-0.1*\rayon, \xpix/2, \ypix/2+0.1*\rayon, black } \for{i=95 to 175 step 10}{ \real{ang=\i*3.14/180} \text{rapporteur=\rapporteur line \xpix/2+\rayon*cos(\ang), \ypix/2-\rayon*sin(\ang), \xpix/2+\rayon*1.05*cos(\ang),\ypix/2-\rayon*1.05*sin(\ang), black } } \for{i=91 to 179 step 1}{ \real{ang=\i*3.14/180} \real{ang=floor(\ang*1000)/1000} \text{rapporteur=\rapporteur line \xpix/2+\rayon*cos(\ang), \ypix/2-\rayon*sin(\ang), \xpix/2+\rayon*1.02*cos(\ang),\ypix/2-\rayon*1.02*sin(\ang), black } } // rapporteur du bas pour la 2eme partie de l'exo \for{i=-90 to 180 step 10}{ \real{ang=\i*3.14/180} \real{ang=floor(\ang*1000)/1000} \text{rapporteurbas=\rapporteurbas line \xpix/2+\rayon*cos(\ang), \ypix/2+\rayon*sin(\ang), \xpix/2+\rayon*1.1*cos(\ang),\ypix/2+\rayon*1.1*sin(\ang), black } } \for{i=-90 to 180 step 30}{ \text{rapporteurbas=\rapporteurbas text black, \xpix/2+\rayon*1.1*cos(\i*3.14/180),\ypix/2+\rayon*1.1*sin(\i*3.14/180),large, \i } } \text{rapporteurbas=\rapporteurbas line \xpix/2-0.1*\rayon, \ypix/2, \xpix/2+0.1*\rayon, \ypix/2, black line \xpix/2, \ypix/2-0.1*\rayon, \xpix/2, \ypix/2+0.1*\rayon, black } \for{i=5 to 175 step 10}{ \real{ang=\i*3.14/180} \real{ang=floor(\ang*1000)/1000} \text{rapporteurbas=\rapporteurbas line \xpix/2+\rayon*cos(\ang), \ypix/2+\rayon*sin(\ang), \xpix/2+\rayon*1.05*cos(\ang),\ypix/2+\rayon*1.05*sin(\ang), black } } \for{i=-89 to 180 step 1}{ \real{ang=\i*3.14/180} \text{rapporteurbas=\rapporteurbas line \xpix/2+\rayon*cos(\ang), \ypix/2+\rayon*sin(\ang), \xpix/2+\rayon*1.02*cos(\ang),\ypix/2+\rayon*1.02*sin(\ang), black } } \text{rapporteurbas=\rapporteurbas linewidth 2 line \xpix/2-\rayon*cos((90-\anglerefracte)*3.14/180), \ypix/2-\rayon*sin((90-\anglerefracte)*3.14/180), \xpix/2, \ypix/2, blue} \text{dessin= draw( \xpix,\ypix \rapporteur ) } \text{dessinbas= draw( \xpix,\ypix \rapporteurbas ) } \text{choix=oui,non} \text{reponse=2} \text{ETAPE = r1 r2 r3} \steps{\ETAPE} \statement{ Un rayon lumineux venant de la gauche et se propageant initialement dans du verre (d'indice égal à \indice) arrive sur une interface d'air horizontale (indice de réfraction égal à 1), au point O, avec un angle d'incidence de \anglerefracte degrés. \if{\step == 1}{ <p>1. <b>Tracer le rayon incident.</b></p> \embed{r1,\xpix x \ypix \dessin sline} } \if{\step == 2}{ <p>1. Le rayon incident est tracé correctement.</p> <p>2. <b>La condition de réflexion totale est-elle vérifiée ?</b></p> \embed{r2,1}\embed{r2,2} } \if{\step == 3}{ <p>1. Le rayon incident est tracé correctement.</p> <p>2. La condition de réflexion totale n'est pas vérifiée.</p> <p>3. <b>Tracer le rayon émergent.</b></p> \embed{r3,\xpix x \ypix \dessinbas sline} } <div class="consigne"> <h2>Consignes : </h2> <p>La droite est définie en cliquant successivement sur deux points de la figure. Il est conseillé de commencer par cliquer au centre du rapporteur.</p> </div> } \answer{}{\jstest}{type=jsxgraphcurve} {option=color1=blue color2=blue precision=8} \answer{}{\reponse;\choix}{type=click} {option=noanalyzeprint} \answer{}{\jstestbas}{type=jsxgraphcurve} {option=color1=blue color2=blue precision=8} \real{longueur = sqrt((\jstest[4]-\jstest[2])*(\jstest[4]-\jstest[2])+(\jstest[3]-\jstest[1])*(\jstest[3]-\jstest[1]))} \real{cosinus = (\jstest[3]-\jstest[1])/\longueur} \real{angle=0.} \if {\cosinus==0}{ \real{angle=90} } { \real{angle=atan((\jstest[4]-\jstest[2])/(\jstest[3]-\jstest[1]))/3.14159*180} } \if {\angle<0}{\real{angle=180+(\angle)}} \real{longueurbas = sqrt((\jstestbas[4]-\jstestbas[2])*(\jstestbas[4]-\jstestbas[2])+(\jstestbas[3]-\jstestbas[1])*(\jstestbas[3]-\jstestbas[1]))} \real{cosinusbas = (\jstestbas[3]-\jstestbas[1])/\longueurbas} \real{anglebas=0.} \if {\cosinusbas==0}{ \real{anglebas=90} } { \real{anglebas=atan((\jstestbas[4]-\jstestbas[2])/(\jstestbas[3]-\jstestbas[1]))/3.14159*180} } \if {\anglebas<0}{\real{anglebas=180+(\anglebas)}} \real{ecart=abs(\anglebas-90+\angleincident)} \condition{Votre tracé}{abs(\angle+\anglerefracte-90)<1} \condition{Votre tracé est correct (il s'écarte de la valeur attendue de \ecart deg)}{\ecart<1}
- Ce sujet a été modifié le il y a 9 années et 3 mois par Richard Taillet.
- Ce sujet a été modifié le il y a 9 années et 3 mois par Richard Taillet.
- Ce sujet a été modifié le il y a 9 années et 3 mois par Richard Taillet.
-
1 septembre 2015 à 16:04 #3058bernadetteMaître des clés::
Utiliser nextstep devrait résoudre le problème, il me semble. Mais je n’ai
pas retester si cela convient exactement à ce que tu veux
(mais j’ai ce modèle sous la main !).\text{nstep=r1}
\nextstep{\nstep}
\text{repg=1}
\text{instruction=vxvqsd }
\statement{
\instruction
\embed{r \step}
}
\answer{}{\rep1}{type=numeric}{option=nonstop noanalyzeprint}
\answer{}{\rep2}{type=numeric}{option=nonstop noanalyzeprint}
\answer{}{\rep3}{type=numeric}{option=nonstop noanalyzeprint}
\text{nstep=}
\text{nstep=\rep1!=\repg and \step=2? r2}
\text{nstep=\rep2!=\repg and \step=3? r3}
\condition{}{\reply1=\repg or \reply2=\repg or \reply3=\repg}{option=hide} -
1 septembre 2015 à 16:44 #3059Richard TailletParticipant::
Merci pour cette réponse rapide ! Cependant, je ne comprends pas suffisamment l’exemple pour voir en quoi il répond à ma question et quand je le teste tel quel, je ne comprends pas non plus ce qu’il fait (quelle serait la réponse considérée comme correcte dans votre exemple ?).
Pourquoi l’utilisation de « \nextstep » est-elle ici préférable à celle de « \steps » ? J’ai sous les yeux la doc que vous avez écrite avec Sophie Lemaire, et la lecture du paragraphe 4.2 consacré aux exercices à étapes m’a donné l’impression que les deux mécanismes étaient équivalents.
J’essaie de comprendre ! 😉
-
1 septembre 2015 à 20:55 #3064bernadetteMaître des clés::
Avec nextstep, on peut décider après le statement quelle sera la question suivante.
Avec \steps, la succession des questions est décidé avant le statement, donc ne peut pas être changé selon la réponse de l’élève.Excusez moi, je ne pourrais pas répondre les prochains jours, j’ai donc répondu un peu à la va vite et en fait le code en question ne fait ce que vous voulez.
Il est fait pour poser trois fois la même question. S’arrête dès que la réponse est bonne, je crois.
Bernadette
-
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.