Faisant suite à mes premiers essais, où j’explique le principe et la méthode pour l’implémenter, je présente ici un exemple d’utilisation d’un programme de calcul formel (Giac) pour générer automatiquement des exercices de physique (ou de mathématique, ou de chimie) dans \LaTeX.
Un même exercice de physique est présenté trois fois. Dans les deux dernières versions, les calculs sont faits par Giac. Dans le dernier exerice, les valeurs de départ sont aléatoires.
Nous avons choisi un exercice de mouvement circulaire uniforme que nous utilisons dans une interrogation.
Le même exercice est présenté trois fois. Enoncé et solutionnaire sont présentés à chaque fois.
Le premier est fait "à la main" (enfin... à la calculatrice !).
Le deuxième est identique au premier mais les calculs sont fait lors de la compilation \LaTeX par Giac. Les valeurs de départ ayant été fournies au programme de calcul formel.
Le troisième suit le même schéma que les deux premiers mais les valeurs dans l’énoncé sont générées aléatoirement par Giac. Les calculs sont fait lors de la compilation \LaTeX par Giac.
Ceci constitue la "brique de base" pour un générateur d’interrogation !
Il devient facile de donner des exercices différents à tous les élèves pour un devoir ou une interrogation. Les élèves peuvent communiquer entre eux sur les méthodes mais pas sur les résultats. Ils font exactement ce que nous voulons : du travail intelligent !
% inspired by http://www.mathematex.net/phpBB2/2-vt1220-20.html
%cinquieme essai: calculs et resultats multiples s'enchainant
%Declaration de variables
%Calculs de certaines variables à partir de variables initiales
\documentclass[12pt]{article}
%
\usepackage{listings}
\usepackage{graphicx}
\usepackage{graphics}
\usepackage{moreverb}
\usepackage[francais]{babel}
\usepackage[latin1]{inputenc}
%\usepackage[dvips]{graphics}
%
\usepackage{answers} % pour utiliser le module answers
\Newassociation{sol}{Solution}{ans} % pour définitir l'étiquette Solution du module answers
\newtheorem{ex}{Exercice} % pour définitir l'étiquette Exercice du module answers
%
%\makeatletter
%commande pour faire appel a giac
\newcommand{\executGiac}[1]{
%\immediate\write18{@echo off}
\immediate\write18{giac <#1 } }
%\makeatother
\title{Le générateur d'interrogations}
\author{Yves Delhaye}
\begin{document}
\maketitle
\begin{abstract}
Un exemple d'utilisation d'un programme de calcul formel (Giac) pour générer automatiquement des exercices de physique (ou de mathématique, ou de chimie) dans \LaTeX.
Un même exercice de physique est présenté trois fois. Dans les deux dernières versions, les calculs sont faits par Giac. Dans le dernier exerice, les valeurs de départ sont aléatoires.
\end{abstract}
\section{Introduction}
Nous avons choisi un exercice de mouvement circulaire uniforme que nous utilisons dans une interrogation.
Le même exercice est présenté trois fois.
Enoncé et solutionnaire sont présentés à chaque fois.
Le premier est fait "à la main" (enfin... à la calculatrice!).
Le deuxième est identique au premier mais les calculs sont fait lors de la compilation \LaTeX par Giac. Les valeurs de départ ayant été fournies au programme de calcul formel.
Le troisième suit le même schéma que les deux premiers mais les valeurs dans l'énoncé sont générées aléatoirement par Giac. Les calculs sont fait lors de la compilation \LaTeX par Giac.
Ceci constitue la "brique de base" pour un générateur d'interrogation!
Il devient facile de donner des exercices différents à tous les élèves pour un devoir ou une interrogation. Les élèves peuvent communiquer entre eux sur les méthodes mais pas sur les résultats. Ils font exactement ce que nous voulons: du travail intelligent!
\pagebreak % sur une autre page
%\begin{center}Les trois calculs\end{center}
\section{Les trois calculs}
% \Opensolutionfile{ans}[Solutions_MCU] % ouvre le fichier Solutions_MCU.tex qui va contenir les solutions
% Il y a un probleme ici. Soit je définis les variables avant la ligne précédente et les solutions recoivent les valeurs d'initialisation (tout a 1!). Soit je ne le fais pas et je ne sais pas avoir les solution sur une feuille à part!
% Je vais probalement jouer avec "NotesDuProf".
\subsection{Sans Giac}
\begin{ex}
(.../5) Une roue de 60 cm de diamètre tourne régulièrement à raison de 120 tours/min.
\begin{enumerate}
\item Quelle est la vitesse angulaire \$\omega\$ de la roue?
\item Calculer la vitesse d'un point situé à la circonférence de la roue.
\item Calculer l'accélération d'un point situé à la circonférence de la roue. \\ \\
\end{enumerate}
\begin{sol}
\underline{\textbf{Roue}}
\begin{itemize}
\item \underline{Données}:
\begin{itemize}
\item R = 0,6/2 (m) = 0,3 (m)
\item 120 (Tours/min) = 2 (Tours/s)
\end{itemize}
\item \underline{Inconnues}:
\$ \omega,\ v,\ a\$
\item \underline{Formules}:
\begin{itemize}
\item \$ \omega = \frac{2\pi}{T} \$ (rad/s)
\item \$ v = \omega . R \$ (m/s)
\item \$ a = \omega^2 . R \$ (m/s)
\end{itemize}
\item \underline{Solution}:
\begin{enumerate}
\item
\begin{itemize}
\item \$T = \frac{1}{2 (Tours/s)} = 0,5 (s)\$
\item \$ \omega = \frac{2\pi}{1/2 (s)} = 2 .2\pi (rad/s)= 4\pi (rad/s) \simeq 12.5 (rad/s)\$
\end{itemize}
\item \$ v = \omega . R = 12,5 (rad/s) . 0,3 (m) \simeq 3,8 (m/s) \$
\item \$ a = \omega_1^2 . R \simeq 157,9 (rad^2/s^2) . 0,3 (m) = 47,4 (m/s^2) \simeq 4,7.10^2 (m/s^2) \simeq 5 g\ ! \$
\end{enumerate}
\end{itemize}
\end{sol}
\end{ex}
\pagebreak % sur une autre page
\subsection{Avec Giac}
\subsubsection{Avec Giac:les mêmes valeurs que l'exercice précédent (vérification)}
\begin{ex}
% Valeurs intitialisées a 1 Pour éviter une erreur
% lors de la première compilation.
\def\diamcm1{1} %
\def\diam1{1} %
\def\rayon1{1} %
\def\tourmin1{1} %
\def\fq1{1} %
\def\per1{1} %
\def\vit1{1} %
\def\omeg1{1} %
\def\omegsq1{1} %
\def\acc1{1} %
% on ecrit les commande giac dans le fichier test5.in
\begin{verbatimwrite}{test5.in}
maple_mode(0);
Sortie:=fopen("test5.out.tex");
Digits:=4;
diamcm1:=60.0;
Resultat:=cat("\\def\\diamcm1\{",ans(),"} ");
diam1:=diamcm1/100.0;
Resultat:=cat(Resultat," ","\\def\\diam1\{",ans(),"} ");
rayon1:=diam1/2.0;
Resultat:=cat(Resultat," ","\\def\\rayon1\{",ans(),"} ");
tourmin1:=120.0;
Resultat:=cat(Resultat," ","\\def\\tourmin1\{",ans(),"} ");
fq1:=tourmin1/60.0;
Resultat:=cat(Resultat," ","\\def\\fq1\{",ans(),"} ");
per1:=1.0/fq1;
Resultat:=cat(Resultat," ","\\def\\per1\{",ans(),"} ");
omeg1:=2.0*pi*fq1;
Resultat:=cat(Resultat," ","\\def\\omeg1\{",ans(),"} ");
omegsq1:=omeg1^2;
Resultat:=cat(Resultat," ","\\def\\omegsq1\{",ans(),"} ");
vit1:=omeg1 * rayon1;
Resultat:=cat(Resultat," ","\\def\\vit1\{",ans(),"} ");
acc1:=omegsq1 * rayon1;
Resultat:=cat(Resultat," ","\\def\\acc1\{",ans(),"} ");
fprint(Sortie,Unquoted,Resultat);
fclose(Sortie);
\end{verbatimwrite}
\executGiac{test5.in}
% on va inclure l'output cree par giac dans le document
\input{test5.out}
(.../5) Une roue de \diamcm1 cm de diamètre tourne régulièrement à raison de \tourmin1 tours/min.
\begin{enumerate}
\item Quelle est la vitesse angulaire \$\omega\$ de la roue?
\item Calculer la vitesse d'un point situé à la circonférence de la roue.
\item Calculer l'accélération d'un point situé à la circonférence de la roue. \\ \\
\end{enumerate}
\begin{sol}
\underline{\textbf{Roue}}
\begin{itemize}
\item \underline{Données}:
\begin{itemize}
\item R = (\diamcm1 /100)/ 2 = \diam1 /2 (m) = \rayon1 (m)
\item \tourmin1 (Tours/min) = \tourmin1/60 (Tours/s) = \fq1 (Tours/s) = \fq1 (Hz)
\end{itemize}
\item \underline{Inconnues}:
\$ \omega,\ v,\ a\$
\item \underline{Formules}:
\begin{itemize}
\item \$ \omega = \frac{2\pi}{T} \$ (rad/s)
\item \$ v = \omega . R \$ (m/s)
\item \$ a = \omega^2 . R \$ (m/s)
\end{itemize}
\item \underline{Solution}:
\begin{enumerate}
\item
\begin{itemize}
\item \$ T = \frac{1}{ \fq1 (Tours/s)} = \per1 (s)\$
\item \$ \omega = \frac{2\pi}{ \per1 (s)} = \fq1 .2\pi (rad/s)= \omeg1 (rad/s) \$
\end{itemize}
\item \$ v = \omega . R = \omeg1 (rad/s) . \rayon1 (m) = \vit1 (m/s) \$
\item \$ a = \omega_1^2 . R = (\omeg1)^2 (rad^2/s^2) . \rayon1 (m) = \omegsq1 (rad^2/s^2) . \rayon1 (m) = \acc1 (m/s^2)\$
\end{enumerate}
\end{itemize}
\end{sol}
\end{ex}
\pagebreak % sur une autre page
\subsubsection{Avec Giac:valeurs de départ aléatoires}
\begin{ex}
% Valeurs intitialisées a 1 Pour éviter une erreur
% lors de la première compilation.
\def\diamcm1{1} %
\def\diam1{1} %
\def\rayon1{1} %
\def\tourmin1{1} %
\def\fq1{1} %
\def\per1{1} %
\def\vit1{1} %
\def\omeg1{1} %
\def\omegsq1{1} %
\def\acc1{1} %
% on ecrit les commande giac dans le fichier test5b.in
\begin{verbatimwrite}{test5b.in}
maple_mode(0);
Sortie:=fopen("test5b.out.tex");
Digits:=4;
srand;
diamcm1:=1+rand(100);
Resultat:=cat("\\def\\diamcm1\{",ans(),"} ");
diam1:=diamcm1/100.0;
Resultat:=cat(Resultat," ","\\def\\diam1\{",ans(),"} ");
rayon1:=diam1/2.0;
Resultat:=cat(Resultat," ","\\def\\rayon1\{",ans(),"} ");
tourmin1:=1+rand(200);
Resultat:=cat(Resultat," ","\\def\\tourmin1\{",ans(),"} ");
fq1:=tourmin1/60.0;
Resultat:=cat(Resultat," ","\\def\\fq1\{",ans(),"} ");
per1:=1.0/fq1;
Resultat:=cat(Resultat," ","\\def\\per1\{",ans(),"} ");
omeg1:=2.0*pi*fq1;
Resultat:=cat(Resultat," ","\\def\\omeg1\{",ans(),"} ");
omegsq1:=omeg1^2;
Resultat:=cat(Resultat," ","\\def\\omegsq1\{",ans(),"} ");
vit1:=omeg1 * rayon1;
Resultat:=cat(Resultat," ","\\def\\vit1\{",ans(),"} ");
acc1:=omegsq1 * rayon1;
Resultat:=cat(Resultat," ","\\def\\acc1\{",ans(),"} ");
fprint(Sortie,Unquoted,Resultat);
fclose(Sortie);
\end{verbatimwrite}
\executGiac{test5b.in}
% on va inclure l'output cree par giac dans le document
\input{test5b.out}
(.../5) Une roue de \diamcm1 cm de diamètre tourne régulièrement à raison de \tourmin1 tours/min.
\begin{enumerate}
\item Quelle est la vitesse angulaire $\omega\$ de la roue?
\item Calculer la vitesse d'un point situé à la circonférence de la roue.
\item Calculer l'accélération d'un point situé à la circonférence de la roue. \\ \\
\end{enumerate}
\begin{sol}
\underline{\textbf{Roue}}
\begin{itemize}
\item \underline{Données}:
\begin{itemize}
\item R = (\diamcm1 /100)/ 2 = \diam1 /2 (m) = \rayon1 (m)
\item \tourmin1 (Tours/min) = \tourmin1/60 (Tours/s) = \fq1 (Tours/s) = \fq1 (Hz)
\end{itemize}
\item \underline{Inconnues}:
\$ \omega,\ v,\ a\$
\item \underline{Formules}:
\begin{itemize}
\item \$ \omega = \frac{2\pi}{T} \$ (rad/s)
\item \$ v = \omega . R \$ (m/s)
\item \$ a = \omega^2 . R \$ (m/s)
\end{itemize}
\item \underline{Solution}:
\begin{enumerate}
\item
\begin{itemize}
\item \$ T = \frac{1}{ \fq1 (Tours/s)} = \per1 (s)\$
\item \$ \omega = \frac{2\pi}{ \per1 (s)} = \fq1 .2\pi (rad/s)= \omeg1 (rad/s)\$
\end{itemize}
\item \$ v = \omega . R = \omeg1 (rad/s) . \rayon1 (m) = \vit1 (m/s) \$
\item \$ a = \omega_1^2 . R = (\omeg1)^2 (rad^2/s^2) . \rayon1 (m) = \omegsq1 (rad^2/s^2) . \rayon1 (m) = \acc1 (m/s^2) \$
\end{enumerate}
\end{itemize}
\end{sol}
\end{ex}
% \Closesolutionfile{ans} % ferme le fichier Solutions.tex qui contient les solutions
% \pagebreak % met les solutions sur une autre page
% \section{Solutions}
% \Readsolutionfile{ans} % importe les données du fichier Solutions.tex
\end{document}
Suite à mon installation d’un moteur mathml sur le site, les formules LaTeX sont parfois traduites depuis le code. J’ai du mettre des "backslash" pour empêcher l’interprétation des dollards : \$
Parfois ces "backslash" apparaissent, parfois pas. Il est péférable de recopier les fichiers de code source que de faire des copier coller dans les pages.
Vous voilà prévenu !
2004-2025 © @YvesDelhaye.Be : "Nous ne sommes pas faits pour vivre comme des imbéciles, mais pour suivre les chemins de la vertu et de la connaissance." (Dante : l’Enfer) - Tous droits réservés
Ce site est géré sous SPIP 2.1.28 [22259] et utilise le squelette EVA-Web 4.1
Dernière mise à jour : mercredi 1er février 2023