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