Commit 974b1ae48c01746c87545632b597356e73088ec4

Authored by tvolleri
1 parent 73e92d24

ajout des fichiers du projet.

Makefile 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +EXEC = main
  2 +CC = gcc
  3 +SRC = $(wildcard *.c)
  4 +OBJ = $(SRC:.c = .o)
  5 +CFLAG = -g -Wall -Wextra -O0
  6 +
  7 +all: $(EXEC)
  8 +
  9 +%.o : %.c
  10 + $(CC) $(CFLAG) -o $@ -c $<
  11 +
  12 +$(EXEC) : $(OBJ)
  13 + $(CC) -o $@ $^
  14 +
  15 +clean:
  16 + rm -rf *.o
... ...
README.md deleted
... ... @@ -1,33 +0,0 @@
1   -# Programmation Avancée
2   -
3   -> Réalisation d’un correcteur orthographique
4   -
5   -## Objectif
6   -
7   -L’objectif de ce projet est de réaliser un programme qui permet de détecter dans un texte tous les mots mal orthographiés. Pour cela on utilisera un dictionnaire qui sera construit à partir d’un texte ou d’un ensemble de mots de référence.
8   -
9   -## Principe
10   -
11   -Afin de minimiser l’espace mémoire nécessaire au stockage du dictionnaire tout en fournissant un temps de recherche bas, la structure de données que vous utiliserez sera un arbre préfixe (encore appelé trie). Il s’agit d’une structure arborescente pour laquelle des mots ayant des préfixes communs sont factorisés: chaque noeud de l’arbre est une lettre qui peut être terminale (i.e. dernière lettre d’un mot) ou pas.
12   -
13   -Considérons les mots: were et will. L’arbre (ou [trie](https://en.wikipedia.org/wiki/Trie) ) correspondant est affiché ci-dessous à gauche. Si on ajoute les mots `we`, `wet` et `weave` l’arbre est affiché à droite; les noeuds colorés représentant des lettres terminales.
14   -
15   - ![](img/exemple_trie.png)
16   -
17   -## Cahier des charges
18   -
19   -Le travail que vous devez réaliser est le suivant:
20   -
21   -- Définir et implémenter une structure de données permettant de stocker et de manipuler un dictionnaire sous forme d’arbre préfixe / trie.
22   -- Charger un dictionnaire à partir d’un fichier texte de données. Ce fichier texte pouvant être un texte court, un roman ou une liste de mots. Par exemple le fichier `/etc/dictionaries-common/words` est un dictionnaire de langue anglaise.
23   -- Analyser l’orthographe d’une phrase ou d’un texte en indiquant les nombres de mots qui ne sont pas reconnus par le dictionnaire.
24   -
25   -Vous accorderez un soin particulier à l’ergonomie de votre programme (choix du dictionnaire, choix du texte à analyser).
26   -
27   -## Déliverables
28   -
29   -Pour le dimanche 5 mai 23:59 (CEST) vous devrez remettre à votre tuteur un accès à votre dépôt GIT qui contiendra:
30   -- un rapport de moins de 10 pages au format PDF contenant l’analyse de votre projet (structures de données, structuration de votre programme), les explications concernant les algorithmes principaux, le respect du cahier des charges et/ou les limitations de votre programme.
31   -- le code source de votre projet ainsi que le Makefile permettant de le compiler automatiquement.
32   -- un fichier README qui contiendra une description rapide de votre programme ainsi qu’un mode d’emploi.
33   -- des fichiers de tests éventuels
a.out deleted
No preview for this file type
compare.c 0 → 100644
... ... @@ -0,0 +1,73 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <string.h>
  4 +#include <stdbool.h>
  5 +#include "tree.h"
  6 +
  7 +bool caractere_stop(char c)
  8 +{
  9 + return(c==',' || c=='.' || c=='!' || c=='?'||c==':'|| c== 39);
  10 +}
  11 +
  12 +
  13 +void compare(cell *pliste1,char mot[],int *fautes){
  14 + cell *pliste;
  15 + int lettre,i=0;
  16 + bool fin_mot;
  17 + pliste = pliste1;
  18 +
  19 + if(pliste == NULL){
  20 + printf("\nL'arbre est vide\n");
  21 + return;//si l'arbre est vide, la comparaison s'arrête.
  22 + }
  23 +
  24 + while(mot[i]!='\0'){
  25 + lettre = mot[i];
  26 + while(pliste != NULL && pliste->lettre != lettre){//tant que la lettre n'est pas trouvée dans la liste correspondant à sont rang, on continue l'analyse dans la liste.
  27 + pliste=pliste->suivant;
  28 + }
  29 +
  30 + if(pliste == NULL){
  31 + printf("\nErreur : %s",mot);
  32 + (*fautes)++;//si la lettre n'est pas trouvée dans la liste, on affiche une erreur sur le mot analysé
  33 + break;
  34 + }
  35 +
  36 + fin_mot = pliste->fin_mot;
  37 + pliste = pliste->fils;
  38 + i++;
  39 +
  40 + }
  41 +
  42 + if(!fin_mot && (mot[i]=='\0')){
  43 + printf("\nErreur : %s",mot);//si le mot analysé est trop court par rapport aux mots correspondant dans le dictionnaire, on affiche une erreur.
  44 + (*fautes)++;
  45 + return;
  46 +
  47 + }
  48 +
  49 +}
  50 +
  51 +
  52 +
  53 +void lecture_mot(cell *pliste,FILE *fichier,int *fautes)
  54 +{
  55 + char mot[MAX];
  56 + int longueur;
  57 + while(1)
  58 + {
  59 + if(fscanf(fichier, "%s", mot)!=1)
  60 + break;
  61 + longueur=strlen(mot);
  62 + for(int i=0; i<longueur; i++)//récupération de chaque caractère d'un mot dans un tableau.
  63 + {
  64 + if(caractere_stop(mot[i]))
  65 + {
  66 + mot[i] = '\0';
  67 + break;
  68 + }
  69 + }
  70 + compare(pliste, mot,fautes);//comparaison du mot récupéré par rapport au dictionnaire
  71 + }
  72 +}
  73 +
... ...
conv-accents.sh deleted
... ... @@ -1,4 +0,0 @@
1   -if [ $# -ne 1 ]
2   -then echo "Usage: $0 /usr/share/dict/your_language (creates a local copy with accents converted)"
3   -else iconv -f utf8 -t ascii//TRANSLIT $1 > `basename $1`-no-accents
4   -fi
dico deleted
No preview for this file type
... ... @@ -2,52 +2,46 @@
2 2 #include <stdlib.h>
3 3 #include <stdbool.h>
4 4 #include <string.h>
  5 +#include "tree.h"
5 6  
6 7  
7   -typedef struct cell* ptarbre;
8   -typedef struct cell* ptcellule;
9 8  
10   -typedef struct cell {
11   - char lettre;
12   - ptarbre fils; // Descend d'un étage dans le mot (lettre suivante du mot)
13   - ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position)
14   - bool fin_mot;
15   -} cell;
16   -
17   -/* Pas utile
18   -void init_dico()
19   -{
20   - ptarbre arbre;
21   - arbre=NULL;
22   -}
23   -*/
24 9 ptarbre rech(ptarbre arbre, char lettre)
25   -// recherche une lettre en ième position (correspondant à arbre)
26   -// Retourne l'adresse de l'arbre contenant la lettre à cette position
  10 +// Fonction qui cherche une lettre passée en paramètre à partir d'une cellule à l'adresse arbre et qui retourne l'adresse d'une cellule, soit parce qu'il n'y a plus de cellules après, soit car c'est la cellule où se trouve la lettre passée en paramètre.
27 11 {
28 12 if (arbre!=NULL)
29 13 {
30   - printf("arbre lettre %c \n", arbre->lettre);
31 14 while ((arbre->suivant!=NULL) && (arbre->lettre != lettre))
32 15 {
33   - printf("lettre : %c lettre cherchee : %c adr arbre %p \n", arbre->lettre,lettre, arbre);
34 16 arbre=(arbre->suivant);
35 17 }
36 18 }
37 19 return arbre;
38 20 }
39   -void init_dico(ptarbre *parbre, char lettre)
  21 +
  22 +void init_dico(ptarbre* parbre, char lettre)
  23 +// Action qui initialise une cellule de type cell à l'adresse (*parbre) et qui ajoute à cette cellule la première lettre du texte, alloue de la mémoire pour le fils .
40 24 {
41 25 (*parbre)=malloc(sizeof(cell));
42 26 (*parbre)->fils=malloc(sizeof(cell));
  27 + (*parbre)->fils->lettre= '\0'; // Permet de savoir qu'il n'y a pas de lettre dans l'étage en dessous. Par exemple, si on est en train de construire le mot voir, avec 'v' et 'o' déjà dans l'arbre, arpès la lettre 'o' on met '\0' pour différencier s'il faut utiliser ajout tete ou ajout dico pour ajouter le 'i'.
  28 + (*parbre)->suivant=NULL;
  29 + (*parbre)->lettre=lettre;
  30 + (*parbre)->fin_mot=false;
  31 +}
  32 +
  33 +void ajout_dico_tete(ptarbre *parbre, char lettre)
  34 +// Action qui ajoute la première cellule d'un étage, utile pour le premier mot et pour les mots suivants qui sont plus longs que les précédents. Pour le premier mot 'voir', on utilise init_dico et pour les 3 autres lettres on utilise ajout_dico_tete. Ensuite, pour voile, on utilise ajout_dico pour 'v','o','i','l' et ajout_dico pour 'e'.
  35 +{
  36 + (*parbre)->fils=malloc(sizeof(cell));
43 37 (*parbre)->fils->suivant=NULL;
44 38 (*parbre)->suivant=NULL;
45 39 (*parbre)->lettre=lettre;
46 40 (*parbre)->fin_mot=false;
47   - printf("init dico\n");
48 41 }
49 42  
50 43 void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre)
  44 +// Action qui ajoute une lettre dans un étage existant, en faisant le lien entre la cellule d'avant à l'adresse *parbre et la nouvelle cellule à l'adresse *parbresuiv en ajoutant la lettre passée en paramètre à la nouvelle cellule.
51 45 {
52 46 *parbresuiv=malloc(sizeof(cell));
53 47 (*parbre)->suivant=*parbresuiv; // On relie la nouvelle lettre à l'avant dernière lettre
... ... @@ -56,11 +50,10 @@ void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre)
56 50 (*parbresuiv)->suivant=NULL;
57 51 (*parbresuiv)->fin_mot=false;
58 52 (*parbresuiv)->lettre=lettre;
59   - printf("ajout lettre : %c à %p \n",(*parbresuiv)->lettre, parbresuiv);
60 53 }
61 54  
62 55 void affiche_dico(ptarbre arbre, int n_lettre, char mot[])
63   -// affiche tout le dictionnaire à partir de l'arbre (donc le numéro de lettre) sélectionné
  56 +// Action qui affiche tout le dictionnaire à partir de arbre (donc le numéro de lettre) sélectionné en stockant le début du mot qui est commun à tous les suivants dans mot initialisé à vide et le numéro de la lettre dans n_lettre initialisé à 0.
