

\documentclass[12pt,a4paper]{report}
\usepackage[height=255mm,width=183mm,margin=1cm,bottom=2cm,top=2cm]{geometry}
\usepackage{preambule}
\usepackage[upright]{fourier}

\usepackage{bbding,xlop}
 \usepackage{wasysym,marvosym,keystroke}
\graphicspath{{/home/moi/Photos/Tehessin/}{/home/moi/Figures/FigSTI/}{/home/moi/Figures/FigMaple/}{/home/moi/Lycee/Primaire/}}




\entete{TD Informatique : le code bibinaire}{Le code bibinaire}{TS - Lycée Jean \textsc{Perrin}}%g,d,b

\usepackage{index}
\makeindex
\renewindex{default}{idx}{ind}{Index des commandes vues aujourd'hui}

\newcommand{\indexkeywordsmaple }[1]{\index[default]{maple@\textbf{\large Commandes}!#1@\textcolor{blue}{\texttt{#1}}|textbf}}

\newcommand{\indn }[1]{\index[default]{maple@{\large
      Notions }!#1@ #1}}

\newcommand{\indt }[1]{#1\index[default]{maple@{\large
      Touches }!#1@ #1}}


%%% Environnement des réponses du logiciel
\DefineVerbatimEnvironment{boxedverbatim}{Verbatim}{fontsize=\small,formatcom=\color{blue},fontshape=it,gobble=2,frame=single,framesep=4mm,label=\textit{\small \textcolor{black}{Réponse du logiciel}},xleftmargin=10pt,rulecolor=\color{black}}




\newcommand\Com[1]{%
\shorthandoff{;:}\textcolor{blue}{{ \ttfamily #1}}\index[default]{maple@\textbf{\large Commandes}!#1@\textcolor{blue}{\texttt{#1}}|textbf}}


%%% Com avec syntaxe
\newcommand\Comsi[2]{%
\shorthandoff{;:}\textcolor{blue}{{ \ttfamily #1}}(\textcolor{blue}{\texttt{#2}})\index[default]{maple@\textbf{\large Commandes}!#1@\textcolor{blue}{\texttt{#1}}|textbf}}





%%%%%%  Commande personnelle ou bout de code

\renewcommand{\code}[1]{\textcolor{blue}{\texttt{#1}}}





\newcommand{\MAPLE}{\lstset{numbers=none,language=xcas,xleftmargin=10pt,%
keywordstyle =\color{blue}\usefont{OT1}{cmtt}{b}{n},basicstyle=\ttfamily\color{blue},commentstyle=\normalfont\scriptsize\itshape,
    backgroundcolor=\color{0.9white},index=[2][keywords],indexstyle=[2]\indexkeywordsmaple,breaklines=true}
}

\begin{document}
\setlength{\parindent}{0pt}
\thispagestyle{empty}

\setcounter{NumLecon}{2}
         \TITREL{TD Informatique n°}{Le code bibinaire}{0.9white}{0.6}{1.5}
        

\MAPLE

\section{Coder en bibinaire}

\subsection{Qu'est-ce que c'est~?}

\parpic{\fbox{\includegraphics[height=4cm]{bobybouf.eps}}}
Boby \textsc{Lapointe},  célèbre chanteur  français, était aussi  mathématicien à ses  heures. Ayant
trouvé le code binaire trop compliqué à utiliser, il  inventa le code... bibinaire. Il  suffit de remplacer les chiffres  par des lettres. On commence par  couper le nombre
écrit en  binaire en  paquets de 2.  S'il y a  un nombre impair  de chiffres,  on rajoute un  zéro à
gauche, ce qui ne  modifie pas la valeur de nombre.  On commence par le premier
groupe de deux chiffres le plus à droite. On remplace 00 par O, 01 par A, 10 par E, 11 par I.\\
Puis on prend le paquet de deux chiffres suivants en se déplaçant de droite à gauche. On remplace 00
par H, 01 par B, 10 par K, 11 par D.\\
Pour le paquet suivant, on recommence avec les  voyelles. S'il y a encore un groupe, on remplace par
une consonne, etc.


\subsection{Numération en base 2}

Comptez vos doigts en base 2. Quel est le  lien entre l'écriture d'un nombre en base 2 et les restes
des divisions successives d'un nombre par 2~?

Proposez une procédure  \code{bine(n)} qui renvoie la liste  des chiffres composant l'écriture
binaire  d'un  nombre. Vous  utiliserez  à  bon escient  les  commandes  XCAS \Comsi{iquo}{a,b}  et
\Comsi{irem}{a,b} qui renvoient respectivement le quotient et le reste de la division euclidienne de
a par b.

\begin{figure}
              \begin{Idee}
              \textbf{«~Retournez une liste~»}

              Soit \code{L:=[1,2,3,4,5]} une liste. Regardez ce que donne 

              \begin{lstlisting}
                revlist(L)
              \end{lstlisting}

              Peut-être en ferez-vous bon usage...
               \end{Idee}
               \end{figure}


\subsection{Évaluation booléenne}

Pour tester une égalité, on utilise \code{==}.
Cela nous permet de faire des tests à l'aide de \code{if then else}. Par exemple~:

\begin{lstlisting}
  pair(n):={
   if (irem(n,2)==0){"Pair"}else{"Impair"}
  }:;

 pair(45);
\end{lstlisting}

ou en «~français~»

\begin{lstlisting}
  pair(n):={
      si (irem(n,2)==0) alors "Pair" sinon "Impair"
      fsi;
  }:;

 pair(45);
\end{lstlisting}




\subsection{Liste ou séquence~?}

Il s'agit  de deux objets informatiques différents.  Une séquence est une  succession ordonnée d'objets
séparés par des  virgules. Une liste est une séquence  entre crochets. Dit comme ça,  on ne voit pas
trop quel est le problème. En fait, on peut effectuer de nombreuses opérations sur les listes qui ne
sont pas possibles sur les séquences. D'un autre côté, il est plus simple de rajouter des éléments à
une séquence qu'à une liste.

Nous allons utiliser le  meilleur des deux selon nos besoins. Ainsi, pour  rajouter un élément à une
séquence, il suffit de faire~:

\begin{lstlisting}
  S:=1,2,3,4;
  S:=S,37;
\end{lstlisting}

alors que pour une liste il faut écrire~:

\begin{lstlisting}
  L:=[1,2,3,4];
  L:=append(L,37);
\end{lstlisting}


Une séquence vide se note \code{NULL}. Regardez alors ce que fait ce programme~:

\begin{lstlisting}
 T:=NULL;
  pour k de 0 jusque 10 faire
       T:=T,k;
  fpour;
\end{lstlisting}

ou en «~anglais~»

\begin{lstlisting}
 T:=NULL;
 for(k:=0;k<=10;k:=k+1){T:=T,k}
\end{lstlisting}


\subsection{Coder en bibinaire}


Écrivez «~à la main~» les nombres de 0 à 25 en bibinaire. Pourquoi Boby a-t-il finement choisi le H~?


Écrivez «~à la main~» les nombres de 255 à 257 en bibinaire.  À votre avis, quel est la base du bibinaire~?

Pourquoi est-il  pratique d'écrire les nombres  en base 2 avec  un nombre de chiffres  multiple de 4
avant de les traduire en bibinaire~?

À quoi pourrait servir cette ligne de code, sachant que \code{!=} signifie $\neq$ ~:

\begin{lstlisting}
while(size(ib) mod 4!=0){ib:=append(ib,0)};
\end{lstlisting}

ou en «~français~»~:

\begin{lstlisting}
...
tantque size(ib) mod 4!=0 faire ib:=append(ib,0) ftantque;
...
\end{lstlisting}

À l'aide d'une série de tests  \code{if then else} proposez une procédure \code{bibine(n)} qui
donne l'écriture bibinaire d'un nombre entré sous forme décimale.


Testez alors~:

\begin{lstlisting}
  bibine(2751);
\end{lstlisting}

\section{Décodez du bibinaire}

\subsection{La commande table}


On construit une table avec la commande... \code{table}~:

\begin{lstlisting}
  note:=table("maths"=18,"physique"=17,"info"=7]);
  note["maths"];
  note["info"];
\end{lstlisting}


À quoi correspond alors le code suivant~:

\begin{lstlisting}
  decod:=table(seq(bibine(k)=k,k=0..15));
\end{lstlisting}


\subsection{Procédure de décodage}


Proposez à  présent une procédure  \code{enibib(L)} qui renvoie  un nombre sous  forme décimal
correspondant à la liste L des lettres de son écriture bibinaire.

Vous utiliserez une seule boucle \code{for} connaissant la base du bibinaire~:

\begin{lstlisting}
  enibib(L):={
   local N,k;
   N:=0;
   p:=0;
   pour k de size(L)-2 jusque 0 pas -2 faire
   ...
\end{lstlisting}

À vous d'imaginer la suite...


\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
