\documentclass[a4paper, 12pt]{article}
\usepackage{amsmath, amssymb}


%%%%%%%% PDF %%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{ifpdf}

\ifpdf
  \usepackage[pdftex]{color,graphicx}
  \usepackage[pdftex ,colorlinks=true,
        urlcolor=blue,
        citecolor=blue,
        pdfstartview=FitH]{hyperref} 
\else
  \usepackage[dvips]{color}
  \usepackage[pagebackref,%
              colorlinks=true,urlcolor=blue,citecolor=blue]{hyperref}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{Syst\`eme de Num\'eration}
\date{Fevrier 2007}
\author{TP-1, Module I41, Licence Informatique\\
universit\'e du sud Toulon-Var}

%%%%%%%% DEFINITION %%%%%%%%%%%%%%%%%%%%%%%%
\def\terminal#1{
$$
\fbox{
   \vbox{\hsize=65mm 
   \noindent
   \texttt{#1}
   }
  }
$$
}

\newtheorem{exercice}{Exercice}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\maketitle

\section{Ligne de commande}

Lorsque vous lancez un programme, 
en tapant \texttt{./nom\_du\_prog} sur la ligne de commande, 
vous pouvez en m\^eme temps rajouter derri\`ere le nom
de l'ex\'ecutable une ou plusieurs cha\^{\i}nes de 
caract\`eres que l'on appelle \textsl{param\`etres} 
du programme. Par exemple~:

\terminal{\$ ./a.out toto 31}

\indent
Ici, \$ symbolise le prompt de l'utilisateur. La chaine \texttt{toto} est le 
premier param\`etre, et \texttt{31} le second. Pour pouvoir r\'ecup\'erer la valeur de ces param\`etres \`a l'int\'erieur de votre programme C vous
devez d\'eclarer la fonction \texttt{main} de la fa\c con suivante:\\
$$
\vbox{
\texttt{int main(int argc, char *argv[])}
}
$$

L'entier \texttt{argc} contient le nombre de param\`etres pr\'esents plus un. 
Le tableau \texttt{argv} est un tableau de cha\^\i nes de caract\`eres, \texttt{argv[i]}
contenant le $i^{\rm\grave eme}$ param\`etre du programme, \texttt{argv[0]} est le nom du programme 
lui-m\^eme. A titre d'exemple, ex\'ecutez le programme suivant (en
oubliant pas de rajouter des param\`etres sur la ligne de commande):
\begin{verbatim}
#include <stdio.h>
int main(int argc, char *argv[])
{ int i;
  printf("Il y a %d paramètres:\n",argc);
  for (i = 0; i < argc; i++)
     printf("%s\n",argv[i]);
}
\end{verbatim}
N'oubliez pas que le tableau \texttt{argv} r\'ecup\`ere les param\`etres sous forme de cha\^\i nes de
 caract\`eres, si l'un d'entre eux est un entier que vous d\'esirez
manipuler en tant que tel dans votre programme vous devez le convertir avec la fonction \texttt{atoi}
 (ascii to integer). A titre d'exemple, ex\'ecutez le programme suivant
qui affiche la valeur du premier param\`etre en base hexad\'ecimale~:
\begin{verbatim}
#include <stdio.h>
int main(int argc, char *argv[])
{ int z;
  z = atoi(argv[1]);
  printf("%d --> %x \n",z, z); 
}
\end{verbatim}

\begin{exercice} \'Ecrire un programme \texttt{ajoute} 
qui calcule puis affiche la somme
d'une liste d'entiers pass\'ee par la ligne de commande.
\terminal{\$ ./ajoute 15 3 12 5\\35}
\end{exercice}

\section{Num\'eration et \'Enum\'eration}

\begin{exercice}
 Soit $(a_n\dots a_2 a_1)_b$ la d\'ecompositon en base $b$ d'un entier $z$,
 on appelle \textsl{b-poids} de $z$ le nombre de composantes $a_i$ non nulles.
Par exemple le $3$-poids de $571$ est $4$; En effet, $571 = (210011)_3$.
Ecrire le programme \texttt{poids} acceptant deux param\`etres, 
un entier $b$ et un entier $z$, qui calcule le \textsl{b-poids} de $z$.
\terminal{\$ ./poids 3 571\\ 4 }
\end{exercice}

\begin{exercice}
Utiliser le principe de d\'ecomposition pour
\'ecrire le programme \texttt{enuplet} acceptant deux param\`etres, 
un entier $m$ et un entier $q$ pour \'enumerer tous les $m$-ulets 
$q$-aire. Modifier votre programme pour qu'il rapporte le nombre
total $N(q,m)$ de r\'eductions modulo $q$ effectu\'ees lors de 
l'\'enum\'eration. Faire une repr\'esentation graphique avec 
\href{http://veron.univ-tln.fr/ENSEIGNEMENT/I31/index.html}{\texttt{gnuplot}}
de la fonction $\log N(5,m)$. Proposer une formule!
\end{exercice}

\begin{exercice} Utiliser les op\'erateurs de d\'ecalage (\verb+<< >>+), 
et l'op\'erateur logique \verb+&+ pour ecrire le programme \texttt{binaire} qui d\'ecompose
un entier $z$ en base $2$. Le programme doit afficher les symboles 
de la d\'ecomposition en base en comman\c cant par 
le chiffre significatif.
\terminal{\$ ./binaire 155\\
           1 0 0 1 1 0 1 1}
\textsl{Indication: 
Vous allez d'abord devoir trouver la plus grande puissance de $2$ 
inf\'erieure ou \'egale \`a $z$}.
\end{exercice}


\end{document}