64 57 {
65 58 if(arbre == NULL)
66 59 {
... ... @@ -70,27 +63,33 @@ void affiche_dico(ptarbre arbre, int n_lettre, char mot[])
70 63 {
71 64 if (arbre->fils != NULL)
72 65 {
73   - printf("%c",arbre->lettre);
74 66 mot[n_lettre]=arbre->lettre;
75 67 n_lettre++;
76   - affiche_dico(arbre->fils,n_lettre,mot);
77 68 }
78   - printf("\n");
  69 + if (arbre->fin_mot)
  70 + {
  71 + printf("%s",mot);
  72 + printf("\n");
  73 + }
  74 +
  75 + affiche_dico(arbre->fils,n_lettre,mot);
79 76 if (arbre->suivant != NULL)
80 77 {
81   - printf("%s",mot);
82   - affiche_dico(arbre->suivant, n_lettre, mot);
  78 + n_lettre--;
  79 + mot[n_lettre]='\0';
83 80 }
84   - mot[n_lettre]=0;
  81 + affiche_dico(arbre->suivant, n_lettre, mot);
85 82 n_lettre--;
  83 + mot[n_lettre]='\0';
86 84  
87   - }
  85 + }
88 86  
89 87 }
90 88  
91 89 void free_tree(cell **ptr_tree)
  90 +// Action qui libère la mémoire allouée pour stockée les données du dictionnaire *(*ptr_tree).
