1.  Nombres aléatoires et calculs

Le package lcg (http://www.ctan.org/tex-archive/macros/latex/contrib/lcg/lcg.pdf) permet de générer des (pseudo-)nombres aléatoires.
En couplant avec le package calc (http://www.ctan.org/tex-archive/macros/latex/required/tools/calc.pdf) qui permet d'effectuer des calculs (les 4 opérations de base) sur des variables stockées dans des compteurs, il devient possible de réaliser des exercices dont les données sont générées aléatoirement :

\usepackage{lcg,calc}
Simplifier la fraction suivante : 
\reinitrand[first=1, last=10, counter=num]  \rand
\reinitrand[first=2, last=20, counter=deno] \rand
\reinitrand[first=2, last=5, counter=coeff] \rand
\setcounter{num}{\value{coeff}*\value{num}} 
\setcounter{deno}{\value{coeff}*\value{deno}}
$\frac{\thenum}{\thedeno}$


Grâce à une macro, l'utilisation devient simple :

\usepackage{lcg,calc}
\newcounter{expr}
\newcommand{\randomrac}{
\reinitrand[first=2, last=20, counter=A]  \rand
\reinitrand[first=2, last=7, counter=B] \rand
\setcounter{expr}{\value{A}*\value{B}*\value{B}}
$\sqrt{\theexpr}$ }

Simplifier les fractions suivantes :
\randomrac=\dotfill
\randomrac=\dotfill
\randomrac=\dotfill
% ... etc ...


2.  Structures conditionnelles avec LATEX

On peut aller encore plus loin grâce au package ifthen (www.ifi.uio.no/it/latex-links/ifthen.pdf) qui propose des structures conditionnelles. Le principe de la commande \ifthenelse est le suivant : \ifthenelse{condition}{si_vrai}{si_faux}. Si la condition condition est réalisée, alors si_vrai sera exécuté, sinon, ce sera si_faux.

Par exemple \ifthenelse{1=2}{Où suis-je?}{No problemo} renverra «No problemo».

Ici, on va construire une macro \randomsys qui génère un exercice de résolution de système linéaire. On commence par produire 6 nombres aléatoirement puis on verifie que les nombres qui multiplient x et y sont non nuls, sinon, on les remplace par 1000. Enfin on calcule le déterminant et selon la valeur, un énoncé différent est généré :

\usepackage{lcg,calc,ifthen}
% Une variable qui va servir
\newcounter{det}

\newcommand{\randomsys}{
% Génerer 6 entiers dans [-20,20]
\reinitrand[first=-20, last=20, counter=a] \rand
\chgrand[counter=b] \rand
\chgrand[counter=c] \rand
\chgrand[counter=d] \rand
\chgrand[counter=e] \rand
\chgrand[counter=f] \rand
% Remplacer 0 par 1000
\ifthenelse{\value{a}=0}{\setcounter{a}{1000}}{}
\ifthenelse{\value{b}=0}{\setcounter{b}{1000}}{}
\ifthenelse{\value{d}=0}{\setcounter{d}{1000}}{}
\ifthenelse{\value{e}=0}{\setcounter{e}{1000}}{}

% Un énoncé selon la valeur du dét
\setcounter{det}{\value{a}*\value{e}-\value{b}*\value{d}}
\ifthenelse{\value{det}=0}%
{Expliquer pourquoi le système suivant 
n'admet pas une unique solution :}%
{Résoudre le système suivant :}
\[
\left\lbrace \begin{array}{rcl} 
\thea x+\theb y &=& \thec \\
\thed x+\thee y &=& \thef
\end{array} \right.
\]}

\randomsys \randomsys \randomsys \randomsys
\randomsys \randomsys \randomsys \randomsys

Serveur d'exercices

TEX et LATEX

Utiliser LATEX

Première approche

Graphismes

Exercices

Plus loin

Notes en vrac

Blog