Figure 6 : Code binaire de chaque caractère
Dans l'exemple précédent, on obtient la suite de bits 0001011100000011001100111 pour le
codage du mot « Une banane ».
On peut voir que ce codage vérifie toujours les propriétés a) à d), et permet donc la
compression et la décompression. Avec cet algorithme, le décompresseur doit connaître les
codes construits par le compresseur.
Lors de la compression, le compresseur écrira donc ces codes en début de fichier compressé,
sous un format à définir, connu du compresseur et du décompresseur. Le fichier compressé
aura donc deux parties disjointes :
· Une première partie permettant au décompresseur de retrouver le code de chaque
caractère;
· Une seconde partie contenant la suite des codes des caractères du fichier à compresser.
Attention, le décompresseur doit toujours pouvoir trouver la séparation entre ces deux parties.
Aussi, vous pouvez toujours vérifier le code générer par votre algorithme en vérifiant que le
code générer pour coder un caractère ne doit pas ressembler au début d’un code d’un autre
caractère.
3. Travail demandé
3.1. Première partie : Occurrences des caractères
L’objectif est de travailler avec des fichiers (qui par la suite seront les fichiers à compresser).
Il faut donc que nous maitrisions les fonctions de manipulation de fichier.
Q1. Réaliser un programme qui ouvre un fichier texte et qui affiche une partie du contenu
à l’écran. (Utiliser la fonction fread()).
Q2. Réaliser un programme qui ouvre un fichier texte et qui affiche la totalité du contenu
du fichier à l’écran. Vous ferez une lecture grâce à la fonction fgetc( ) jusqu'à ce que vous
rencontriez le caractères de fin de fichier (EOF=End Of File).
Nous nous intéressons au comptage des occurrences des caractères présents dans le fichier
texte. Pour cela nous utiliserons un tableau de caractère appelé tab_caractere[256]. Ce tableau
comporte 256 éléments. Dans chaque case de ce tableau, nous rentrerons le nombre
d’occurrence du caractère dont le code ASCII est donné par l’index de tab_caractère.
Exemple :
Le code ASCII du ‘a’ est 97.
tab_caractere[97] comportera donc le nombre d’occurrence du caractère ‘a’.
Q3. Coder une fonction dont le prototype est [ void occurence(FILE* file, int tab[256]) ].
Cette fonction comptera les occurrences des caractères du fichier ‘file’, et stockera les