92 91 {
93   - if ((*ptr_tree)==NULL)
  92 + if ((*ptr_tree)==NULL)
94 93 printf("L'arbre est vide\n");
95 94 else
96 95 {
... ... @@ -102,82 +101,65 @@ void free_tree(cell **ptr_tree)
102 101 }
103 102 }
104 103  
105   -
106   -int main()
  104 +void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, FILE* fp)
  105 +// Action qui construit entièrement l'arbre, à partir du fichier fp, en partant de l'adresse parbre_originel qui correspond à la première cellule, parbre qui est la copie de l'arbre originel qui va nous permettre de nous balader entre les différentes lettres de chaque mot et de revenir à la première cellule à la fin de chaque mot.
107 106 {
108   - ptarbre arbre_originel,arbre,arbre_prec;
109   - arbre_originel=NULL;
110   - arbre=NULL;
111   - char c,t, mot[30];
112   - int n_lettre=0;
  107 + char c;
113 108 ptarbre rec;
114   - // Ouvrir fichier
115   - FILE *fp = fopen("words1.txt","r");
116   - if (fp==NULL)
117   - printf("words1 inaccessible \n",fp);
118   - else
119   - printf("words1 accessible \n",fp);
120   -
121   - while (fscanf(fp,"%c",&c)!= EOF) // lecture de tout le fichier
  109 + while (fscanf(fp,"%c",&c)!= EOF) // Lecture de tout le fichier fp.
122 110 {
123 111 if (c != '\n')
124 112 {
125   - if (arbre_originel==NULL) // Cas où c'est le premier mot
  113 + if ((*parbre_originel)==NULL) // Cas où c'est le premier mot et premiere lettre du dictionnaire.
126 114 {
127   - printf("arbre =NULL \n");
128   - init_dico(&arbre_originel,c);
129   - printf("lettre arbre :%c \n",arbre_originel->lettre);
130   - arbre_prec=arbre_originel;
131   - arbre=arbre_originel->fils;
132   - }
  115 + init_dico(parbre_originel,c);
  116 + (*parbre_prec)=(*parbre_originel); // On sauvegarde l'adresse de la lettre précédente.
  117 + (*parbre)=(*parbre_originel)->fils; // On passe à l'adresse de la cellule qui contiendra la prochaine lettre du même mot.
  118 + }
  119 + else if ((*parbre)==NULL) // Cas où c'est le premier mot de l'arbre mais pas la première lettre.
  120 + {
  121 + init_dico(parbre,c);
  122 + (*parbre_prec)=(*parbre);
  123 + (*parbre)=(*parbre)->fils;
  124 + }
133 125  
134   - else // Cas où le dico n'est pas vide
  126 + else // Cas où ce n'est pas le premier mot, il faut faire une recherche parmi les lettres de même indice (donc à l'étage '(*parbre)') déjà enregistrées dans l'arbre.
135 127 {
136   - printf("lettre arbre :%c \n",arbre->lettre);
137   - printf(" c: %c\n", c);
138   - rec=rech(arbre,c);
139   -
140   - if (rec->suivant==NULL && rec->lettre!=c)
  128 + rec=rech((*parbre),c);
  129 + if (rec->lettre!=c) // Cas où la lettre présente dans la cellule à l'adresse renvoyée par rech((*parbre),c) n'est pas la lettre recherchée.
141 130 {
142   -
143   - printf("rech suiv = NUll \n");
144   - ajout_dico(&(arbre),&(rec->suivant),c);
145   - // printf("ajout de : %c à %p et fils :%p\n", rec->lettre, rec, rec->fils);
146   - arbre_prec=arbre;
147   - arbre=rec->suivant->fils;
  131 +
  132 + if (rec==(*parbre) && rec->lettre=='\0') // Cas où il n'y a pas de lettres à l'indice *parbre donc la recherche renvoie l'adresse de la première cellule qui est vide.
  133 + {
  134 + ajout_dico_tete(parbre,c);
  135 + (*parbre_prec)=(*parbre);
  136 + (*parbre)=(*parbre)->fils;
  137 + }
  138 +
  139 + else if (rec->suivant==NULL && rec->lettre!='\0') // Cas où il y a qu'une lettre à l'indice *parbre donc la recherche renvoie l'adresse de la première cellule qui ne contient pas la lettre recherchée.
  140 + {
  141 + ajout_dico(&(rec),&(rec->suivant),c);
  142 + (*parbre_prec)=rec->suivant;
  143 + (*parbre)=rec->suivant->fils;
  144 + }
148 145 }
149   -
150 146  
151 147 else
152   - {// Cas où le début du mot existe déjà et qu'on le complète
153   - printf("rech suiv pas null rec lettre %c\n", rec->lettre);
154   - arbre_prec=arbre;
155   - arbre=rec->fils; // On va à l'étage d'après pour former le mot dans l'arbre
156   - //
  148 + {// Cas où la recherche renvoie l'adresse d'une cellule dont la lettre est la lettre recherchée donc le début du mot existe déjà et on le complète.
  149 + (*parbre_prec)=rec;
  150 + (*parbre)=rec->fils; // On va à l'étage d'après pour former le mot dans l'arbre.
  151 +
157 152 }
158 153  
159 154  
160 155 }
161 156 }
162   - else {
163   - printf("else\n");
164   - if (arbre_originel!=NULL)
  157 + else { // Cas où c==\n donc le mot est terminé, il faut retourner en haut de l'arbre pour ajouter le prochain mot.
  158 + if ((*parbre_originel)!=NULL)
165 159 {
166   - printf("%c \n", arbre_prec->lettre);
167   - arbre_prec->fin_mot=true; // Cette lettre est la dernière du mot
  160 + (*parbre_prec)->fin_mot=true; // Cette lettre est la dernière du mot.
168 161 }
169   -
170   - affiche_dico(arbre_originel,n_lettre,mot);
171   - printf("remise à 0\n");
172   - arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot
  162 + (*parbre)=(*parbre_originel); // On revient en haut de l'arbre pour commencer un nouveau mot.
173 163 }
174   - //arbre=arbre_originel;
175 164 }
176   - printf("arbre originel lettre %c \n", arbre_originel->fils->lettre);
177   - affiche_dico(arbre_originel,n_lettre,mot);
178   - free_tree(&arbre);
179   - fclose(fp);
180   -
181   -
182   - return 0;
183 165 }
... ...
dico.c~ deleted
... ... @@ -1,95 +0,0 @@
1   -#include <stdio.h>
2   -#include <stdlib.h>
3   -
4   -
5   -typedef struct cell* ptarbre;
6   -typedef struct cell* ptcellule;
7   -
8   -typedef struct cell {
9   - int lettre;
10   - ptarbre arbre; // Descend d'un étage dans le mot (lettre suivante du mot)
11   - ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position)
12   -} cell;
13   -
14   -/* Pas utile
15   -void init_dico()
16   -{
17   - ptarbre arbre;
18   - arbre=NULL;
19   -}
20   -*/
21   -ptarbre rech(ptarbre arbre, int lettre)
22   -// recherche une lettre en ième position (correspondant à arbre)
23   -// Retourne l'adresse de l'abre contenant la lettre à cette position
24   -{
25   - while((arbre!=NULL) && (arbre->lettre != lettre))
26   - arbre=arbre->suivant;
27   - return arbre;
28   -}
29   -void ajout_dico(ptarbre arbre, int lettre)
30   -{
31   - arbre=malloc(sizeof(cell));
32   - arbre->lettre=lettre;
33   - arbre->arbre=NULL;
34   - arbre->suivant=NULL;
35   -}
36   -
37   -void affiche_dico(ptarbre arbre)
38   -// affiche tout le dictionnaire à partir de l'arbre (donc le numéro de lettre) sélectionné
39   -{
40   -
41   -}
42   -
43   -
44   -int main()
45   -{
46   - ptarbre arbre_originel,arbre;
47   - arbre_originel=NULL;
48   - arbre_originel=malloc(sizeof(cell));
49   - arbre=malloc(sizeof(cell));
50   - arbre->lettre = 0;
51   - arbre->suivant = NULL;
52   - arbre->arbre = NULL;
53   - //arbre=arbre_originel;
54   - char c;
55   - // Ouvrir fichier
56   - FILE *fp = fopen("words1","r");
57   - if (fp==NULL)
58   - printf("words1 inaccessible ",fp);
59   - else
60   - printf("words1 accessible n",fp);
61   -
62   - while (fscanf(fp,"%d",&c)!= EOF) // lecture de tout le fichier
63   - {
64   - // while (fscanf(fp,"%d",&c)!='\n') // Tant que le mot n'est pas fini, on ajoute les lettres à la suite
65   - // {
66   - if (c != '\n') {
67   - printf("%d\n", c);
68   - if (rech(arbre,c)==NULL) // Cas où c'est un nouveau mot
69   - {
70   - ajout_dico(arbre,c);
71   - }
72   - else
73   - {
74   - while (rech(arbre,c)!=NULL) // Cas où le début du mot existe déjà et qu'on le complète
75   - {
76   -
77   - arbre=rech(arbre,c)->arbre; // On va à l'étage d'après pour former le mot dans l'arbre
78   - // affiche_dico(arbre);
79   - }
80   - // ajout_dico(arbre,c);
81   - // printf("%c",arbre->lettre);
82   - }
83   - }
84   - else {
85   - arbre=arbre_originel;
86   - }
87   - //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot
88   - }
89   -
90   -
91   - fclose(fp);
92   -
93   -
94   - return 0;
95   -}
img/exemple_trie.png deleted

