Commit 6d28d90b8595c2de7f0894ee85b1580453acdde8

Authored by Fontaine Maxime
1 parent 72a3086e

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 0 → 100644
No preview for this file type
Makefile 0 → 100644
@@ -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
README2.md 0 → 100644
@@ -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 +
correcteur 0 → 100755
No preview for this file type
@@ -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 -}  
correcteur.h 0 → 100644
@@ -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 +
correcteur.o 0 → 100644
No preview for this file type
main.c 0 → 100644
@@ -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 +
main.o 0 → 100644
No preview for this file type
test2.txt 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +apricot, break ; truck.
  2 +élan
  3 +
  4 +errrror