// -------------------------------------------------------- // 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 #include #include #include // 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);