41.7 KB

phrase_avec_fautes 0 → 100644
... ... @@ -0,0 +1 @@
  1 +Sandra and Bety ae sittinges in te park, Sandra asks Betty
... ...
phrase_type 0 → 100644
... ... @@ -0,0 +1 @@
  1 +Sandra and Betty are sitting in the park, Sandra asks Betty.
... ...
projet deleted
No preview for this file type
projet.c
1 1 #include <stdio.h>
2 2 #include <stdlib.h>
  3 +#include <string.h>
  4 +#include <stdbool.h>
  5 +#include "tree.h"
3 6  
4   -
5   -typedef struct cell* ptarbre;
6   -typedef struct cell* ptcellule;
7   -
8   -typedef struct cell {
9   - int lettre;
10   - ptarbre arbre;
11   - ptcellule suivant;
12   -} cell;
13   -
14   -/* Pas utile
15   -void init_dico()
16   -{
17   - ptarbre arbre;
18   - arbre=NULL;
19   -}
20   -*/
21   -ptarbre rech(ptarbre arbre, int lettre)
22   -{
23   - while((arbre!=NULL) && (arbre->lettre != lettre))
24   - arbre=arbre->suivant;
25   - return arbre;
26   -}
27   -void ajout_dico(ptarbre arbre, int lettre)
28   -{
29   - arbre=malloc(sizeof(cell));
30   - arbre->lettre=lettre;
31   - arbre->arbre=NULL;
32   - arbre->suivant=NULL;
33   -}
34   -
35   -void affiche_dico(ptarbre arbre)
36   -{
37   -
38   - printf("%c\n", arbre->lettre);
39   -}
  7 +int main(int argc, char* argv[]){
40 8  
41   -
42   -int main()
43   -{
44   - ptarbre arbre;
  9 + char mot[MAX]="";
  10 + int n_lettre=0, choix,faute = 0;
  11 + ptarbre arbre_originel,arbre,arbre_prec;
  12 + arbre_originel=NULL;
45 13 arbre=NULL;
46   - char c;
  14 +
47 15 // Ouvrir fichier
48   - FILE *fp = fopen("words","r");
49   - if (fp==NULL)
50   - printf("words inaccessible ",fp);
  16 + FILE *fichier_a_comparer = NULL;
  17 + fichier_a_comparer = fopen(argv[argc-1],"r");
  18 + if (fichier_a_comparer == NULL)
  19 + printf("\nNous ne pouvons pas ouvrir votre texte.\n");
51 20 else
52   - printf("words accessible n",fp);
53   -
54   - while (fscanf(fp,"%d",&c)!= EOF) // lecture de tout le fichier
55   - {
56   - while (c!='\n')
57   - {
58   - if (rech(arbre,c)==NULL)
59   - {
60   - ajout_dico(arbre,c);
61   - }
62   - arbre=arbre->arbre; // On va à l'étage d'après pour former le mot dans l'arbre
63   - affiche_dico(arbre);
64   - }
65   - }
66   -
67   -
68   -
  21 + printf("\nNous pouvons ouvrir votre texte.\n");
  22 + FILE *fichier_reference = fopen(argv[argc-2],"r");
  23 + if (fichier_reference==NULL)
  24 + printf("Dictionnaire inaccessible \n");
  25 + else
  26 + printf("\nLe dictionnaire est ouvert. \n");
  27 +
  28 + //création de l'arbre.
69 29  
  30 + cons_arbre(&arbre_originel, &arbre, &arbre_prec,fichier_reference);
  31 + printf("Voulez-vous afficher le dictionnaire ? 1 : oui, 2 : non\n");
  32 + scanf("%d",&choix);
  33 + if (choix==1)
  34 + affiche_dico(arbre_originel,n_lettre,mot);
  35 +
  36 + //comparaison des mots du texte à analyser par rapport aux mots du dictionnaire.
  37 +
  38 + lecture_mot(arbre_originel,fichier_a_comparer,&faute);
  39 + printf("\nIl y a une ou plusieurs erreurs sur %d mots\n",faute);
  40 + free_tree(&arbre);
  41 + fclose(fichier_reference);
  42 + fclose(fichier_a_comparer);
70 43  
71   - return 0;
  44 +return 0;
72 45 }
... ...
test deleted
tree.h 0 → 100644
... ... @@ -0,0 +1,38 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <stdbool.h>
  4 +#define MAX 26
  5 +
  6 +
  7 +typedef struct cell* ptarbre;
  8 +typedef struct cell* ptcellule;
  9 +
  10 +typedef struct cell {
  11 + char lettre;
  12 + ptarbre fils; // Descend d'un étage dans le mot (lettre suivante du mot)
  13 + ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position)
  14 + bool fin_mot;
  15 +} cell;
  16 +
  17 +
  18 +ptarbre rech(ptarbre arbre_ori, char lettre);
  19 +
  20 +void init_dico(ptarbre* parbre, char lettre);
  21 +
  22 +void ajout_dico_tete(ptarbre *parbre, char lettre);
  23 +
  24 +void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre);
  25 +
  26 +void affiche_dico(ptarbre arbre, int n_lettre, char mot[]);
  27 +
  28 +void free_tree(cell **ptr_tree);
  29 +
  30 +void print_suiv(ptarbre arbre);
  31 +
  32 +void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, FILE* fp);
  33 +
  34 +void compare(cell *pliste1,char *,int *fautes);
  35 +
  36 +void lecture_mot(cell *pliste,FILE *fichier,int *fautes);
  37 +
  38 +bool caractere_stop(char c);
