\clearpage
\section{Programme de calcul}\index[cle]{ProgCalcul@\lstinline+\ProgCalcul+}\label{DocProgCalcul}
La commande \lstinline!\ProgCalcul!$^{\text{\faIcon{sync-alt}}}$ permet d'afficher un programme de calcul dans un style choisi ou une suite de calculs associée au programme choisi\footnote{Pour ce cas, le programme ne doit pas comporter des étapes à associer ensuite.}.
\begin{multicols}{2}
  \begin{center}
    \ProgCalcul[Enonce]{Ajouter 2, Multiplier par 3}%, Ajouter le carré de 3
  \end{center}
  \begin{center}
    \ProgCalcul{7,+2 *3}% +3**2
  \end{center}
\end{multicols}

Elle a la forme suivante :

\begin{lstlisting}[escapechar=!,aboveskip=1em,belowskip=0.5em]
  \ProgCalcul[!\sffamily\textlangle clés\textrangle!]{i1, i2...}
\end{lstlisting}
où
\begin{itemize}
\item\textlangle\lstinline!clés!\textrangle{} constituent un ensemble
  d'options pour paramétrer la commande (paramètres optionnels);
\item \lstinline!i1, i2...! indiquent les instructions du programme de calcul.
  \begin{tcolorbox}[tikzRemarque]
    Selon les clés choisies, une attention toute particulière sera portée sur l'écriture de ces instructions.
  \end{tcolorbox}
\end{itemize}
\begin{Codes}[listing side text]{0.3}{}
% Par défaut, la commande \ProgCalcul affiche la suite
% de calculs associée au programme de calcul choisi.
\ProgCalcul{7,+2 *3 +3**2}
\end{Codes}
\begin{tcolorbox}[tikzcle]
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!\underline{Direct}@Direct|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Ecart|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!SansCalcul|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Enonce|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Enonce!Nom|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Enonce!CouleurCadre|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Enonce!CouleurFond|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Enonce!Largeur|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Enonce!Epaisseur|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Enonce!Pointilles|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!ThemePerso|mygobble}
\begin{Key}{Direct}{true}
  indique si le calcul se fait de manière directe ou indirecte.
\end{Key}
\begin{Key}{Ecart}{2em}
  modifie la distance horizontale entre deux calculs consécutifs.
\end{Key}
\begin{Key}{SansCalcul}{false}
  permet d'afficher les étapes de calculs \og sans calculs automatisés\fg.
\end{Key}
\begin{tcolorbox}[tikzRemarque]
  La clé \CleD{SansCalcul} est incompatible avec la clé \CleD{Direct}.
\end{tcolorbox}
\begin{Key}{Enonce\footnotemark}{false}
  affiche, dans un style choisi, les instructions d'un programme de calcul.
  \begin{SousDescription}
  \item[La clé \Cle{Nom}]\DefautR{\{\}}
    modifie le nom du programme de calcul.
  \item[La clé \Cle{CouleurCadre}]\DefautR{black}
    modifie la couleur du cadre entourant l'énoncé du programme de calcul.
  \item[La clé \Cle{CouleurFond}]\DefautR{gray!10}
    modifie la couleur de fond du cadre entourant l'énoncé du programme de calcul.
  \item[La clé \Cle{Largeur}]\DefautR{0.95linewidth}
    modifie la largeur du cadre entourant l'énoncé du programme de calcul.
  \item[La clé \Cle{Epaisseur}]\DefautR{0.75pt}
    modifie l'épaisseur du tracé du cadre entourant l'énoncé du programme de calcul.
  \item[La clé \Cle{Pointilles}]\DefautR{0}
    modifie la longueur des pointillés laissant ainsi à l'élève la place pour indiquer un résultat ou un calcul.
  \end{SousDescription}
\end{Key}
\begin{Key}{ThemePerso}{false}
  permet, avec quelques connaissances sur le package \LaTeX{} \lstinline!tcolorbox! de personnaliser le style du cadre à l'aide du style \lstinline!ProgCalcul!.
\end{Key}
\end{tcolorbox}
\footnotetext{Sur une idée et une programmation de Thomas {\sc Dehon}.}
\begin{Codes}[listing side text]{0.4}{}
\ProgCalcul[Direct=false]{7,+2 *3 +3**2}
\end{Codes}
\begin{tcolorbox}[tikzRemarque]
  On remarque {\em clairement} une erreur dans les opérations\dots{} En effet, les substitutions de symboles se faisant dans un ordre précis, il est nécessaire de préciser \lstinline!++! pour indiquer une addition dans le cas où la clé \Cle{Direct} a pour valeur \lstinline!false!.
\end{tcolorbox}
\begin{Codes}[listing side text]{0.4}{}
\ProgCalcul[Direct=false]{7,++2 *3 ++3**2}
\end{Codes}
\begin{Exemple}[]{}
\ProgCalcul[Ecart=4em]{7,+2 *3 +3**2}

