From 6d28d90b8595c2de7f0894ee85b1580453acdde8 Mon Sep 17 00:00:00 2001 From: Fontaine Maxime Date: Mon, 6 May 2019 09:13:50 +0200 Subject: [PATCH] Désolé pour le retard il m'était impossible d'eefectuer un commit depuis mon domicile --- Compte-rendu de projet de programmation avancée.pdf | Bin 0 -> 63595 bytes Makefile | 13 +++++++++++++ README2.md | 30 ++++++++++++++++++++++++++++++ correcteur | Bin 0 -> 9252 bytes correcteur.c | 56 +++++++++++++------------------------------------------- correcteur.h | 34 ++++++++++++++++++++++++++++++++++ correcteur.o | Bin 0 -> 3836 bytes main.c | 22 ++++++++++++++++++++++ main.o | Bin 0 -> 1084 bytes test2.txt | 4 ++++ 10 files changed, 116 insertions(+), 43 deletions(-) create mode 100644 Compte-rendu de projet de programmation avancée.pdf create mode 100644 Makefile create mode 100644 README2.md create mode 100755 correcteur create mode 100644 correcteur.h create mode 100644 correcteur.o create mode 100644 main.c create mode 100644 main.o create mode 100644 test2.txt diff --git a/Compte-rendu de projet de programmation avancée.pdf b/Compte-rendu de projet de programmation avancée.pdf new file mode 100644 index 0000000..579418b Binary files /dev/null and b/Compte-rendu de projet de programmation avancée.pdf differ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..66e5b26 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +all: correcteur + +correcteur: correcteur.o main.o + gcc -Wall -Wextra -o correcteur correcteur.o main.o + +correcteur.o : correcteur.c + gcc -c correcteur.c -Wall -Wextra + +main.o : main.c correcteur.h + gcc -c main.c -Wall -Wextra + +clean: + rm -f *.o correcteur diff --git a/README2.md b/README2.md new file mode 100644 index 0000000..8ce77ce --- /dev/null +++ b/README2.md @@ -0,0 +1,30 @@ +# Programmation Avancé + +## Descriptif rapide + +L’objectif du projet est de trouver une structure de données adaptée pour ensuite implémenter un détecteur de fautes d’orthographes . + +Nous avons choisi de travailler avec une structure d’arbre ordonné (struct node) composée d’un char l qui représente les différentes lettres d’un certain mot, d’un tableau de pointeurs qui redirige vers la même structure d’arbre et un d’un booléen qui indique une fin de mot. + +Le code du programme est principalement organisé en deux grandes parties : les fonctions qui s’occupent du chargement de l’arbre à partir du dictionnaire et les fonctions qui gèrent l’analyse des mots et la détection de fautes d’orthographe. +On retrouve dans la première partie des fonctions “classiques” (mais adaptées à notre structure et au problème posé) d’algorithmes utilisant des arbres telles que is_empty, ajout, affichage_arbre ou encore detruire_arbre pour gérer les potentielles fuites mémoire. +La deuxième partie est composée de deux fonctions, comparaison et test_erreur. Cette dernière utilise la fonction récursive comparaison pour rendre le résultat final du programme. + + +## Mode d'emploi + +Grâce au Makefile réalisé la complilation est instinctive puisqu'il suffit de réaliser les commandes suivantes sucessivement: + + make clean + make + +Ainsi afin d'utiliser notre programme il suffit de taper la commande suivante directement après l'execution du `make` en suivant ce schéma: + + ./correcteur nom_du_dictionnaire nom_du_texte + +Ainsi le programme se chargera à l'aide du dictionnaire ,fourni en argument au format txt, puis analisera le texte afin de verifier si tous les mots se trouvent dans le dictionnaire en question. + +Les fichiers texte fournis ( test.txt et test2.txt ) contiennent respectivement 0 et 1 erreur. + + + diff --git a/correcteur b/correcteur new file mode 100755 index 0000000..ca8816b Binary files /dev/null and b/correcteur differ diff --git a/correcteur.c b/correcteur.c index 52c5aca..324a69c 100644 --- a/correcteur.c +++ b/correcteur.c @@ -28,25 +28,6 @@ bool is_empty(struct node *tree) -bool is_leaf(struct node *tree) -{ - int cpt=1; - if (is_empty(tree)) return 1; - for (int i=0; ilettres[i] == NULL){ - cpt++; - } - } - if (cpt == size) cpt=1; - if (cpt != size) cpt=0; - return cpt ; -} - - - - - - void ajout(Node **N, char lettre) { Node *nouveau = malloc(sizeof(Node)); @@ -87,15 +68,15 @@ void ajout_alphab(Node ** pn, char * mot,int cpt) -Node * charger_arbre(Node ** Arbre){ - FILE * dico; +Node * charger_arbre(Node ** Arbre, char * dico){ + FILE * fp; char mot[MAX_LETTRES]; - dico = fopen("words.txt","r"); + fp = fopen(dico,"r"); int i; - while ((i = fscanf(dico,"%s",mot)) == 1){ + while ((i = fscanf(fp,"%s",mot)) == 1){ ajout_alphab(Arbre,mot,0); } - fclose(dico); + fclose(fp); return *Arbre; } @@ -175,19 +156,20 @@ int comparaison(Node ** pn, char * mot,int cpt,int * erreur) } -void test_erreur(Node * Dico){ - FILE * texte; +void test_erreur(Node * Dico,char * texte){ + FILE * fp; int * erreur=malloc(sizeof(int)); (*erreur)=0; char mot[MAX_LETTRES]; - texte = fopen("words2.txt","r"); + fp = fopen(texte,"r"); int i; - while ((i = fscanf(texte,"%s",mot)) == 1){ + while ((i = fscanf(fp,"%s",mot)) == 1){ (*erreur)=comparaison(&Dico,mot,0,erreur); } - if ((*erreur)==0 || (*erreur)==1 ) printf("%d erreur",(*erreur)); - else printf("%d erreurs",(*erreur)); - fclose(texte); + if ((*erreur)==0 || (*erreur)==1 ) printf("%d erreur \n",(*erreur)); + else printf("%d erreurs \n",(*erreur)); + free(erreur); + fclose(fp); } @@ -195,15 +177,3 @@ void test_erreur(Node * Dico){ -int main(){ - Node * Arbre; - initialisation(&Arbre); - charger_arbre(&Arbre); - //affichage_arbre(Arbre); - printf("Arbre fini \n"); - test_erreur(Arbre); - detruire_arbre(&Arbre); - //affichage_arbre(Arbre); - - return 0; -} diff --git a/correcteur.h b/correcteur.h new file mode 100644 index 0000000..2943dd8 --- /dev/null +++ b/correcteur.h @@ -0,0 +1,34 @@ +#include +#include +#include +#include + +#define size 255 + +typedef struct node { + char l; + struct node * lettres[size]; + bool fin_de_mot; +} Node; + + +bool is_empty(struct node * ); + +void ajout(Node **, char); + +void ajout_alphab(Node **, char *, int); + +Node * charger_arbre(Node **, char *); + +void affichage_arbre(Node *); + +void detruire_arbre(Node **); + +void initialisation(Node **); + +int comparaison(Node ** , char * ,int ,int *); + +void test_erreur(Node *,char *); + + + diff --git a/correcteur.o b/correcteur.o new file mode 100644 index 0000000..6447149 Binary files /dev/null and b/correcteur.o differ diff --git a/main.c b/main.c new file mode 100644 index 0000000..aaf9859 --- /dev/null +++ b/main.c @@ -0,0 +1,22 @@ +#include +#include "correcteur.h" + + +int main(int argc,char * argv[]){ + char * texte = NULL; + char * dico = NULL; + if (argc >1) { + texte = argv[2]; + dico = argv[1]; + } + Node * Arbre; + initialisation(&Arbre); + charger_arbre(&Arbre,dico); + //affichage_arbre(Arbre); + printf("Arbre fini \n"); + test_erreur(Arbre,texte); + detruire_arbre(&Arbre); + + return 0; +} + diff --git a/main.o b/main.o new file mode 100644 index 0000000..126bdef Binary files /dev/null and b/main.o differ diff --git a/test2.txt b/test2.txt new file mode 100644 index 0000000..08867a1 --- /dev/null +++ b/test2.txt @@ -0,0 +1,4 @@ +apricot, break ; truck. +élan + +errrror -- libgit2 0.21.2