Blame view

projetfinalaccent2.c 7.31 KB
d75f444a   pvernier   ajout de la desal...
1
2
3
4
5
  #include <stdio.h>

  #include <stdlib.h>

  #include <wchar.h>

  #include <locale.h>

  

c21ed069   tvieuble   correction projet...
6
  #define A 256

d75f444a   pvernier   ajout de la desal...
7
8
9
10
11
12
13
14
15
16
17
  

  struct node {

    wchar_t lettre;

    struct cell* listeFils;

  };

  

  struct cell {

    struct node* arbre;

    struct cell* arbreSuivant;

  };

  

d75f444a   pvernier   ajout de la desal...
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  void ajout_tete(wchar_t elem, struct cell** pL) {

    struct cell* p;

    p = malloc(sizeof(struct cell));

    p->arbre = malloc(sizeof(struct node));

    p->arbre->listeFils = NULL;

    p->arbre->lettre = elem;

    p->arbreSuivant = *pL;

    *pL = p;

  }

  

  struct cell ** insertion(wchar_t elem, struct cell** pL) {

  	if(((*pL) == NULL) || ((*pL)->arbre->lettre > elem)) {

  		ajout_tete(elem, pL);

  		return &(*pL)->arbre->listeFils;

  	}

  	else if((*pL)->arbre->lettre == elem) {

  		return &(*pL)->arbre->listeFils;

  	}

  	else {

  		return insertion(elem, &(*pL)->arbreSuivant);

  	}

  }

  

e2bf24c0   tvieuble   push
41
42
  void initialisation_tab_arbre(struct node tab[]) {

    int i = 0;

c21ed069   tvieuble   correction projet...
43
    for(wchar_t u = 'a'; u < A; u++) {

e2bf24c0   tvieuble   push
44
45
46
47
      tab[i].lettre = u; //ajout lettres minuscules

      tab[i].listeFils = NULL;

      i++;

    }

c21ed069   tvieuble   correction projet...
48
49
    tab[i].lettre = '?';

    tab[i+1].lettre = '!';

4c1aa780   tvieuble   projetfinalaccent2.c
50
    tab[i+2].lettre = '\'';

c21ed069   tvieuble   correction projet...
51
52
53
    for(int j = 0; j <= 2; j++) {   //Ajout des caractères de ponctuation par défaut

      tab[i+j].listeFils = NULL;

      insertion('\0', &(tab[i+j].listeFils));

e2bf24c0   tvieuble   push
54
55
56
    }

  }

  

d75f444a   pvernier   ajout de la desal...
57
58
  int indice_lettre(struct node tab_arbre_prcp[], wchar_t lettre)

  {

4c1aa780   tvieuble   projetfinalaccent2.c
59
60
    int i = 0;

    while(i >= 0 && i < A){  

d75f444a   pvernier   ajout de la desal...
61
62
63
64
65
     if(lettre == tab_arbre_prcp[i].lettre ){

       return i;

     }  

     i++;

    }

4c1aa780   tvieuble   projetfinalaccent2.c
66
  return -1;

d75f444a   pvernier   ajout de la desal...
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  }

  

  void remplir_dico(FILE* fd, struct node tab_arbre_prcp[]) {

  

    struct cell** localisationArbre = NULL; 

    int cptmot = 0, indice = 0;

    wchar_t motLu[50];

    while(fwscanf(fd, L"%ls", motLu)==1) {

    	//wprintf(L"mot lu : %ls\n", motLu);

    	int estUneLettre = 1;

  	int i = 0;

      cptmot += 1;

       if((motLu[0] >= 'A') && (motLu[0] <= 'Z')) {

         localisationArbre = &tab_arbre_prcp[motLu[0]-65].listeFils;

       }

       else if((motLu[0] >= 'a') && (motLu[0] <= 'z')) {

         localisationArbre = &tab_arbre_prcp[motLu[0]-97].listeFils;

       }

ee3fc0eb   tvieuble   Ajout caractères ...
85
       else if((motLu[0] < 'A') || (motLu[0] > 'z')) {

d75f444a   pvernier   ajout de la desal...
86
87
         indice = indice_lettre(tab_arbre_prcp, motLu[0]);

         localisationArbre = &tab_arbre_prcp[indice].listeFils;

4c1aa780   tvieuble   projetfinalaccent2.c
88
         if(indice == -1) {

d75f444a   pvernier   ajout de la desal...
89
90
91
92
93
94
95
96
97
98
99
100
  	 wprintf(L"Erreur remplissage dico : L'un des caracteres n'est pas une lettre\n");

  	 wprintf(L"Mot : %ls incorrect\n", motLu);

  	 estUneLettre = 0;

         }

       }

       else {

         wprintf(L"Erreur remplissage dico : L'un des caracteres n'est pas une lettre\n");

         wprintf(L"Mot : %ls incorrect\n", motLu);

         estUneLettre = 0;

       }

       while((motLu[i] != '\0') && (estUneLettre == 1)) {

    	i += 1;

d75f444a   pvernier   ajout de la desal...
101
102
103
104
105
106
107
108
  	localisationArbre = insertion(motLu[i], localisationArbre);

       }

     }

  	wprintf(L"\n");

  	fclose(fd);

    	wprintf(L"%d mots inseres dans le dictionnaire.\n", cptmot);

  }

  

