% $Id: exam2002Jul01.tex,v 1.4 2002/06/29 19:07:33 queinnec Exp $

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{cfs}

\def\version{$ $Revision: 1.4 $ $}

% Par defaut, on n'inclut pas les solutions:
\WithSolutionfalse

\title{ « Examen » du TME « notation en masse » \\
        {\protect \version{}} }

\author{ Christian Queinnec }
\date{1er juillet 2002}

\defineURL\ReticUrl{http://www.infop6.jussieu.fr/licence/2001/retic}
\defineURL\CFSUrl{http://www.infop6.jussieu.fr/licence/2001/cct}
\defineURL\LicenceUrl{http://www.infop6.jussieu.fr/licence/2001}
\defineURL\DelBulUrl{http://www.infop6.jussieu.fr/licence/2001/delivery_builder}
\defineURL\PHPManuelUrl{http://www.infop6.jussieu.fr/mod_php4}

\newenvironment{meta}{\par\em}{\par}

%\Eval (define-snippet-environment "code" "dtd" "php" "tique")

\begin{document} \maketitle

\section*{Conditions générales}

Les conditions générales de cet examen sont semblables à celles des
\referenceURL{CFS}{\CFSUrl/cfs.html}. Des liens vers des documentations 
apparaissent à la fin du document précédemment pointé.

Tous les fichiers que vous serez amenés à écrire devront être dans un
unique répertoire (déjà créé) dont le nom ressemble à:

\snippet[sh]
~/Pages_web/tme2002Jul01/pseudos/p6lip123_VOTRELOGIN_001/ \endsnippet

\begin{meta}
Quelques méta-informations ne faisant normalement pas partie du texte
de l'examen apparaissent ici et là (et notamment ici).
\end{meta}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{question}
On désire varier le sempiternel exercice portant sur le calcul du pgcd
(plus grand commun diviseur) afin de calculer le ppcm (plus petit
commun multiple) d'entiers naturels. Pour cela, on rappelle que 

\begin{displaymath}
\mbox{ppcm}(p, q) * \mbox{pgcd}(p, q) = p * q
\end{displaymath}

Écrire donc un programme, nommé \snip[program]{ppcm.exe}, qui prendra
en arguments sur sa ligne de commande deux entiers naturels non nuls
et qui émettra sur son flux de sortie le ppcm de ces deux entiers.

Voici quelques exemples:

\snippet[sh]
% \SwitchToUserInputFont ./ppcm.exe 3 3 \SwitchToComputerFont
3
% \SwitchToUserInputFont ./ppcm.exe 9 6 \SwitchToComputerFont
18 \endsnippet

Vous pouvez utiliser tout langage à votre convenance (à condition
qu'il soit disponible sur les machines de l'UFR). Vous créerez un
fichier écrit en \snip[program]{bash} et nommé
\snip[file]{compil-ppcm.sh} dont le rôle est de fabriquer le programme
exécutable nommé \snip[program]{ppcm.exe}. La compilation, si
compilation il y a, doit être extrêmement précautionneuse et ne doit
produire aucune erreur.

\begin{livraison}{tme2002Jul01}
\item Remise du fichier \snip[file]{compil-ppcm.sh},
\item Remise des autres fichiers nécessaires pour
        construire \snip[file]{ppcm.exe}.
\end{livraison}

\begin{meta}
Comme l'on n'utilisera \DelBul, vous rendrez votre copie en 
exécutant, dans le répertoire où se trouvent vos solutions
(normalement le répertoire 
\snip[directory]{\~ /Pages_web/tme2002Jul01/pseudos/p6lip123_VOTRELOGIN_001/}),
la commande suivante:

\snippet[sh]
make -f /Enseignants/Infos/licence/CFS/ufr/2002Jul01/install.mkf rendre.copie
\endsnippet

Vous pouvez si vous le souhaitez rendre d'autre copies en créant, à
côté du répertoire \snip[directory]{VOTRELOGIN_essai1/}, d'autre
répertoires nommé sur le même schéma (par exemple
\snip[directory]{VOTRELOGIN_essai2/}).
\end{meta}

\begin{notation}{10}
\note{1} si l'exécution de \snip[file]{compil-ppcm.sh} produit un
      exécutable \snip[file]{ppcm.exe},
\note{9} si votre programme fonctionne correctement sur 4 de nos
tests.
      \assertion votre programme recevra exactement deux arguments
      correspondant à deux nombres entiers naturels non nuls.
\end{notation}
\end{question}

\begin{question}
\begin{meta}
Cette question est facultative. Elle conduit à imaginer des tests qui
doivent éprouver des programmes d'interface différentes que dans le
cas de la première question. Elle ne deviendra intéressante que lorque
quelques uns d'entre vous l'auront abordée afin d'avoir des copies à
corriger. 
\end{meta}

On souhaite généraliser le programme
précédent de manière à pouvoir calculer le ppcm d'une séquence non
vide d'entiers naturels non nuls.

Écrire donc un programme, nommé \snip[program]{mulppcm.exe}, qui
prendra des entiers sur son flux d'entrée et produira au fur et à
mesure les ppcm successifs des entiers lus. Le flux d'entrée sera
formé de lignes terminées par une fin de ligne. Chaque ligne
comportera un unique entier non signé sans aucun caractère superflu.

Voici quelques exemples (le symbole \verb+^D+ ci-dessous représente le
caractère nommé Contrôle-D obtenu en pressant simultanément sur les
touches \texttt{CTRL} et \texttt{d}: il simule une fin de flux):

\snippet[sh]
% \SwitchToUserInputFont ./mulppcm.exe \SwitchToComputerFont
\SwitchToUserInputFont3\SwitchToComputerFont
3
\SwitchToUserInputFont2\SwitchToComputerFont
6
\SwitchToUserInputFont3\SwitchToComputerFont
6
\SwitchToUserInputFont12\SwitchToComputerFont
12 
\SwitchToUserInputFont ^D\SwitchToComputerFont
% \SwitchToUserInputFont (echo 3; echo 2; echo 3; echo 12) | ./mulppcm.exe \SwitchToComputerFont
3
6
6
12 
% \SwitchToUserInputFont for n in 3 2 3 12 ; do echo $n ; done | ./mulppcm \SwitchToComputerFont
3
6
6
12 \endsnippet

Vous pouvez utiliser tout langage à votre convenance (à condition
qu'il soit disponible sur les machines de l'UFR). Vous créerez un
fichier écrit en \snip[program]{bash} et nommé
\snip[file]{compil-mulppcm.sh} dont le rôle est de fabriquer le programme
exécutable nommé \snip[program]{mulppcm.exe}. La compilation, si
compilation il y a, doit être extrêmement précautionneuse et ne doit
produire aucune erreur.

\begin{livraison}{tme2002Jul01}
\item Remise du fichier \snip[file]{compil-mulppcm.sh},
\item Remise des autres fichiers nécessaires pour
        construire \snip[file]{mulppcm.exe}.
\end{livraison}

\begin{meta}
Comme l'on n'utilisera \DelBul, vous rendrez votre copie en 
exécutant, dans le répertoire où se trouvent vos solutions
(normalement le répertoire 
\snip[directory]{~/Pages_web/tme2002Jul01/pseudos/VOTRELOGIN_essai1/})
la commande suivante:

\snippet[sh]
make -f /Enseignants/Infos/licence/CFS/ufr/2002Jul01/install.mkf rendre.copie
\endsnippet

Vous pouvez si vous le souhaitez rendre d'autre copies en créant, à
côté du répertoire \snip[directory]{p6lip123_VOTRELOGIN_001/}, d'autre
répertoires nommé sur le même schéma (par exemple
\snip[directory]{p6lip124_VOTRELOGIN_001/}).
\end{meta}

\begin{notation}{10}
\note{2} si l'exécution de \snip[file]{compil-mulppcm.sh} produit un
      exécutable \snip[file]{mulppcm.exe},
\note{8} si votre programme fonctionne correctement sur nos tests.
      \assertion votre programme recevra un flux d'entrée correct
      comportant au moins un entier naturel.
\end{notation}
\end{question}

\end{document}
