From 16e6a0c5ca2609e66d8da37b81ee79e83bfeca21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre=20=E2=9C=8F?= Date: Sat, 22 Oct 2016 03:58:53 +0200 Subject: [PATCH] Affiche la longueur moyenne de codage dans le verbeux --- src/display.c | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/src/display.c b/src/display.c index 720c55b..6f959ec 100644 --- a/src/display.c +++ b/src/display.c @@ -22,6 +22,14 @@ static void _printVertex(HufVertex, wchar_t*, int); */ static char _safeChar(char input); +void printTree(HufTree tree) { + // Allocation d'un tampon suffisamment grand pour contenir + // les indentations des sommets les plus profonds de l'arbre + wchar_t *buffer = malloc(_maxDepth(*tree.root) * 4 * sizeof(*buffer)); + _printVertex(*tree.root, buffer, 0); + free(buffer); +} + void _printVertex(HufVertex vert, wchar_t *buffer, int length) { if (vert.child_l != NULL && vert.child_r != NULL) { // Affichage d'un sommet avec enfants, on montre @@ -50,7 +58,7 @@ void _printVertex(HufVertex vert, wchar_t *buffer, int length) { } else { // Affichage d'une feuille de l'arbre, correspondant // à un caractère du corpus - printf("%c\n", vert.character); + printf("%c\n", _safeChar(vert.character)); } } @@ -65,22 +73,6 @@ int _maxDepth(HufVertex vert) { } } -void printTree(HufTree tree) { - // Allocation d'un tampon suffisamment grand pour contenir - // les indentations des sommets les plus profonds de l'arbre - wchar_t *buffer = malloc(_maxDepth(*tree.root) * 4 * sizeof(*buffer)); - _printVertex(*tree.root, buffer, 0); - free(buffer); -} - -char _safeChar(char input) { - if (input < 32 || input == 127) { - return ' '; - } - - return input; -} - void printFrequenciesTable(double* table, size_t size) { printf("╭─┬───┬─────────╮\n"); printf("│C│num│fréquence│\n"); @@ -105,11 +97,27 @@ void printLabelsTable(char** table, size_t size) { printf("│C│num│ étiquette│\n"); printf("├─┼───┼────────────────┤\n"); + double total_length = 0; + size_t label_count = 0; + for (size_t i = 0; i < size; i++) { if (table[i] != 0) { printf("│%c│%3d│%16s│\n", _safeChar(i), (int) i, table[i]); + + total_length += strlen(table[i]); + label_count++; } } - printf("╰─┴───┴────────────────╯\n"); + printf("├─┴───┴────┬───────────┤\n"); + printf("│Long. moy.│%11lf│\n", total_length / label_count); + printf("╰──────────┴───────────╯\n"); +} + +char _safeChar(char input) { + if (input < 32 || input == 127) { + return ' '; + } + + return input; }