\documentclass[10pt]{article}

% Packages
\usepackage{french}
\usepackage{fullpage}
\usepackage{multicol}
\usepackage{epsfig}
\setlength{\textheight}{24.1cm}

% Titre
\title{Partiel IF122 - Dur\'ee : 50mn}
\date{}
\author{}
\pagestyle{empty}



\begin{document}
\maketitle


{\bf Les documents sont interdits. Vous n'avez pas le droit de sortir de la salle avant la fin de l'epreuve. Votre nom doit figurer en commentaire tout au debut de votre programme, sous la forme : // NOM Prenom. Une fois le temps ecoul\'e, lancer l'impression de votre programme, et attendez sans quitter votre place que l'un des surveillants vienne le copier sur disquette. Bonne chance.}\\


Dans une liste on peut souhaiter eviter les begaiements, c'est le
sujet de cet examen. Partant d'une liste {\bf l}, on cherche \`a
obtenir les deux listes {\bf l1} et {\bf l2} : si {\bf l} commence par
4 occurrences succ\'essives de {\bf 1}, alors {\bf l1} stocke
l'\'element, ici {\bf 1}, et {\bf l2} stocke le nombre d'occurences,
ici {\bf 4}, et ainsi de suite.

\begin{center}\epsffile{compacte_exemple_1.eps}\end{center}

Ecrivez une proc\'edure {\bf compacte} qui prenne en argument les
trois listes {\bf l,l1,l2} et qui effectue l'op\'eration demand\'ee.


Pour vous concentrer sur le travail demand\'e, il vous est fourni le
code suivant qui saisit et affiche les listes  : \\

\begin{multicols}{2}{|}
\begin{verbatim}
#include <iostream.h>

typedef struct elem{
  int val;
  elem * suivant;
};

typedef elem* liste;


liste saisie(int n){
  elem* e;
  
  if (n==0) return( NULL);

  e=new elem;
  cout << ``valeur :'' ;
  cin >> e->val;
  e->suc=saisie(n-1);
  return e;

}

void affiche(liste l){
  if (l==NULL) {cout << endl;}
  else {
      cout << l->val;
      affiche(l->suivant);
  }
}

int main(){
  liste l;
  int n;
  cout << `` longueur de la liste'';
  cin >> n;
  l = saisie (n);
  cout << ``liste saisie '';
  affiche(c);
}
\end{verbatim}
\end{multicols}



\end{document}

Insere en fin
