Commit 6d28d90b8595c2de7f0894ee85b1580453acdde8
1 parent
72a3086e
Désolé pour le retard il m'était impossible d'eefectuer un commit depuis mon domicile
Showing
10 changed files
with
116 additions
and
43 deletions
Show diff stats
No preview for this file type
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +all: correcteur | ||
2 | + | ||
3 | +correcteur: correcteur.o main.o | ||
4 | + gcc -Wall -Wextra -o correcteur correcteur.o main.o | ||
5 | + | ||
6 | +correcteur.o : correcteur.c | ||
7 | + gcc -c correcteur.c -Wall -Wextra | ||
8 | + | ||
9 | +main.o : main.c correcteur.h | ||
10 | + gcc -c main.c -Wall -Wextra | ||
11 | + | ||
12 | +clean: | ||
13 | + rm -f *.o correcteur |
@@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
1 | +# Programmation Avancé | ||
2 | + | ||
3 | +## Descriptif rapide | ||
4 | + | ||
5 | +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 . | ||
6 | + | ||
7 | +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. | ||
8 | + | ||
9 | +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. | ||
10 | +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. | ||
11 | +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. | ||
12 | + | ||
13 | + | ||
14 | +## Mode d'emploi | ||
15 | + | ||
16 | +Grâce au Makefile réalisé la complilation est instinctive puisqu'il suffit de réaliser les commandes suivantes sucessivement: | ||
17 | + | ||
18 | + make clean | ||
19 | + make | ||
20 | + | ||
21 | +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: | ||
22 | + | ||
23 | + ./correcteur nom_du_dictionnaire nom_du_texte | ||
24 | + | ||
25 | +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. | ||
26 | + | ||
27 | +Les fichiers texte fournis ( test.txt et test2.txt ) contiennent respectivement 0 et 1 erreur. | ||
28 | + | ||
29 | + | ||
30 | + |
No preview for this file type
correcteur.c
@@ -28,25 +28,6 @@ bool is_empty(struct node *tree) | @@ -28,25 +28,6 @@ bool is_empty(struct node *tree) | ||
28 | 28 | ||
29 | 29 | ||
30 | 30 | ||
31 | -bool is_leaf(struct node *tree) | ||
32 | -{ | ||
33 | - int cpt=1; | ||
34 | - if (is_empty(tree)) return 1; | ||
35 | - for (int i=0; i<size ; i++){ | ||
36 | - if ( tree->lettres[i] == NULL){ | ||
37 | - cpt++; | ||
38 | - } | ||
39 | - } | ||
40 | - if (cpt == size) cpt=1; | ||
41 | - if (cpt != size) cpt=0; | ||
42 | - return cpt ; | ||
43 | -} | ||
44 | - | ||
45 | - | ||
46 | - | ||
47 | - | ||
48 | - | ||
49 | - | ||
50 | void ajout(Node **N, char lettre) | 31 | void ajout(Node **N, char lettre) |
51 | { | 32 | { |
52 | Node *nouveau = malloc(sizeof(Node)); | 33 | Node *nouveau = malloc(sizeof(Node)); |
@@ -87,15 +68,15 @@ void ajout_alphab(Node ** pn, char * mot,int cpt) | @@ -87,15 +68,15 @@ void ajout_alphab(Node ** pn, char * mot,int cpt) | ||
87 | 68 | ||
88 | 69 | ||
89 | 70 | ||
90 | -Node * charger_arbre(Node ** Arbre){ | ||
91 | - FILE * dico; | 71 | +Node * charger_arbre(Node ** Arbre, char * dico){ |
72 | + FILE * fp; | ||
92 | char mot[MAX_LETTRES]; | 73 | char mot[MAX_LETTRES]; |
93 | - dico = fopen("words.txt","r"); | 74 | + fp = fopen(dico,"r"); |
94 | int i; | 75 | int i; |
95 | - while ((i = fscanf(dico,"%s",mot)) == 1){ | 76 | + while ((i = fscanf(fp,"%s",mot)) == 1){ |
96 | ajout_alphab(Arbre,mot,0); | 77 | ajout_alphab(Arbre,mot,0); |
97 | } | 78 | } |
98 | - fclose(dico); | 79 | + fclose(fp); |
99 | return *Arbre; | 80 | return *Arbre; |
100 | } | 81 | } |
101 | 82 | ||
@@ -175,19 +156,20 @@ int comparaison(Node ** pn, char * mot,int cpt,int * erreur) | @@ -175,19 +156,20 @@ int comparaison(Node ** pn, char * mot,int cpt,int * erreur) | ||
175 | 156 | ||
176 | } | 157 | } |
177 | 158 | ||
178 | -void test_erreur(Node * Dico){ | ||
179 | - FILE * texte; | 159 | +void test_erreur(Node * Dico,char * texte){ |
160 | + FILE * fp; | ||
180 | int * erreur=malloc(sizeof(int)); | 161 | int * erreur=malloc(sizeof(int)); |
181 | (*erreur)=0; | 162 | (*erreur)=0; |
182 | char mot[MAX_LETTRES]; | 163 | char mot[MAX_LETTRES]; |
183 | - texte = fopen("words2.txt","r"); | 164 | + fp = fopen(texte,"r"); |
184 | int i; | 165 | int i; |
185 | - while ((i = fscanf(texte,"%s",mot)) == 1){ | 166 | + while ((i = fscanf(fp,"%s",mot)) == 1){ |
186 | (*erreur)=comparaison(&Dico,mot,0,erreur); | 167 | (*erreur)=comparaison(&Dico,mot,0,erreur); |
187 | } | 168 | } |
188 | - if ((*erreur)==0 || (*erreur)==1 ) printf("%d erreur",(*erreur)); | ||
189 | - else printf("%d erreurs",(*erreur)); | ||
190 | - fclose(texte); | 169 | + if ((*erreur)==0 || (*erreur)==1 ) printf("%d erreur \n",(*erreur)); |
170 | + else printf("%d erreurs \n",(*erreur)); | ||
171 | + free(erreur); | ||
172 | + fclose(fp); | ||
191 | } | 173 | } |
192 | 174 | ||
193 | 175 | ||
@@ -195,15 +177,3 @@ void test_erreur(Node * Dico){ | @@ -195,15 +177,3 @@ void test_erreur(Node * Dico){ | ||
195 | 177 | ||
196 | 178 | ||
197 | 179 | ||
198 | -int main(){ | ||
199 | - Node * Arbre; | ||
200 | - initialisation(&Arbre); | ||
201 | - charger_arbre(&Arbre); | ||
202 | - //affichage_arbre(Arbre); | ||
203 | - printf("Arbre fini \n"); | ||
204 | - test_erreur(Arbre); | ||
205 | - detruire_arbre(&Arbre); | ||
206 | - //affichage_arbre(Arbre); | ||
207 | - | ||
208 | - return 0; | ||
209 | -} |
@@ -0,0 +1,34 @@ | @@ -0,0 +1,34 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | +#include <stdbool.h> | ||
4 | +#include <string.h> | ||
5 | + | ||
6 | +#define size 255 | ||
7 | + | ||
8 | +typedef struct node { | ||
9 | + char l; | ||
10 | + struct node * lettres[size]; | ||
11 | + bool fin_de_mot; | ||
12 | +} Node; | ||
13 | + | ||
14 | + | ||
15 | +bool is_empty(struct node * ); | ||
16 | + | ||
17 | +void ajout(Node **, char); | ||
18 | + | ||
19 | +void ajout_alphab(Node **, char *, int); | ||
20 | + | ||
21 | +Node * charger_arbre(Node **, char *); | ||
22 | + | ||
23 | +void affichage_arbre(Node *); | ||
24 | + | ||
25 | +void detruire_arbre(Node **); | ||
26 | + | ||
27 | +void initialisation(Node **); | ||
28 | + | ||
29 | +int comparaison(Node ** , char * ,int ,int *); | ||
30 | + | ||
31 | +void test_erreur(Node *,char *); | ||
32 | + | ||
33 | + | ||
34 | + |
No preview for this file type
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include "correcteur.h" | ||
3 | + | ||
4 | + | ||
5 | +int main(int argc,char * argv[]){ | ||
6 | + char * texte = NULL; | ||
7 | + char * dico = NULL; | ||
8 | + if (argc >1) { | ||
9 | + texte = argv[2]; | ||
10 | + dico = argv[1]; | ||
11 | + } | ||
12 | + Node * Arbre; | ||
13 | + initialisation(&Arbre); | ||
14 | + charger_arbre(&Arbre,dico); | ||
15 | + //affichage_arbre(Arbre); | ||
16 | + printf("Arbre fini \n"); | ||
17 | + test_erreur(Arbre,texte); | ||
18 | + detruire_arbre(&Arbre); | ||
19 | + | ||
20 | + return 0; | ||
21 | +} | ||
22 | + |
No preview for this file type