reply_n utilisé dans les étapes suivantes

Accueil Forums Programmation WIMS Programmation d’exercices OEF reply_n utilisé dans les étapes suivantes

Vous lisez 9 fils de discussion
  • Auteur
    Messages
    • #7866
      Nicolas Fabiano
      Participant
      Up
      0
      Down
      ::

      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 ;).

    • #7868
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      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

       

    • #7869
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      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 suivantes

      Je vous laisse regarder (si vous n’y arrivez pas, c’est qu’il n’est pas clair … et on corrigera)
      • Cette réponse a été modifiée le il y a 1 année et 5 mois par Julien.
      • Cette réponse a été modifiée le il y a 1 année et 5 mois par Julien.
      • Cette réponse a été modifiée le il y a 1 année et 5 mois par Julien.
    • #7870
      Up
      1
      Down
      ::

      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

    • #7871
      Up
      0
      Down
      ::

      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

    • #7876
      lemaire
      Participant
      Up
      0
      Down
      ::

      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 »

       

    • #7878
      Nicolas Fabiano
      Participant
      Up
      0
      Down
      ::

      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.

    • #7881
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      Sauf que je déconseille de commencer une variable par un underscore …

    • #7882
      Up
      0
      Down
      ::

      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

    • #7885
      Julien
      Modérateur
      Up
      0
      Down
      ::

      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}
      
      
Vous lisez 9 fils de discussion
  • Vous devez être connecté pour répondre à ce sujet.