tree.h 3.39 KB
// --------------------------------------------------------
// Projet IMA3 2019 - Lecture d'une bibliothèque
// Décompte du nombre de fautes d'orthographe dans un texte
// Normand Quentin & Rouillé Guillaume
// --------------------------------------------------------

// Initialisation des variables et inclusion des bibliothèques
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

// Définition des constantes
#define MAX 30 // taille maximale d'une chaîne lue dans un fichier
#define NB_CARAC 27 // nombre de caractères différents pouvant être identifiés
#define NB_MOT_CORRECTION 15 // nombre de mots pour la correction
#define MAX_READ 1000 // nombre de caractères maximums dans une ligne lue lors de la connexion

// Déclaration de la structure 'trie' ou 'arbre indexé', ainsi que des pointeurs associés
typedef struct node* Node;

typedef struct node {
  char letter;
  Node next[NB_CARAC];
  bool endWord;
}node;

// Déclaration de la liste contigüe contenant les mots possible pour la correction
typedef struct liste* correction;

typedef struct liste {
	char mots[NB_MOT_CORRECTION][MAX];
	int dernier;
}liste;

// Fonction permettant de savoir si la structure est vide
bool is_empty_tree(Node);

// Fonction permettant de savoir si le tableau 'next' est un tableau de pointeurs NULL
bool is_leaf(Node);

// Initialisation de la structure accueillant le dictionnaire
void init_tree(Node*);

// Détermine l'indice de rangement dans le tableau 'next' du caractère 'letter'
int find_caract_indice(char); // Ne fonctionne pas pour les caractères accentués

// Fonction d'ajout d'un mot 'word' dans la structure 'tree' de type 'arbre indexé'
void add_in_tree(Node, char*);

// Fonction qui détermine si le caractère est un caractère de fin de mot (espace, ',', ';', '.', etc..)
bool is_end_caract(char);

// Renvoi l'indice maximum du mot 'word'
char max_index(char*);

// Détermine si le mot 'word' est présent dans l'arbre indexé
void scan_word(Node, char*, int*, FILE*, int*);

// Retourne 'true' si le mot 'word' est non accentué, 'false' sinon
bool no_accent(char*);

// Transmet les mots du texte à analyser à 'scan_word'
void read_txt(FILE*, Node*, int*, int*);

// Transmet les mots de la biliothèque à 'add_in_tree'
void read_lib(FILE*, Node*);

// Affiche l'arbre indexé
void print_tree(Node, int, char*);

// Libère l'espace mémoire associé à l'arbre indexé
void free_tree(Node*);

// Ajoute une erreur
void add_error(int*, char*, int, Node, FILE*, int*);

// Corrige les erreurs
void make_correction(char *, int, Node, FILE*, int*);

// Initialise le programme (affichage)
void init_pgrm(void);

// Ajoute un caractère à une chaine de caractères
void add_caract(char*, char);

// Supprime le dernier caractère d'une chaine 
void supp_caract(char*);

// Initialise la liste contigüe contenant les mots de correction
void init_correction(correction*);

// Récupère les mots possibles pour la correction
void make_tree_correct(Node, int, char*, char*, correction);

// Ajoute un mot dans une liste contigûe
void add_in_liste(correction, char*, char*);

// Choix du mot corrigé
void choice_word(correction, FILE*, char, int, int*, bool);

// Détecte les caractères spéciaux
bool detect_end_caract(char*, char*);

// Corrige le mot
void correct_word(char*, FILE*, int);