\ProgCalcul[SansCalcul]{x,+2 *3 +3**2,x+2 (x+2)\times3 (x+2)\times3+3^2}
\end{Exemple}
\begin{Codes}[listing side text]{0.35}{}
\ProgCalcul[SansCalcul]{\dfrac17,+2 *3 +3**2,\dfrac{15}{7} \dfrac{45}{7} \dfrac{108}{7}}
\end{Codes}
\begin{Codes}[]{0.4}{}
\ProgCalcul[Enonce]{Ajouter 2, Multiplier par 3, Ajouter le carré de 3}
\end{Codes}
\begin{Codes}[listing side text]{0.55}{\small}
\ProgCalcul[%
Enonce,%
CouleurCadre=red,%
CouleurFond=pink!20,%
Nom=Second programme,%
Largeur=8cm,%
Epaisseur=2pt,%
Pointilles=15mm%
]{%
  Ajouter $2$, 
  Multiplier par $3$,
  Soustraire le nombre de départ,
  Élever au carré
}
\end{Codes}
\begin{tcolorbox}[tikzRemarque]
  Le style d'énumération des questions est laissé à l'appréciation de l'utilisateur. On pourra utiliser le package \lstinline!enumitem! pour personnaliser ce style.
\end{tcolorbox}

\begin{Codes}[]{0.5}{}
\tcbset{ProgCalcul/.style={%
  enhanced,
  boxsep=1mm,
  bottom=.75mm,
  boxrule=2pt,
  colframe=Crimson,
  colback=Tomato,
  colbacktitle=Tomato!15,
  fonttitle=\bfseries\color{black},
  halign upper=center,
  attach boxed title to top center={yshift=-2mm},
  title=Programme 1,
  }%
}%
% Avec le package enumitem chargé.
\setlist[enumerate]{label=\textbullet}
\ProgCalcul[Enonce,ThemePerso]{Ajouter 2, Multiplier par 3, Ajouter le carré de 3}
\end{Codes}
Enfin, au prix d'une {\em légère adaptation} de la commande, on peut regrouper l'énoncé et les calculs.
\begin{tcolorbox}[tikzcle]
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Application|mygobble}
  \index[cle]{ProgCalcul@\lstinline+\ProgCalcul+!Application!Details|mygobble}
\begin{Key}{Application}{false}
  affiche à la fois l'énoncé du programme de calcul et un exemple de calcul.
  \begin{SousDescription}
  \item[La clé \Cle{Details}]\DefautR{false}
    affiche le détail des calculs effectués.
  \item[Les clés \Cle{SansCalcul} et \Cle{ThemePerso}] sont également disponibles.
  \end{SousDescription}
\end{Key}
\end{tcolorbox}
\begin{Codes}[]{0.4}{}
\ProgCalcul[Application]{%
Ajouter 2, Multiplier par 3, Ajouter le carré de 3%
§% à remarquer !
7,+2 *3 +3**2}
\end{Codes}
\begin{Exemple}[]{}
\ProgCalcul[Application,SansCalcul]{%
Ajouter 2, Multiplier par 3, Ajouter le carré de 3%
§% à remarquer !
n,+2 *3 +3**2,n+2 (n+2)\times3 (n+2)\times3+3^2}

\setlist[enumerate]{leftmargin=2mm,label=$\star$}
\ProgCalcul[Application,Details]{%
Ajouter 2, Multiplier par 3, Ajouter le carré de 3%
§% à remarquer !
-1,+2 *3 +3**2}
\end{Exemple}
\subsection*{Complément}
Il peut être utile de présenter les deux sens de calculs en même temps :

\bigskip

\begin{center}
  \ProgCalcul[Vide,Retour,Depart,OpReciproques]{5,+5 *3 ^2}
\end{center}

\bigskip

\begin{tcolorbox}[tikzcle]
  \begin{Key}{Vide}{false}
    permet, lorsqu'elle est positionnée à \lstinline!true!, d'afficher des programmes de calculs simples accompagnés ou pas des opérations réciproques afin de travailler les programmes de calculs \og à l'envers\fg.
    \begin{SousDescription}
    \item[La clé \Cle{Depart}]\DefautR{false} affiche, lorsqu'elle est positionnée à {\ttfamily true}, le nombre de départ, celui permettant de remonter le programme de calcul.
    \item[La clé \Cle{Retour}]\DefautR{false} affiche, lorsqu'elle est positionnée à {\ttfamily true}, les flèches de retour du programme de calcul.
    \item[La clé \Cle{OpReciproques}]\DefautR{false} affiche, lorsqu'elle est positionnée à {\ttfamily true}, les opérations réciproques de celles définies par le programme de calcul.
    \item[La clé \Cle{Reponses}]\DefautR{0} affiche, lorsqu'elle est positionnée à un nombre $n$, les opérations réciproques jusqu'à l'étape $n$ incluse; le nombre d'étapes se comptant à partir du nombre de départ.
    \item[La clé \Cle{ReponsesCalculs}]\DefautR{0} affiche, lorsqu'elle est positionnée à un nombre $n$, les nombres intervenant à chaque étape de calcul jusqu'à l'étape $n$ incluse; le nombre d'étapes se comptant à partir du nombre de départ.
    \end{SousDescription}
  \end{Key}
\end{tcolorbox}
\begin{Codes}[listing side text]{0.5}{}
\ProgCalcul[
Vide,
Retour,
Depart,
OpReciproques]{7,+5 *3 ^2}
\end{Codes}
\begin{Codes}[listing side text]{0.5}{}
\ProgCalcul[
Vide,
Retour,
Depart,
OpReciproques,
Reponses=2,
ReponsesCalculs=1]{7,+5 *3 ^2 -3 /4}
\end{Codes}