Accueil › Forums › Programmation WIMS › Programmation d’exercices OEF › reply_n utilisé dans les étapes suivantes
- Ce sujet contient 9 réponses, 5 participants et a été mis à jour pour la dernière fois par Julien, le il y a 1 année et 5 mois.
-
AuteurMessages
-
-
25 juin 2023 à 21:38 #7866Nicolas FabianoParticipant::
Bonjour,
Je cherche à faire un exercice à étapes, où l’élève a une certaine marge de manoeuvre dans les premières étapes. L’affichage et les réponses suivantes dépendent de son choix initial.
Pour rendre mon problème plus clair, j’ai construit un exemple minimal ci-dessous :
\steps{reply 1
reply 2}
\text{question1=Votre nombre}
\answer{\question1}{0,100,42}{type=range}
\text{question2=Son successeur}
\answer{\question2}{\reply1 + 1}{type=numeric}{option=absolute}
\text{explain1=Choisissez un nombre entre 0 et 100.}
\text{explain2=Vous avez choisi \reply1 ! Maintenant, vous devez donner le nombre suivant.}
\statement{
\if{\step=1}{\explain1}
\if{\step=2}{\explain2. Rappel : le nombre de base est \reply1.}
}
On remarque à l’exécution que \reply1 est bien remplacé par le nombre choisi dans sa seconde occurence (« … de base est \reply1. »), mais pas dans sa première (« … choisi \reply1 ! … »).
Par ailleurs, la deuxième question ne fonctionne simplement pas.
Mon interprétation est que \explain2, ainsi que la réponse attendue à chaque question, sont calculés dès le lancement de l’exercice, et ne sont pas mis à jour une fois que \reply1 se met à exister : seul le contenu de \statement est recalculé.
1) Cette interpétation est-elle correcte ? Quelqu’un aurait-il des détails sur l’ordre précis d’exécution de tout cela ?
2) Comment éviter ce problème ? Je considère que le fait que \reply1 ne prennent pas la bonne valeur dans explain2 est également un problème, car j’essaie de garder mon code structuré.
(Je suis tombé sur le sujet suivant :
Comment écrire une solution avec les données de l’utilisateur ?
qui suggère que c’est impossible, mais cela m’étonne beaucoup étant donné que c’est essentiel pour de nombreux types d’exercices.)
Je précise que je suis nouveau dans la création d’exercices, n’hésitez pas si mon code ci-dessus vous paraît innapproprié pour d’autres raisons ;).
-
26 juin 2023 à 11:08 #7868bernadetteMaître des clés::
Ce qui est impossible est d’utiliser les données de l’utilisateur dans le champ solution, mais on peut très bien écrire la solution dans le champ \feedback si on désire utiliser les données de l’utilisateur.
Par contre, il n’est pas possible de mettre \reply1 dans le champ answer.
Je réponds un peu plus tard si personne d’autre ne le fait pour le reste …
Bernadette
-
26 juin 2023 à 11:13 #7869bernadetteMaître des clés::
Il y a un exemple dans le document de Sophie et moi-même sur la programmation OEF :
https://wims.univ-cotedazur.fr/docs/introProgOEF.pdf
Paragraphe : Utiliser les réponses pour décider des étapes suivantesJe vous laisse regarder (si vous n’y arrivez pas, c’est qu’il n’est pas clair … et on corrigera) -
26 juin 2023 à 11:21 #7870Marie-joëlle RamageParticipant::
Bonjour Nicolas,
Je te propose le code ci-dessous, j’ai mis des explications, j’espère qu’elles seront claires.
Par contre, la syntaxe WIMS demande un ordre précis dans les commandes, en particulier les \answer se placent toujours après le statement.
*****************************************************************************************************
\title{essai Nicolas}\text{question1=Votre nombre}
\text{question2=Son successeur}\text{explain1=Choisissez un entier.}
** explain2 doit être construit en seconde étape pour que \reply1 soit connu, je le place dans le answer ***
\steps{reply 1
reply 2}\statement{
\if{\step=1}{\explain1}
\if{\step=2}{Vous avez choisi \reply1 ! Maintenant, vous devez donner le nombre suivant. }
}\answer{\question1}{\n1}{type=numeric}
\answer{\question2}{\n2}{type=numeric}* la réponse à la question 1 ne doit pas être initialisée, on la calcule après le answer (ici j’ai pris n1 pour reply1 et n3 pour reply3,
je calcule la bonne réponse n2 à partir de n1)*\integer{n1=\reply1}
\integer{n2=\n1+1}
\integer{n3=\reply2}* puisque n1 est calculé après le answer, j’utilise des conditions pour tester les réponses de l’élève.
weight=0 pour que la première question ne soit pas notée et option=nonstop pour passer à l’étape 2 quelque soit le résultat de la condition.*\condition{Vous avez choisi n=\n1 }{\n1 = \reply1}{option=nonstop}{weight=0}
\condition{Le successeur de \n1 est \n3}{\n2 = \reply2}
******************************************************************************************** »Marie-joelle Ramage
Université Paris-Saclay -
26 juin 2023 à 11:29 #7871Marie-joëlle RamageParticipant::
J’en profite pour te donner un essai d’exercices pour un nombre variable de réponses en étape 2.
*******************************************************************************
\title{exercice proposant un nombre variable de reply suivant les cas}
\author{Ramage, Marie-joëlle}*** Avant ****
\text{choix=randint(1,2)} Tirage aléatoire sur 1 ou 2 réponses demandées** programmation des réponses attendues *****
\integer{n=randint(0..9)}
\integer{n2=\n*\n}
\integer{n3=\n2*\n}** initialisation du nombre de réponse attendues ******
\text{etape=reply1}
\if{\choix=2}{\text{etape=reply1,reply2}}*** lancement de la procédure ********
\nextstep{\etape}\statement{
choix=\choix
Le carré de \n vaut \embed{reply1}.
\if{\choix=2}{Le cube de \n vaut \embed{reply2}}}*** après ****
\text{etape=} *** Blocage de l’exécution de l’étape suivante ***\answer{}{\n2}{type=numeric}
\answer{}{\n3}{type=numeric}Marie-joelle Ramage
Université Paris-Saclay -
26 juin 2023 à 12:33 #7876lemaireParticipant::
Bonjour,
Pour compléter les réponses déjà données, vous trouverez des explications sur la programmation d’exercices à étapes et des exemples dans le polycopié « Introduction à la programmation d’exercices » chapitre 4 (téléchargeable à partir de la classe ouverte « Aide au développement de ressources ») et dans le tutoriel « Doc Exercices OEF »
-
26 juin 2023 à 14:20 #7878Nicolas FabianoParticipant::
Merci pour vos réponses rapides et détaillées.
Vous proposez une manière de régler le problème, mais ma compréhension en est encore superficielle.
________________
Pour vérifier que j’ai bien compris : dans votre code, remplacer la ligne
\answer{\question2}{\n2}{type=numeric}
par la ligne
\answer{\question2}{\_}{type=numeric}
(avec \_ une variable définie nulle part) fonctionne tout aussi bien ?
________________
Par ailleurs, le code suivant (une version condensée et un peu modifiée du vôtre) fonctionne :
\steps{reply 1
reply 2}
\statement{
\if{\step=1}{Choisissez un entier.}
\if{\step=2}{Vous avez choisi \reply1 ! Maintenant, vous devez donner le nombre suivant. }
}
\answer{Votre nombre}{\_1}{type=numeric}
\answer{Son successeur}{\_2}{type=numeric}
\integer{rep1=\reply1}
\integer{rep2=\reply2}
\condition{Vous avez choisi n=\rep1}{0=0}{option=nonstop}{weight=0}
\condition{Le successeur de \rep1 est \rep2}{\reply1+1 = \reply2}
mais il cesse de fonctionner si j’utilise \reply1 à la place de \rep1 : ils ne sont pas remplacés, et apparaissent comme « \reply1 » (même problème avec \rep2). Je ne comprends pas ce phénomème, et j’ai l’impression que c’est le même que celui qui me pose problème depuis le début.
-
26 juin 2023 à 15:22 #7881bernadetteMaître des clés
-
26 juin 2023 à 15:29 #7882Marie-joëlle RamageParticipant::
Pour vérifier que j’ai bien compris : dans votre code, remplacer la ligne
\answer{\question2}{\n2}{type=numeric}
par la ligne
\answer{\question2}{\_}{type=numeric}
(avec \_ une variable définie nulle part) fonctionne tout aussi bien ?Oui, vous pouvez utiliser presque n’importe quel nom de variable du moment que la variable ne soit pas définie avant le \answer. Par contre, privilégiez des caractères alphanumériques.
si j’utilise \reply1 à la place de \rep1 : ils ne sont pas remplacés, et apparaissent comme « \reply1 » (même problème avec \rep2). Je ne comprends pas ce phénomème, et j’ai l’impression que c’est le même que celui qui me pose problème depuis le début.
Je ne sais pas trop à quel moment la réponse est affectée à la variable \reply1. J’ai l’impression que le texte de la condition est évalué avant l’affectation à \reply1 et que le fait d’initialiser de nouvelles variables avec \reply1 force l’affichage. Ce n’est pas très clair pour moi non plus, mais cela fonctionne.
Marie-joelle Ramage
Université Paris-Saclay -
26 juin 2023 à 17:29 #7885JulienModérateur::
Bonjour,
Si tu veux que tout soit recalculer, il est préférable d’utiliser l’instruction nextstep. Maintenant tu peux remplacer \reply1 par \rep1. Il ne faut pas oublier d’initialiser la variable. J’ai ajouté l’instruction condition afin que seul la deuxième condition soit analysée.
Il faudrait aussi tester que la première réponse soit un entier.\title{nic} \text{etape=reply 1 reply 2} \nextstep{\etape} \text{COND=2} \conditions{\COND} \integer{rep1=} \statement{ \if{\step=1}{Choisissez un entier.} \if{\step=2}{Vous avez choisi \rep1 ! Maintenant, vous devez donner le nombre suivant. } } \answer{Votre nombre}{\1}{type=numexp} \answer{Son successeur}{\2}{type=numexp} \text{rep1=\reply1} \integer{rep2=\reply2} \text{etape=} \condition{Vous avez choisi n=\rep1}{0=0}{option=nonstop}{weight=0} \condition{Le successeur de \rep1 est \rep2}{\rep1+1 = \reply2}
-
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.