... ...
words renamed to words-no-accents
... ... @@ -1050,8 +1050,8 @@ Astoria
1050 1050 Astrakhan
1051 1051 AstroTurf
1052 1052 Asturias
1053   -Asunción
1054   -Asunción's
  1053 +Asuncion
  1054 +Asuncion's
1055 1055 Aswan
1056 1056 Aswan's
1057 1057 At
... ... @@ -1062,8 +1062,8 @@ Atahualpa
1062 1062 Atalanta
1063 1063 Atari
1064 1064 Atari's
1065   -Atatürk
1066   -Atatürk's
  1065 +Ataturk
  1066 +Ataturk's
1067 1067 Athabasca
1068 1068 Athabasca's
1069 1069 Athabascan
... ... @@ -1444,7 +1444,7 @@ Bartholdi&#39;s
1444 1444 Bartholomew
1445 1445 Bartlett
1446 1446 Barton
1447   -Bartók
  1447 +Bartok
1448 1448 Baruch
1449 1449 Baryshnikov
1450 1450 Basel
... ... @@ -1937,8 +1937,8 @@ Boers
1937 1937 Boethius
1938 1938 Bogart
1939 1939 Bogart's
1940   -Bogotá
1941   -Bogotá's
  1940 +Bogota
  1941 +Bogota's
