Commit fb520d8f50ec47df06a6667428f89b51d579dd10

Authored by bjeanlou
1 parent b2638a8a

v1 ended

README.md
1   -# Programmation Avancée
  1 +# Correcteur Orthographique
2 2  
  3 +
  4 +## mode d'emploi
  5 +- Compilez les fichiers (un make suffira).
  6 +- Lancez le programme (./dico.exec).
  7 +- Suivez les instructions et charger un dictionnaire.
  8 +- Choisissez ce que vous voulez faire parmi les propositions du menu.
  9 +![](img/Menu.png)
  10 +
  11 +## Description
  12 +- Lire le dictionnaire permet de faire afficher le contenu du dictionnaire.
  13 +- Lorsque que voulez tester l'orthographe vous pouvez au préalable choisir/créer un fichier de sortie en choisissant le 6), puis faire votre test en choisissant le 5).
  14 +
  15 +
  16 +
  17 +#cahier des charges
3 18 > Réalisation d’un correcteur orthographique
4 19  
5 20 ## Objectif
... ...
... ... @@ -17,16 +17,17 @@ byte addto_dico(dico d,const string word){
17 17 byte isIn=0, endKind=0;
18 18 endKind=end_kind(word);
19 19 if(!is_word(endKind)){
20   - printf("%s is incorrect\n",word);
21 20 return -1;
22 21 }
23 22 tree*tmp=&d[hash(word[0])],*temp=tmp;
  23 +
24 24 //1st, let's go through the tree, until the word is not in tree
25 25 for(i=0; word[i]!='\0' && word[i]!='\'' && !is_empty(*tmp) ;i++){
26 26 temp=tmp;
27 27 if(isalpha(word[i+1]))
28 28 tmp=&((*tmp)->next[hash(word[i+1])]);
29 29 }
  30 +
30 31 //if word is not ended at the end of the tree
31 32 if(is_empty(*tmp)){
32 33 isIn=0;
... ... @@ -37,15 +38,12 @@ byte addto_dico(dico d,const string word){
37 38 tmp=&((*tmp)->next[hash(word[i+1])]);
38 39 }
39 40 (*temp)->isEnd = endKind;
40   - printf("%s added\n",word);
41   - fflush(stdout);
42 41 }
  42 +
43 43 //if word is ended
44 44 else{
45 45 isIn=endKind & (*temp)->isEnd;
46 46 (*temp)->isEnd = endKind | (*temp)->isEnd;
47   - printf("%s %s in\n",word,(isIn!=0)?("allready"):("not yet"));
48   - fflush(stdout);
49 47 }
50 48 return isIn;
51 49 }
... ... @@ -62,7 +60,7 @@ void loadfrom_file(dico d,FILE*stream){
62 60 return;
63 61 }
64 62 char word[30]={0};
65   - while(fscanf(stream,"%30s",word)!=EOF){
  63 + while(fscanf(stream,"%30s",word)==1){
66 64 addto_dico(d,word);
67 65 }
68 66 printf("load success\n");
... ... @@ -161,6 +159,12 @@ void test_words(dico d,FILE*inStream,FILE*outStream){
161 159 char word[30]={0};
162 160 byte isIn=0,someWrong=0;
163 161 while(fscanf(inStream,"%30s",word)!=EOF){
  162 + /*//get rid of punctuation marks
  163 + isIn=0;
  164 + while(ischar_of_word(word[(int)isIn]))
  165 + isIn++;
  166 + word[(int)isIn]='\0';
  167 + */
164 168 isIn=is_in(d,word);
165 169 if(isIn<1){
166 170 if(someWrong==0){
... ... @@ -176,8 +180,22 @@ void test_words(dico d,FILE*inStream,FILE*outStream){
176 180 }
177 181 }
178 182 }
179   - //ajout des mots absent?
180   - if(is_emptyLIFO(absWords))return;
  183 + //fermer outStream pour permettre à l'utilisateur de lire le compte rendu des tests
  184 + if(outStream!=stdout)
  185 + fclose(outStream);
  186 + outStream=stdout;
  187 +
  188 + //aucun mot ne peut être ajouté au dictionnaire ?
  189 + if(is_emptyLIFO(absWords)){
  190 + if(someWrong)
  191 + printf("Parmi les mots absents du dictionnaire, aucun ne peut être ajouté au dictionnaire.\n");
  192 + else
  193 + printf("Felicitations !!!\nAucun des mots que vous avez entre n'est absents du dictionnaire.\n");
  194 + return;
  195 + }
  196 +
  197 +
  198 + //ajout des mots absent?
181 199 printf("Voulez-vous ajouter certains de ces mots au dictionnaire?\n(1 for yes,0 for no)\n");
182 200 someWrong=saisie(0,1);
183 201  
... ...
... ... @@ -19,6 +19,7 @@ void printto_terminal(dico);
19 19 void print(tree,FILE*,string);
20 20  
21 21 void strupper(string str);
  22 +//uppers all letters in str
22 23  
23 24 byte is_in(dico,string);
24 25 void test_words(dico,FILE*inStream,FILE*outStream);
... ...
img/Menu.png 0 → 100644

22.9 KB

img/rapportDico.pdf 0 → 100644
No preview for this file type
... ... @@ -34,51 +34,74 @@ FILE* getFile(string mode){
34 34  
35 35  
36 36  
37   -
38   -
39   -void menu(dico monDico){
  37 +int main(void){
40 38 int choice=0;
41   - char word[2]={0};
  39 + printf("Bienvenue dans le dictonnaire !\n\n");
  40 + dico monDico;
  41 + make_empty_dico(monDico);
  42 +
42 43 //initialisation
43 44 printf("Pour commencer, veuillez charger un dictionnaire.\n");
44 45 FILE*fileIn=getFile("r"),*fileOut=stdout;
45 46 if(fileIn==stdin)
46 47 printf("Entrez vos mots (ctrl-D pour terminer le chargement):\n");
47 48 loadfrom_file(monDico,fileIn);
48   - fclose(fileIn);
  49 + if(fileIn!=stdin)
  50 + fclose(fileIn);
  51 +
49 52  
  53 +
50 54 //boucle
51 55 while(1){
  56 +
52 57 clear();
53 58 //menu
54 59 printf("La sortie est branchee sur %s.\n",fileOut==stdout?"le terminal":"un fichier");
55 60 printf("Que voulez-vous faire ?\n");
  61 +
56 62 //end programme
57 63 printf("0) Fermer le programme.\n\n");
  64 +
58 65 //just about the dictionnary
59 66 printf("1) Lire le dictionnaire.\n");
60 67 printf("2) Rajouter des mots au dictionnaire\n");
61 68 printf("3) Effacer le dictionnaire\n");
62 69 printf("4) Remplacer le dictionnaire actuel par un autre dictionnaire\n\n");
  70 +
63 71 //word correction
64 72 printf("5) Tester si un mot, un ensemble de mot, une phrase ou un paragraphe appartient au dictionnaire.\n\n");
  73 +
65 74 //out stream
66 75 printf("6) Définir un fichier de sortie.\n");
67 76 printf("7) Définir la sortie sur le terminal.\n");
68 77  
  78 +
  79 +
  80 +
69 81 //saisie du choix
70   - scanf("%2s",word);
71   - choice=ctoi(*word);
  82 + choice=getchar();
  83 + choice=ctoi(choice);
  84 +
  85 +
  86 +
72 87  
73 88 switch(choice){
  89 +
74 90 case 0: {//sortie du programme
75 91 if(fileOut!=stdout)
76 92 fclose(fileOut);
77   - return;}
  93 + fileOut=stdout;
  94 + delete_dico(monDico);
  95 + printf("Le dictionnaire vous dit aurevoir.\n\n\n");
  96 + return EXIT_SUCCESS;
  97 + }
  98 +
  99 +
78 100 case 1: {//Lire le dictionnaire
79 101 printto_file(monDico,fileOut);
80 102 printf("dictionnaire imprimme\n");
81 103 break;}
  104 +
82 105  
83 106 //manip sur le dictionnaire
84 107 case 2: {//ajout
... ... @@ -88,6 +111,7 @@ void menu(dico monDico){
88 111 loadfrom_file(monDico,fileIn);
89 112 if(fileIn!=stdin)
90 113 fclose(fileIn);
  114 + fileIn=stdin;
91 115 break;}
92 116 case 3: {//effacer
93 117 delete_dico(monDico);
... ... @@ -95,11 +119,14 @@ void menu(dico monDico){
95 119 break;}
96 120 case 4: {//remplacer
97 121 delete_dico(monDico);
  122 + printf("Le dictionnaire est maintenant vide.\n");
98 123 fileIn=getFile("r");
99 124 loadfrom_file(monDico,fileIn);
100 125 if(fileIn!=stdin)
101 126 fclose(fileIn);
  127 + fileIn=stdin;
102 128 break;}
  129 +
103 130  
104 131  
105 132 case 5: {//faire des tests
... ... @@ -109,34 +136,32 @@ void menu(dico monDico){
109 136 test_words(monDico,fileIn,fileOut);
110 137 if(fileIn!=stdin)
111 138 fclose(fileIn);
  139 + fileIn=stdin;
112 140 break;}
  141 +
  142 +
113 143  
114 144 //définir la sortie des tests et de "Lire" le dictionnaire
115 145 case 6: {
116 146 if(fileOut!=stdout)
117 147 fclose(fileOut);
118   - fileOut=getFile("w");
  148 + fileOut=getFile("a");
119 149 break;}
120 150 case 7: {
121 151 if(fileOut!=stdout)
122 152 fclose(fileOut);
123 153 fileOut=stdout;
124 154 break;}
  155 +
  156 +
  157 +
125 158 //si le choix n'est pas parmi les précédents
126 159 default: {break;}
127 160 }
128   - choice=0;
  161 +
  162 +
  163 + //protection, si le scanf pour le choix a un problème
  164 + choice=-1;
129 165 pause();
130 166 }//end of while
131   -}
132   -
133   -
134   -int main(void){
135   - printf("Bienvenue dans le dictonnaire !\n\n");
136   - dico monDico;
137   - make_empty_dico(monDico);
138   - menu(monDico);
139   - delete_dico(monDico);
140   - printf("Le dictionnaire vous dit aurevoir.\n\n\n");
141   - return EXIT_SUCCESS;
142 167 }
... ...
rapportDico.odt
No preview for this file type
... ... @@ -29,10 +29,6 @@ void delete_tree(tree *t){
29 29 *t=NULL;
30 30 }
31 31  
32   -
33   -
34   -
35   -
36 32 //Casual functions
37 33 bool is_empty(const tree t){
38 34 return t==NULL;
... ... @@ -57,9 +53,10 @@ bool is_acronyme_end(const tree t){return (t-&gt;isEnd &amp; ACRONYME_END);}
57 53  
58 54  
59 55  
60   -//needs to check c wether isalpha
61   -int hash(char c){return c%32-1;}
62   -bool ischar_of_word(char c){return isalpha(c) || c=='\'';}
  56 +//functions not directly related to the structure
  57 +int hash(char c){return c%32-1;}//needs to check c wether isalpha
  58 +bool ischar_of_word(char c){return (c=='\'' || isalpha(c));}
  59 +bool is_word(const byte endKind){return endKind!=NOT_AN_END;}
63 60  
64 61 byte end_kind(const string s){
65 62 byte endKind=NOT_AN_END;
... ... @@ -96,6 +93,3 @@ byte end_kind(const string s){
96 93 }
97 94 return NOT_AN_END;
98 95 }
99   -bool is_word(const byte endKind){
100   - return endKind!=0;
101   -}
... ...
... ... @@ -36,6 +36,8 @@ void delete_tree(tree*);//free(tree) and delete tree on all t-&gt;next
36 36 bool is_empty(const tree);//==NULL
37 37 bool is_followed(const tree);//if true tree has following letters
38 38  
  39 +
  40 +//endKind functions
39 41 bool is_end(const tree);//true when at least 1 of the following functions is true
40 42 bool is_straight_end(const tree);//if true word can end here
41 43 bool ends_with_apostrophe(const tree);//if true word can end here with apostrophe
... ... @@ -43,6 +45,8 @@ bool is_common_end(const tree);//if true all letters are lower
43 45 bool is_proper_end(const tree);//if true 1st letter is upper
44 46 bool is_acronyme_end(const tree);//if true all letters are upper
45 47  
  48 +
  49 +//other
46 50 int hash(char);//need to check if isalpha
47 51 bool ischar_of_word(char);//tells if char can be in a word
48 52 bool is_word(byte endKind);//pass end_kind() as parameter
... ...