Ce TP, et le TP suivant, sont sur le même format que le TP noté.
Les fichiers nécessaires à la résolution des questions se trouvent ici.
Voici le rendu attendu pour chacune des questions:
Q1 | Un fichier .c | |
Q2 | Le résultat de la décompression des 4 fichiers | |
Q3 | Un fichier .c | Le résultat de la compression du fichier image.xpm |
Q4 | Un fichier .c | Le résultat de la compression du fichier image.xpm |
Q5 | Un fichier .c | Le résultat de la décompression du fichier gros.lzj |
Q6 | Un fichier .c | Le résultat de la compression du fichier ann |
Q7 | Un fichier .txt répondant à la question |
Pour avoir une note correcte, il est attendu a minima une réponse aux question 1,2,3 et 7.
Le travail doit être effectué seul. Il est possible de récupérer des fichiers venant des TPs précédents. L'usage d'internet est restreint à l'accès aux pages concernant le cours.
Tout non-respect des consignes sera sanctionné. En particulier, si le travail n'a pas été effectué seul, une pénalité d'un minimum de 20 points sera appliquée.
Le but du TP est d'écrire un décompresseur (puis un compresseur rudimentaire) pour un format de compression inspiré de LZSS. Il est très simplifié, et perd un peu en compression par rapport à une variante un peu plus intelligente.
Le résultat du compresseur est constitué de deux types d'entités différentes:
(i, j)
qui signifient qu'il faut recopier ce qui se
situe i
caractères auparavant pendant j
caractères
Par exemple, la chaine de caractères ababdaba peut être compressée en
ab(2,2)dabaou encore
ab(2,2)d(3,2)aou encore
ab(2,2)d(5,3)ou encore
ababd(5,3)etc.
Le résultat de l'algorithme est codé dans un fichier de la façon suivante:
(i,j)
est codée sur 14 bits: On écrit d'abord le bit 0,
puis la position i sur 8 bits, puis le nombre de caractères à
recopier j
sur 5 bits.
i = 0
(puisque sinon la valeur de i
est toujours au
moins égale à 1)
Par exemple, ab(2,2)d(5,3)
sera représenté par la suite de bits:
1 01100001 1 01100010 0 00000010 00010 1 01100100 0 00000101 00011 0 00000000 00000 a b 2 2 d 5 3 FIN
char text[15000];
exemple.lzj
,
ann.lzj
(un texte), balzac.lzj
(un texte), et image.xpm.lzj
(une image)
image.xpm
image.xpm
gros.lzj
ann
.