Forums » Utilisation d'AMC (french) »
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
\FPevalil n'arrive pas à le calculer puisque
intXest 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)