ee3fc0eb   tvieuble   Ajout caractères ...
109
  struct cell ** test_mot(wchar_t mot, struct cell** localisation, int* verif) {

d75f444a   pvernier   ajout de la desal...
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
  

    if((*localisation == NULL) || (*localisation)->arbre->lettre > mot) {

      *verif = 0;

      return NULL;

    }

    if((*localisation)->arbre->lettre == mot) {

      return &(*localisation)->arbre->listeFils;

    }

    else {

      return test_mot(mot, &(*localisation)->arbreSuivant, verif);

    }

  }

  

  void correction_txt(FILE* fd, struct node tab_arbre_prcp[]) {

    struct cell** localisationArbre = NULL;

    int verif;

ee3fc0eb   tvieuble   Ajout caractères ...
126
    int indice = 0, cptfaute = 0;

d75f444a   pvernier   ajout de la desal...
127
128
129
130
131
132
133
134
135
136
    wchar_t motLu[50];

    while(fwscanf(fd, L"%ls", motLu)==1) {

        verif = 1;

        int i = 0;

        if((motLu[0] >= 'A') && (motLu[0] <= 'Z')) {

          localisationArbre = &tab_arbre_prcp[motLu[0]-65].listeFils;

        }

        else if((motLu[0] >= 'a') && (motLu[0] <= 'z')) {

          localisationArbre = &tab_arbre_prcp[motLu[0]-97].listeFils;

        }

ee3fc0eb   tvieuble   Ajout caractères ...
137
138
        else if((motLu[0] < 'A') || (motLu[0] > 'z')) {

         printf("jsuisla\n");

d75f444a   pvernier   ajout de la desal...
139
140
         indice = indice_lettre(tab_arbre_prcp, motLu[0]);

         localisationArbre = &tab_arbre_prcp[indice].listeFils;

4c1aa780   tvieuble   projetfinalaccent2.c
141
         if(indice == -1) {

ee3fc0eb   tvieuble   Ajout caractères ...
142
  		wprintf(L"Erreur correction txt : L'un des caracteres n'est pas une lettre\n");

d75f444a   pvernier   ajout de la desal...
143
144
145
146
147
148
149
150
151
          verif = 0;

         }

        }

        else {

          wprintf(L"Erreur correction txt : L'un des caracteres n'est pas une lettre\n");

          verif = 0;

        }

        while((verif == 1) && (motLu[i] != '\0')) {

          i += 1;

ee3fc0eb   tvieuble   Ajout caractères ...
152
          if((motLu[i] == '.') || (motLu[i] == ',') || (motLu[i] == ';') || (motLu[i] == ':') || (motLu[i] == '!') || (motLu[i] == '?')) motLu[i] = '\0';		//prendre en compte les fins de phrase

d75f444a   pvernier   ajout de la desal...
153
154
          localisationArbre = test_mot(motLu[i], localisationArbre, &verif);

        }

ee3fc0eb   tvieuble   Ajout caractères ...
155
156
157
158
        if(verif == 0) {

        	wprintf(L"Mot %ls non present dans le dicitonnaire.\n", motLu);

        	cptfaute += 1;

        }

d75f444a   pvernier   ajout de la desal...
159
      }

ee3fc0eb   tvieuble   Ajout caractères ...
160
      printf("Le texte comporte %d faute(s)\n", cptfaute);

d75f444a   pvernier   ajout de la desal...
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
      fclose(fd);

  } 

  

  void correction_mot(struct node tab_arbre_prcp[]) {

    struct cell** localisationArbre = NULL;

    int verif;

    int indice = 0;

    wchar_t motLu[50];

    wprintf(L"Entrez un mot ou une phrase a corriger : \n(0 pour quitter)\n");

    while(wscanf(L"%ls", motLu)==1) {

        if(motLu[0]=='0') return;

        verif = 1;

        int i = 0;

        if((motLu[0] >= 'A') && (motLu[0] <= 'Z')) {

          localisationArbre = &tab_arbre_prcp[motLu[0]-65].listeFils;

        }

        else if((motLu[0] >= 'a') && (motLu[0] <= 'z')) {

          localisationArbre = &tab_arbre_prcp[motLu[0]-97].listeFils;

        }

ee3fc0eb   tvieuble   Ajout caractères ...
180
        else if((motLu[0] < 'A') || (motLu[0] > 'z')) {

d75f444a   pvernier   ajout de la desal...
181
182
         indice = indice_lettre(tab_arbre_prcp, motLu[0]);

         localisationArbre = &tab_arbre_prcp[indice].listeFils;

4c1aa780   tvieuble   projetfinalaccent2.c
183
         if(indice == -1) {

e2bf24c0   tvieuble   push
184
  		wprintf(L"Erreur correction mot : L'un des caracteres n'est pas une lettre\n");

d75f444a   pvernier   ajout de la desal...
185
186
187
188
189
190
191
192
193
          verif = 0;

         }

        }

        else {

          wprintf(L"Erreur correction mot : L'un des caracteres n'est pas une lettre\n");

          verif = 0;

        }

        while((verif == 1) && (motLu[i] != '\0')) {

          i += 1;

ee3fc0eb   tvieuble   Ajout caractères ...
194
          if((motLu[i] == '.') || (motLu[i] == ',') || (motLu[i] == ';') || (motLu[i] == ':') || (motLu[i] == '!') || (motLu[i] == '?')) motLu[i] = '\0';

d75f444a   pvernier   ajout de la desal...
195
196
197
          wprintf(L"lettre lue %d\n", motLu[i]);

          localisationArbre = test_mot(motLu[i], localisationArbre, &verif);

        }

ee3fc0eb   tvieuble   Ajout caractères ...
198
199
200
        if(verif == 0) {

        	wprintf(L"Mot : %ls non present dans le dicitonnaire.\n", motLu);

        }

d75f444a   pvernier   ajout de la desal...
201
202
203
204
        else wprintf(L"Mot : %ls correct\n", motLu);

      }

  } 

  

