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 @@
  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 @@
  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
correcteur.c
... ... @@ -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 31 void ajout(Node **N, char lettre)
51 32 {
52 33 Node *nouveau = malloc(sizeof(Node));
... ... @@ -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 73 char mot[MAX_LETTRES];
93   - dico = fopen("words.txt","r");
  74 + fp = fopen(dico,"r");
94 75 int i;
95   - while ((i = fscanf(dico,"%s",mot)) == 1){
  76 + while ((i = fscanf(fp,"%s",mot)) == 1){
96 77 ajout_alphab(Arbre,mot,0);
97 78 }
98   - fclose(dico);
  79 + fclose(fp);
99 80 return *Arbre;
100 81 }
101 82  
... ... @@ -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 161 int * erreur=malloc(sizeof(int));
181 162 (*erreur)=0;
182 163 char mot[MAX_LETTRES];
183   - texte = fopen("words2.txt","r");
  164 + fp = fopen(texte,"r");
184 165 int i;
185   - while ((i = fscanf(texte,"%s",mot)) == 1){
  166 + while ((i = fscanf(fp,"%s",mot)) == 1){
186 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 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 @@
  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 @@
  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 @@
  1 +apricot, break ; truck.
  2 +élan
  3 +
  4 +errrror
... ...