Skip to content

Latest commit

 

History

History
98 lines (62 loc) · 2.98 KB

File metadata and controls

98 lines (62 loc) · 2.98 KB

TP C++ n°9

Compression RLE

La compression RLE (Run-Length Encoding) remplace des séquences répétées par une représentation plus compacte. Ce TP introduit l'encapsulation d'un algorithme de traitement binaire dans une classe C++.

Objectif

Réaliser une classe Compresseur qui implémente la compression/décompression RLE sur des fichiers binaires.

Notions C++

  • classes et encapsulation ;
  • flux binaires (ifstream, ofstream) ;
  • algorithmes de parcours séquentiel ;
  • gestion de fichiers.

Pré-requis

Travail demandé

On désire créer une classe Compresseur déclarée dans le fichier compress.h et définie dans le fichier compress.cxx. Le diagramme de classes UML est le suivant (fstream est une classe déclarée dans <fstream> et permet de gérer les fichiers de données) :

Diagramme de classes réalisé avec https://www.planttext.com

Les fonctions membres compresser et decompresser doivent répondre aux prototypes suivants :

void compresser(string fichierEntree, string fichierSortie);
void decompresser(string fichierEntree, string fichierSortie);

1. Algorithmes

Donner en pseudolangage les algorithmes des fonctions compresser et decompresser. Justifier le choix du type de vos variables.

2. Implémentation de la classe

Implémenter en C++ la classe Compresseur.

3. Test de la classe

Valider la classe en compressant le fichier test image.xpm. Le fichier destination sera nommé image.xp_. Éditer le fichier compressé et vérifier son intégrité. Décompresser image.xp_ en image2.xpm et relever le taux de compression obtenu.

4. Amélioration de la classe

Nous avons précédemment mesuré le taux de compression par une méthode contestable. Modifier la classe en conséquence pour permettre un calcul automatique du taux.

Contraintes techniques

  • Compilateur GNU C++ ;
  • Système d'exploitation Linux, Mac OS X ou Ms-Windows ;
  • Standard recommandé : C++11 ou supérieur.

Exemples d'entrée/sortie

Exemple :

  • entrée : image.xpm ;
  • sortie intermédiaire : image.xp_ ;
  • sortie finale après décompression : image2.xpm.

Résultat attendu : image2.xpm identique à image.xpm.

Compilation

g++ -std=c++11 -Wall -Wextra -o testcomp src/testcomp.cxx src/compress.cxx

Livrables

  • src/include/compress.h ;
  • src/compress.cxx ;
  • src/testcomp.cxx ;
  • README.md (compilation, protocole de test, taux observé).

Extensions possibles (bonus)

  • Ajouter des tests automatiques sur fichier vide et longues répétitions ;
  • Ajouter un mode verbeux (statistiques de compression).

Critères d'évaluation

  • Qualité et organisation des documents rendus (codes sources, fichier README, etc.) ;
  • Exactitude de la compression/décompression ;
  • Robustesse des traitements fichiers ;
  • Autonomie.