Blame view

correcteur.c 3.44 KB
7197538b   mclaudel   Projet modifié
1
2
3
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdbool.h>
5a0b8312   mclaudel   Algorithme amélio...
4
  #include <string.h>
7197538b   mclaudel   Projet modifié
5
  
5a0b8312   mclaudel   Algorithme amélio...
6
  #define MAX_LETTRES 30
efd96bef   mclaudel   Projet modifié
7
  #define size 255
7197538b   mclaudel   Projet modifié
8
9
10
  
  
  typedef struct node {
5a0b8312   mclaudel   Algorithme amélio...
11
    char l;
2d053d06   mclaudel   Projet modifié
12
    struct node * lettres[size];
7197538b   mclaudel   Projet modifié
13
    bool fin_de_mot;
7197538b   mclaudel   Projet modifié
14
15
  } Node;
  
2d053d06   mclaudel   Projet modifié
16
17
18
19
20
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
21
22
23
24
25
  bool is_empty(struct node *tree)
  {
  	return tree==NULL;
  }
  
2d053d06   mclaudel   Projet modifié
26
27
28
29
30
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
31
32
  bool is_leaf(struct node *tree)
  {
2d053d06   mclaudel   Projet modifié
33
34
35
36
37
38
39
40
41
42
      int cpt=1;
      if (is_empty(tree)) return 1;
      for (int i=0; i<size ; i++){
          if ( tree->lettres[i] == NULL){
              cpt++;
          }
      }
      if (cpt == size) cpt=1;
      if (cpt != size) cpt=0;
      return cpt ;
3b142eb1   mclaudel   Projet modifié
43
44
  }
  
7197538b   mclaudel   Projet modifié
45
  
2d053d06   mclaudel   Projet modifié
46
47
48
49
50
  
  
  
  
  void ajout(Node **N, char lettre)
7197538b   mclaudel   Projet modifié
51
  {
2d053d06   mclaudel   Projet modifié
52
53
54
55
56
      Node *nouveau = malloc(sizeof(Node));
      (*nouveau).l=lettre;
      (*nouveau).fin_de_mot=0;
      for (int i=0; i<size; i++) nouveau->lettres[i]=NULL;
      *N = nouveau;
7197538b   mclaudel   Projet modifié
57
58
59
  }
  
  
2d053d06   mclaudel   Projet modifié
60
61
62
63
64
  
  
  
  
  void ajout_alphab(Node ** pn, char *  mot,int cpt)
7197538b   mclaudel   Projet modifié
65
  {
2d053d06   mclaudel   Projet modifié
66
      Node * tmp= *pn;
2d053d06   mclaudel   Projet modifié
67
      char lettre=mot[cpt];
efd96bef   mclaudel   Projet modifié
68
      int pos;
0aa091e7   Fontaine Maxime   Algorithme modifié
69
      
efd96bef   mclaudel   Projet modifié
70
      pos=lettre;
0aa091e7   Fontaine Maxime   Algorithme modifié
71
72
      if (lettre>='A' && lettre <= 'Z') pos =lettre -'A'+'a';
      if (lettre == '\0' || pos == 44 || pos == 46){
2d053d06   mclaudel   Projet modifié
73
74
          (*tmp).fin_de_mot=1;
          return;
3b142eb1   mclaudel   Projet modifié
75
      }
2d053d06   mclaudel   Projet modifié
76
      if (tmp->lettres[pos] == NULL) {
2d053d06   mclaudel   Projet modifié
77
          ajout(&tmp->lettres[pos],lettre);
7197538b   mclaudel   Projet modifié
78
      }
efd96bef   mclaudel   Projet modifié
79
      cpt++;
2d053d06   mclaudel   Projet modifié
80
81
82
      return ajout_alphab(&tmp->lettres[pos],mot,cpt);
      
      
7197538b   mclaudel   Projet modifié
83
84
85
  }
  
  
2d053d06   mclaudel   Projet modifié
86
87
88
89
  
  
  
  
5a0b8312   mclaudel   Algorithme amélio...
90
  Node * charger_arbre(Node ** Arbre){
2d053d06   mclaudel   Projet modifié
91
92
      FILE * dico;
      char mot[MAX_LETTRES];
efd96bef   mclaudel   Projet modifié
93
      dico = fopen("words.txt","r");
2d053d06   mclaudel   Projet modifié
94
95
96
97
98
99
      int i;
      while ((i = fscanf(dico,"%s",mot)) == 1){
          ajout_alphab(Arbre,mot,0);
      }
      fclose(dico);
      return *Arbre;
7197538b   mclaudel   Projet modifié
100
101
  }
  
2d053d06   mclaudel   Projet modifié
102
103
104
105
106
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
107
108
  void affichage_arbre(Node * Arbre)
  {
ebd317c5   mclaudel   Projet modifié
109
      if (is_empty(Arbre)){
2d053d06   mclaudel   Projet modifié
110
111
112
113
114
115
116
117
118
119
          printf("arbre vide \n");
          return;
      }
      for (int i=0; i<size; i++){
          if (Arbre->lettres[i] != NULL){
              printf("%c -> %c \n",Arbre->l,Arbre->lettres[i]->l);
              affichage_arbre(Arbre->lettres[i]);
          }
      }
      if (Arbre->fin_de_mot) printf("fin de mot \n");
3b142eb1   mclaudel   Projet modifié
120
121
122
  }
  
  
