From ab7f63447acfde609ad1b13f5a98e2cd044417bc Mon Sep 17 00:00:00 2001 From: NyxiumYuuki Date: Sat, 7 Dec 2019 21:16:27 +0100 Subject: [PATCH] Add Incremente List Freq --- arbre_de_codage/liste.c | 26 +++++++++++++++--- arbre_de_codage/liste.h | 7 ++--- main_compress.c | 51 +++++++++++++++++++++++++++++------- travaux_a_faire_projet_c.txt | 45 ------------------------------- 4 files changed, 68 insertions(+), 61 deletions(-) delete mode 100644 travaux_a_faire_projet_c.txt diff --git a/arbre_de_codage/liste.c b/arbre_de_codage/liste.c index 8527bd2..9ac5ff7 100644 --- a/arbre_de_codage/liste.c +++ b/arbre_de_codage/liste.c @@ -10,7 +10,7 @@ int est_liste_vide(Freq l){ return(l==NULL); } -Freq ajouter(int nb, char lettre, Freq l){ +Freq ajouter(int nb, int lettre, Freq l){ Occ * tmp; tmp=malloc(sizeof(Occ)); tmp->nb=nb; @@ -19,7 +19,7 @@ Freq ajouter(int nb, char lettre, Freq l){ return tmp; } -char tete(Freq l){ +int tete(Freq l){ assert(!est_liste_vide(l)); return(l->lettre); } @@ -43,7 +43,7 @@ Freq liberer_maillon(Freq l){ return tmp; } -int rechercher(char lettre,Freq l){ +int rechercher(int lettre,Freq l){ if(est_liste_vide(l)){ return 0; } @@ -53,4 +53,24 @@ int rechercher(char lettre,Freq l){ else{ return rechercher(lettre,queue(l)); } +} + +Freq incrementer(int lettre, Freq l){ + /* + Incrémente de 1, l'occurence de la lettre associée + (Attention ! Ici, la liste est parcourue complétement même si on a déjà incrémenté ... Autres solutions ?) + */ + if(!est_liste_vide(l)){ + return l; + } + else if(lettre == tete(l)){ + int occ; + occ=l->nb; + occ++; + l->nb=occ; + return l; + } + else{ + return incrementer(lettre,queue(l)); + } } \ No newline at end of file diff --git a/arbre_de_codage/liste.h b/arbre_de_codage/liste.h index 511087d..5def1c0 100644 --- a/arbre_de_codage/liste.h +++ b/arbre_de_codage/liste.h @@ -2,7 +2,7 @@ #define __LISTE_OCCURENCE__ struct zoccurence{ int nb; - char lettre; + int lettre; struct zoccurence *suiv; }; typedef struct zoccurence Occ; @@ -10,11 +10,12 @@ typedef struct zoccurence * Freq; Freq creer_liste_vide(); int est_liste_vide(Freq l); -Freq ajouter(int nb, char lettre, Freq l); +Freq ajouter(int nb, int lettre, Freq l); int tete(Freq l); Freq queue(Freq l); void liberer_liste(Freq l); Freq liberer_maillon(Freq l); -int rechercher(char lettre, Freq l); +int rechercher(int lettre, Freq l); +Freq incrementer(int lettre, Freq l); #endif \ No newline at end of file diff --git a/main_compress.c b/main_compress.c index fba990d..6fe70e4 100644 --- a/main_compress.c +++ b/main_compress.c @@ -1,19 +1,50 @@ #include -#include "arbre_binaire.c" -#include "liste.c" +#include "arbre_de_codage/arbre_binaire.c" +#include "arbre_de_codage/liste.c" + +Freq freq_apparition(FILE *file); +arbre huffman(arbre H, Freq L[]); -int main () -{ - Freq Test; +// main_compress.c [nom_du_fichier_a_compresser] +int main(int argc, char **argv){ + FILE *file; + // Vérification de l'existance du second argument (Nom du fichier à compresser) + if(argc != 2){ + printf("\nErreur : Veuillez mettre en argument un nom de fichier à compresser (Ex: %s text.txt)\n",argv[0]); + return -1; + } + // Vérification de l'ouverture du fichier en mode lecture binaire !! FONCTION A MODIFIER + else if(file=fopen(argv[1],'rb')){ + printf("\nErreur : Fichier %s inexistant\n",argv[1]); + return -2; + } + } -/* - L est considéré comme ordonné -*/ -arbre huffman(arbre H, Freq L[]) -{ + + +Freq freq_apparition(FILE *file){ + Freq text; + text = creer_liste_vide(); + int c; + while((c=fgetc(file))!=EOF){ + if(rechercher(c,text)==1){ + text=incrementer(c,text); + } + else{ + + } + + } + +} + +arbre huffman(arbre H, Freq L[]){ + /* + Création de l'arbre de codage de Huffman en considérant une liste avec les fréquences d'apparition des caractères ordonnée croissante + */ int i; printf(L[]->nb); diff --git a/travaux_a_faire_projet_c.txt b/travaux_a_faire_projet_c.txt deleted file mode 100644 index 52917a7..0000000 --- a/travaux_a_faire_projet_c.txt +++ /dev/null @@ -1,45 +0,0 @@ -TRAVAUX : - GESTION DE FICHIERS : - - Structure Gérer les échanges avec le disque, mémorisant notamment l’état des échanges en cours - - Fonction Ouvrir un fichier binaire en lecture ou écriture - - Fonction Ecrire un bit dans un fichier binaire - - Fonction Lire un fichier binaire - - Fonction Fermer un fichier - - ARBRE DE CODAGE : - - Fonction Fréquence d'apparition des caractères dans un fichier - - tri quicksort - - Implémentation de l'algorithme de construction de l'arbre de codage (Module Arbres_Binaires) - - tri à bulle - - COMPRESSION : - - Fonction de compression d'un fichier texte dans un fichier binaire - - EXTRACTION (DECOMPRESSION) : - - Fonction d'extraction d'un fichier texte depuis un fichier compressé - - -FICHIERS A PREVOIR : - - Makefile - - main_compress.c - main_decompress.c - - GESTION DES FICHIERS : - - gestion_fichiers.h - - gestion_fichier.c - - ARBRE DE CODAGE : - - arbre_binaire.h - - arbre_binaire.c - (Utile pour stocker le nombre d'occurence d'un caractère) - - liste.h - - liste.c - - -INSTRUCTION A FAIRE PENDANT LE CODAGE : - - Commenter chaque fonction (ce qu'elle fait avec entrée et sortie) - - Commenter des parties non trivial (évident) - -