Déterminer si c'est un multiple

Added by Rick VERHOEF 5 months ago

Bonjour,

Je souhaite que les étudiants me donne un multiple d'un nombre.
Ils saisissent leur nombre avec \AMCnumericChoices et ensuite je cherche à récupérer cette valeur avec intX puis de vérifier si le modulo = 0 ou pas et accorder en fonction 1 ou 0 points.

Dans l'idée ça m'avait l'air simple, mais j'ai beau tester des configurations je n'arrive pas à obtenir des résultats cohérents.


\element{TroisMultiples}{
\begin{questionmultx}{mult3et01}
\scoring{formula="(intX>=38 && \intcalcMod{intX}{19}==0 ? 1 : 0)"}

Un multiple de 19 (différent de 0 et 19) :

\AMCnumericChoices{38}{
  digits=4,
  decimals=0,
  sign=false,
  scoring=false
}

\end{questionmultx}
}

Dans ce cas le calcul du modulo ne se fait pas dans formula, si j'essaie de passer par une variable exterieure avec

\FPeval
il n'arrive pas à le calculer puisque
intX
est inconnu à la compilation et si j'utilise une formule de ce type :
formula=(intX>=38 && intX-19*floor(intX/19)==0 ? 1 : 0)

Je peux compiler, mais les notes ne sont pas cohérentes avec les réponses données.

Il doit y avoir une subtilité de formula ou de intX que je ne saisis pas.

Tout éclairage ou piste de réflexion sera le bienvenu !

Merci,

Rick


Replies (5)

RE: Déterminer si c'est un multiple - Added by Alexis Bienvenüe 5 months ago

La fonction int en perl prend la partie entière, donc je propose

\scoring{formula="(intX>=38 && intX-int(intX / 19)*19==0 ? 1 : 0)"}

Ça aurait été plus simple avec l'opérateur % qui fait le modulo en perl mais évidemment cela bloque en LaTeX…

RE: Déterminer si c'est un multiple - Added by Frédéric Bréal 5 months ago

C'est ce que j'ai fait hier mais sans les guillemets.
Question : ces guillemets sont-elles obligatoires avec intX, Vdifference et intV ou dès qu'on utilise une variable perl ?
J'ajouterai aussi une précision dans la documentation.

RE: Déterminer si c'est un multiple - Added by Alexis Bienvenüe 5 months ago

Surtout quand on utilise des caractères spéciaux ou des virgules.

RE: Déterminer si c'est un multiple - Added by Rick VERHOEF 5 months ago

Bravo, cela fonctionne parfaitement.

Merci beaucoup !

Je joins ici mon code complet pour cette question au cas ou cela intéresse d'autres personnes.

\element{TroisMultiples}{
\begin{questionmultx}{mult3et07}
% Génération d'un nombre aléatoire entre 11 et 35
\FPeval{\nombreBase}{trunc(random*25+11,0)}
% Calcul du minimum acceptable (2N)
\FPeval{\minimum}{trunc(2*\nombreBase,0)}
\scoring{formula="(intX>=\minimum && intX-int(intX / \nombreBase)*\nombreBase==0 ? 1 : 0)"}
Un multiple de \nombreBase{} (différent de 0 et \nombreBase) :

\AMCnumericChoices{\minimum}{digits=4,decimals=0,sign=false,scoring=false}

\explain{Un multiple de \nombreBase{} s'écrit $k \times \nombreBase$ avec $k$ entier.
Les premiers multiples sont : \nombreBase, \FPeval{\deux}{trunc(2*\nombreBase,0)}\deux, \FPeval{\trois}{trunc(3*\nombreBase,0)}\trois, etc.
La réponse doit être au minimum \minimum{} (= $2 \times \nombreBase$).}
\end{questionmultx}
}

Et ici pour une question dérivée :

\element{TroisDiviseurs}{
\begin{questionmultx}{divet01}
% Génération de facteurs premiers aléatoires
\FPeval{\facteurA}{trunc(random*10+2,0)}  % entre 2 et 6
\FPeval{\facteurB}{trunc(random*5+2,0)}  % entre 2 et 6
\FPeval{\facteurC}{trunc(random*3+2,0)}  % entre 2 et 4
% Construction du nombre composé
\FPeval{\nombreBase}{trunc(\facteurA*\facteurB*\facteurC,0)}
\scoring{formula="(\nombreBase-int(\nombreBase / intX)*intX==0 && intX>1 && intX<\nombreBase ? 1 : 0)"}
Un diviseur de \nombreBase{} (différent de 1 et \nombreBase) :

\AMCnumericChoices{2}{digits=3,decimals=0,sign=false,scoring=false}

\explain{Un diviseur de \nombreBase{} est un nombre entier qui divise \nombreBase{} sans reste.
Le nombre \nombreBase{} peut se décomposer en produit de facteurs (par exemple : $\facteurA \times \facteurB \times \facteurC = \nombreBase$).
Donc \facteurA, \facteurB, \facteurC{} et d'autres combinaisons sont des diviseurs possibles.
La réponse doit être différente de 1 et de \nombreBase.}
\end{questionmultx}
}

RE: Déterminer si c'est un multiple - Added by Frédéric Bréal 3 months ago

Je viens de mettre à jour la version test et la fonction modulo fonctionne grâce à la modification de décembre.

\scoring{formula="(intX>=38 && intX \% 19 ==0 ? 1 : 0)"}

(1-5/5)