2d053d06   mclaudel   Projet modifié
123
124
125
126
  
  
  
  
3b142eb1   mclaudel   Projet modifié
127
128
  void detruire_arbre(Node ** Arbre)
  {
ebd317c5   mclaudel   Projet modifié
129
    
2d053d06   mclaudel   Projet modifié
130
      if (is_empty(*Arbre)) return;
2d053d06   mclaudel   Projet modifié
131
132
133
134
      for (int i=0; i<size; i++){
          detruire_arbre(&(*Arbre)->lettres[i]);
      }
      free(*Arbre);
ebd317c5   mclaudel   Projet modifié
135
      *Arbre=NULL;
3b142eb1   mclaudel   Projet modifié
136
137
  }
  
2d053d06   mclaudel   Projet modifié
138
139
140
141
142
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
143
  void initialisation(Node ** Arbre){
2d053d06   mclaudel   Projet modifié
144
145
      Node *nouveau = malloc(sizeof(struct node));
      (*nouveau).l='?';
efd96bef   mclaudel   Projet modifié
146
      (*nouveau).fin_de_mot=0;
2d053d06   mclaudel   Projet modifié
147
      for (int i=0; i<size; i++) nouveau->lettres[i] = NULL;
ebd317c5   mclaudel   Projet modifié
148
149
150
151
152
153
154
      *Arbre = nouveau;}
  
  
  
  
  
  
0aa091e7   Fontaine Maxime   Algorithme modifié
155
  int  comparaison(Node ** pn, char *  mot,int cpt,int * erreur)
ebd317c5   mclaudel   Projet modifié
156
157
  {
      char lettre=mot[cpt];
efd96bef   mclaudel   Projet modifié
158
      int pos = lettre ;
0aa091e7   Fontaine Maxime   Algorithme modifié
159
      if (lettre>='A' && lettre <= 'Z') pos =lettre -'A'+'a';
ebd317c5   mclaudel   Projet modifié
160
      cpt++;
0aa091e7   Fontaine Maxime   Algorithme modifié
161
      if (lettre == '\0' || pos == 44 || pos == 46){
efd96bef   mclaudel   Projet modifié
162
        if((*pn)->fin_de_mot==0){
0aa091e7   Fontaine Maxime   Algorithme modifié
163
            (*erreur)++;
efd96bef   mclaudel   Projet modifié
164
165
        }
        
0aa091e7   Fontaine Maxime   Algorithme modifié
166
        return (*erreur);
ebd317c5   mclaudel   Projet modifié
167
      }
0aa091e7   Fontaine Maxime   Algorithme modifié
168
      if (lettre == '?' || lettre == '!' || lettre == ':' || lettre == ';') return 0;
efd96bef   mclaudel   Projet modifié
169
      if ((*pn)->lettres[pos] == NULL) {
0aa091e7   Fontaine Maxime   Algorithme modifié
170
171
          (*erreur)++;
        return (*erreur);
ebd317c5   mclaudel   Projet modifié
172
      }
0aa091e7   Fontaine Maxime   Algorithme modifié
173
      return comparaison(&(*pn)->lettres[pos],mot,cpt,erreur);
ebd317c5   mclaudel   Projet modifié
174
175
176
177
      
      
  }
  
efd96bef   mclaudel   Projet modifié
178
  void test_erreur(Node * Dico){
ebd317c5   mclaudel   Projet modifié
179
    FILE * texte;
0aa091e7   Fontaine Maxime   Algorithme modifié
180
181
      int * erreur=malloc(sizeof(int));
      (*erreur)=0;
ebd317c5   mclaudel   Projet modifié
182
    char mot[MAX_LETTRES];
efd96bef   mclaudel   Projet modifié
183
    texte = fopen("test.txt","r");
ebd317c5   mclaudel   Projet modifié
184
185
    int i;
    while ((i = fscanf(texte,"%s",mot)) == 1){
0aa091e7   Fontaine Maxime   Algorithme modifié
186
      (*erreur)=comparaison(&Dico,mot,0,erreur);
ebd317c5   mclaudel   Projet modifié
187
    }
0aa091e7   Fontaine Maxime   Algorithme modifié
188
189
      if ((*erreur)==0 || (*erreur)==1 ) printf("%d erreur",(*erreur));
      else printf("%d erreurs",(*erreur));
ebd317c5   mclaudel   Projet modifié
190
    fclose(texte);
3b142eb1   mclaudel   Projet modifié
191
  }
5a0b8312   mclaudel   Algorithme amélio...
192
  
2d053d06   mclaudel   Projet modifié
193
  
ebd317c5   mclaudel   Projet modifié
194
  		 
2d053d06   mclaudel   Projet modifié
195
196
197
  
  
  
5a0b8312   mclaudel   Algorithme amélio...
198
  int main(){
2d053d06   mclaudel   Projet modifié
199
200
201
      Node * Arbre;
      initialisation(&Arbre);
      charger_arbre(&Arbre);
0aa091e7   Fontaine Maxime   Algorithme modifié
202
      //affichage_arbre(Arbre);
2d053d06   mclaudel   Projet modifié
203
      printf("Arbre fini \n");
efd96bef   mclaudel   Projet modifié
204
      test_erreur(Arbre);
2d053d06   mclaudel   Projet modifié
205
      detruire_arbre(&Arbre);
efd96bef   mclaudel   Projet modifié
206
207
      //affichage_arbre(Arbre);
  
2d053d06   mclaudel   Projet modifié
208
      return 0;
5a0b8312   mclaudel   Algorithme amélio...
209
  }