Université des Sciences et Technologies de Lille
Licence Miage - Programmation 1 - TP



Compression d'image
 


Soit la suite d'entiers naturels 314 314 3 54 54 54 22. Lisez-la : on peut aussi prononcer
2 fois 314, 1 fois 3, 3 fois 54, 1 fois 22.
La seconde phrase est une description compressée de la première, et c'est cette propriété qui est utilisée (de manière plus sophistiquée ...) dans les algorithmes de compression d'image: on regroupe les pixels voisins identiques.

Question 1

Écrire un programme compression qui permet de transformer une suite d'entiers, lue au clavier, de la forme 314 314 3 54 54 54 22 en 2 fois 314, 1 fois 3, 3 fois 54, 1 fois 22. Par convention, la fin de la suite d'entiers est signalée par un 0. Pour tester votre programme, vous pouvez rediriger l'affichage vers un fichier avec l'opérateur >. Par exemple compression > test . Le résultat de l'exécution, au lieu d'apparaitre à l'écran, se trouve alors dans le fichier test, que vous n'avez plus qu'à visualiser avec emacs. Attention, la redirection n'est possible que si le fichier test n'existe pas, ce qui signifie qu'il faut effacer celui-ci avant chaque nouveau test (commande Linux rm test).

Question 2

Écrire un second programme decompression, qui opère la transformation réciproque : à partir de la suite de caractères 2 * 314, 1 * 3, 3 * 54, 1 * 22. , le programme affiche la suite d'entiers 314 314 3 54 54 54 22. Pour cela, nous vous conseillons de procéder de manière méthodique. Vous pouvez notamment définir un ensemble d'états facteur, fois, valeur et virgule, correspondant à différents moments de la suite :
2 état facteur
* état fois
3 état valeur
1 état valeur
4 état valeur
, état virgule
1 état facteur
* état fois
3 état valeur
etc.
En ADA, l'ensemble d'états est décrit par le type énuméré
        type etat is (facteur, valeur, fois, virgule);
L'algorithme ressemblera ensuite à ceci :

On est dans l'état facteur et
À vous de traiter les autres cas ! L'interruption du programme en cas d'erreur de syntaxe se fait avec l'activation d'une exception, l'exception prédéfinie constraint_error par exemple. C'est l'instruction raise constraint_error;.


Hélène Touzet - octobre 2000
This document was translated from LATEX by HEVEA.