d75f444a   pvernier   ajout de la desal...
205
206
  void desalocationArbre(struct cell** pL) {

    

c21ed069   tvieuble   correction projet...
207
208
    if ((*pL) == NULL) return;

  

d75f444a   pvernier   ajout de la desal...
209
210
    desalocationArbre(&(*pL)-> arbreSuivant);

    desalocationArbre(&(*pL)-> arbre -> listeFils);

d75f444a   pvernier   ajout de la desal...
211
212
213
214
215
216
217
    free((*pL) -> arbre);

    free(*pL);  

  }

  

  void desalocationTableauArbre(struct node tab_arbre[]){

    int i = 0;

    for(wchar_t u = 'a'; u < A; u++) {

ee3fc0eb   tvieuble   Ajout caractères ...
218
      desalocationArbre(&tab_arbre[i].listeFils);

d75f444a   pvernier   ajout de la desal...
219
220
221
222
223
224
225
226
227
228
229
      i++;

    }

  }

  

  int main(int argc, char* argv[]) {

  

   

    setlocale(LC_ALL, "");

    FILE* dico = NULL;

    FILE* txt = NULL;

    struct node tab_arbre[A];

d75f444a   pvernier   ajout de la desal...
230
231
232
233
234
235
236
237
238
239
240
241
242
243
    

    if(argc>2) {

      dico = fopen(argv[1], "r");

      txt = fopen(argv[2], "r");

    }

    else {

      dico = NULL;

      txt = NULL;

    }

    if ((dico == NULL) || (txt == NULL)) {

          wprintf(L"Erreur : il manque un ou plusieurs fichiers !\n");

          return 1;

      }

    initialisation_tab_arbre(tab_arbre);

c21ed069   tvieuble   correction projet...
244
245
    remplir_dico(dico, tab_arbre);

    //for(int i = 0; i < A; i++) wprintf(L"%lc\n", tab_arbre[i].lettre);

d75f444a   pvernier   ajout de la desal...
246
247
248
249
    correction_txt(txt, tab_arbre);

    correction_mot(tab_arbre);

    desalocationTableauArbre(tab_arbre); 

  

e2bf24c0   tvieuble   push
250
    printf("fini\n");

d75f444a   pvernier   ajout de la desal...
251
252
253
  

    return 0;

  }