1942 1942 Bohemia
1943 1943 Bohemian
1944 1944 Bohemian's
... ... @@ -2065,8 +2065,8 @@ Boyd
2065 2065 Boyer
2066 2066 Boyer's
2067 2067 Boyle
2068   -Boötes
2069   -Boötes's
  2068 +Bootes
  2069 +Bootes's
2070 2070 Br
2071 2071 Br's
2072 2072 Brad
... ... @@ -2429,8 +2429,8 @@ Butler
2429 2429 Butterfingers
2430 2430 Butterfingers's
2431 2431 Buxtehude
2432   -Buñuel
2433   -Buñuel's
  2432 +Bunuel
  2433 +Bunuel's
2434 2434 Byblos
2435 2435 Byblos's
2436 2436 Byelorussia
... ... @@ -3428,7 +3428,7 @@ Conakry
3428 3428 Conakry's
3429 3429 Conan
3430 3430 Conan's
3431   -Concepción
  3431 +Concepcion
3432 3432 Concetta
3433 3433 Concetta's
3434 3434 Concord
... ... @@ -4480,7 +4480,7 @@ Dutchman&#39;s
4480 4480 Dutchmen
4481 4481 Duvalier
4482 4482 Dvina
4483   -Dvorák
  4483 +Dvorak
