tp6_listes

Objectifs du travail pratique

  1. Création d’une librairie en Rust.
  2. Implémentation d’une pile statique et d’une pile dynamique.
  3. Instanciation et utilisation de cette.
  4. Écriture de programmes de tests.
  5. Indentation, commentaires et modularisation du code.
  6. Utilisation des traits.
  7. Gestion des erreurs.

Enoncé

Écrire une librairie Rust permettant la gestion de piles statiques et dynamiques. Cette librairie sera utilisée pour effectuer le tri d’un tableau à l’aide de deux piles. Le tri fonctionne de la manière suivante.

Cahier des charges (première partie)

Rien d’autre ne devra être affiché

Exemple

> cargo run 18 2 34 21 7 4
2
4
7
18
21
34

Cahier des charges (deuxième partie)

Une fois cette première partie terminée, vous devez rendre votre code complètement générique. Dans une premier temps de rendre vos implémentation de piles génériques (fonctionant pour n’importe quel type de données)

struct Pile<T> {
    // Votre implémentation générique
}

Puis, votre tri à deux piles devra être également être rendu générique: il faudra prendre une pile d’un type générique et être capable de la trier (attention, il faudra rajouter une contrainte sur les traits implémentés (un trait bound) par votre type générique dans ce cas).

Exemple

> cargo run 18.5 2.2 34.1 33.8 7.1 4.89
2.2
4.89
7.1
18.5
33.8
34.1

Règles du jeu

L’exemple décrit ci-dessous est illustré à la figure 1. Soit le tableau à trier suivant :

+====+====+====+====+====+ | 17 | 34 | 20 | 40 | 25 | +====+====+====+====+====+

Le tableau est parcouru de gauche à droite.

Utilisation des piles pour le tri.

Indications

Lecture à la ligne de commande

Afin de lire la ligne de commande il faut importer le module std::env:

let args: Vec<String> = env::args().collect();

Le résultat étant stocké dans un vecteur de strings, il faut ensuite transformer chaque élément du vecteur et le convertir en entier (on a déjà fait quelque chose de similaire dans les TPs précédents).

Considérations générales

Avant de commencer à programmer, réfléchissez bien aux méthodes que vous voulez exposer à l’utilisateur pour chacune des parties. Par exemple, quelles sont les méthodes que devront implémenter vos piles statiques et dynamiques? Quelles actions peuvent-elles effectuer toutes les deux?