4484 4484 Dwayne
4485 4485 Dwayne's
4486 4486 Dwight
... ... @@ -4494,9 +4494,9 @@ Dyson&#39;s
4494 4494 Dzerzhinsky
4495 4495 Dzerzhinsky's
4496 4496 Dzungaria
4497   -Dürer
4498   -Düsseldorf
4499   -Düsseldorf's
  4497 +Durer
  4498 +Dusseldorf
  4499 +Dusseldorf's
4500 4500 E
4501 4501 E's
4502 4502 ECG's
... ... @@ -4749,8 +4749,8 @@ Elysian
4749 4749 Elysium
4750 4750 Elysium's
4751 4751 Elysiums
4752   -Elysée
4753   -Elysée's
  4752 +Elysee
  4753 +Elysee's
4754 4754 Emacs
4755 4755 Emacs's
4756 4756 Emanuel
... ... @@ -4941,8 +4941,8 @@ Estelle
4941 4941 Estelle's
4942 4942 Ester
4943 4943 Ester's
4944   -Esterházy
4945   -Esterházy's
  4944 +Esterhazy
  4945 +Esterhazy's
4946 4946 Estes
4947 4947 Esther
4948 4948 Esther's
... ... @@ -5085,7 +5085,7 @@ FM&#39;s
5085 5085 FNMA
5086 5086 FNMA's
5087 5087 FORTRAN's
5088   -Fabergé
  5088 +Faberge
5089 5089 Fabian
5090 5090 Fabian's
5091 5091 Facebook
... ... @@ -5505,8 +5505,8 @@ Fulton
5505 5505 Fulton's
5506 5506 Funafuti
5507 5507 Fundy
5508   -Furtwängler
5509   -Furtwängler's
  5508 +Furtwangler
  5509 +Furtwangler's
5510 5510 Fushun
5511 5511 Fuzhou
5512 5512 Fuzhou's
... ... @@ -5767,7 +5767,7 @@ Gethsemane
5767 5767 Getty
5768 5768 Gettysburg
5769 5769 Gettysburg's
5770   -Gewürztraminer
  5770 +Gewurztraminer
5771 5771 Ghana
5772 5772 Ghana's
5773 5773 Ghanaian
... ... @@ -6099,10 +6099,10 @@ Grundy
6099 6099 Grus
6100 6100 Grus's
6101 6101 Gruyeres
6102   -Gruyère
6103   -Gruyère's
6104   -Grünewald
6105   -Grünewald's
  6102 +Gruyere
  6103 +Gruyere's
  6104 +Grunewald
  6105 +Grunewald's
6106 6106 Guadalajara
6107 6107 Guadalajara's
6108 6108 Guadalcanal
... ... @@ -6206,10 +6206,10 @@ Gwyn&#39;s
6206 6206 Gypsies
6207 6207 Gypsy
6208 6208 Gypsy's
6209   -Gödel
6210   -Gödel's
6211   -Göteborg
6212   -Göteborg's
  6209 +Godel
  6210 +Godel's
  6211 +Goteborg
  6212 +Goteborg's
6213 6213 H
6214 6214 H's
6215 6215 HF's
... ... @@ -6946,8 +6946,8 @@ Hyundai
6946 6946 Hyundai's
6947 6947 Hz
6948 6948 Hz's
6949   -Héloise
6950   -Héloise's
  6949 +Heloise
  6950 +Heloise's
6951 6951 I
6952 6952 I'd
6953 6953 I'll
... ... @@ -8311,8 +8311,8 @@ Kyoto&#39;s
8311 8311 Kyrgyzstan
8312 8312 Kyushu
8313 8313 Kyushu's
8314   -Köln
8315   -Köln's
  8314 +Koln
  8315 +Koln's
8316 8316 L
8317 8317 L'Amour
8318 8318 L'Oreal
... ... @@ -9057,8 +9057,8 @@ Lula&#39;s
9057 9057 Lully
9058 9058 Lulu
9059 9059 Lulu's
9060   -Lumière
9061   -Lumière's
  9060 +Lumiere
  9061 +Lumiere's
9062 9062 Luna
9063 9063 Luna's
9064 9064 Lupe
... ... @@ -9343,7 +9343,7 @@ Malibu&#39;s
9343 9343 Malinda
9344 9344 Malinda's
9345 9345 Malinowski
9346   -Mallarmé
  9346 +Mallarme
9347 9347 Mallomars
9348 9348 Mallomars's
9349 9349 Mallory
... ... @@ -10649,8 +10649,8 @@ Myrtle&#39;s
10649 10649 Mysore
10650 10650 Myst
10651 10651 Myst's
10652   -Münchhausen
10653   -Münchhausen's
  10652 +Munchhausen
  10653 +Munchhausen's
10654 10654 N
10655 10655 N's
10656 10656 NASA's
... ... @@ -11600,8 +11600,8 @@ Paramaribo
11600 11600 Paramaribo's
11601 11601 Paramount
11602 11602 Paramount's
11603   -Paraná
11604   -Paraná's
  11603 +Parana
  11604 +Parana's
11605 11605 Parcheesi
11606 11606 Parcheesi's
11607 11607 Pareto
... ... @@ -12041,8 +12041,8 @@ Podunk
12041 12041 Poe
12042 12042 Pogo
12043 12043 Pogo's
12044   -Poincaré
12045   -Poincaré's
  12044 +Poincare
  12045 +Poincare's
12046 12046 Poiret
12047 12047 Poiret's
12048 12048 Poirot
... ... @@ -12051,8 +12051,8 @@ Poisson
12051 12051 Poisson's
12052 12052 Poitier
12053 12053 Poitier's
12054   -Pokémon
12055   -Pokémon's
  12054 +Pokemon
  12055 +Pokemon's
12056 12056 Poland
12057 12057 Poland's
12058 12058 Polanski
... ... @@ -12250,8 +12250,8 @@ Proust&#39;s
12250 12250 Provencals
12251 12251 Provence
12252 12252 Provence's
12253   -Provençal
12254   -Provençal's
  12253 +Provencal
  12254 +Provencal's
12255 12255 Proverbs
12256 12256 Providence
12257 12257 Providence's
... ... @@ -12362,10 +12362,10 @@ Pythagorean
12362 12362 Pythias
12363 12363 Python
12364 12364 Python's
12365   -Pétain
12366   -Pétain's
12367   -Pôrto
12368   -Pôrto's
  12365 +Petain
  12366 +Petain's
  12367 +Porto
  12368 +Porto's
12369 12369 Q
12370 12370 Qaddafi
12371 12371 Qaddafi's
... ... @@ -12422,7 +12422,7 @@ Quixotism
12422 12422 Quixotism's
12423 12423 Qumran
12424 12424 Quonset
12425   -Québecois
  12425 +Quebecois
12426 12426 R
12427 12427 R's
12428 12428 RAF's
... ... @@ -12461,8 +12461,8 @@ Rafael
12461 12461 Rafael's
12462 12462 Raffles
12463 12463 Raffles's
12464   -Ragnarök
12465   -Ragnarök's
  12464 +Ragnarok
  12465 +Ragnarok's
12466 12466 Rainier
12467 12467 Raleigh
12468 12468 Raleigh's
... ... @@ -13429,8 +13429,8 @@ Schrieffer
13429 13429 Schrieffer's
13430 13430 Schroeder
13431 13431 Schroeder's
13432   -Schrödinger
13433   -Schrödinger's