Blame view

correcteur.c 3.13 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
69
70
71
72
      int pos;
      /*if (lettre>=97 && lettre<=122)  pos = lettre - 'a'; 
      if (lettre == 39) pos=26;
      if (lettre>='A' && lettre <= 'Z') pos =lettre -'A';*/
      pos=lettre;
2d053d06   mclaudel   Projet modifié
73
74
75
      if (lettre == '\0'){
          (*tmp).fin_de_mot=1;
          return;
3b142eb1   mclaudel   Projet modifié
76
      }
2d053d06   mclaudel   Projet modifié
77
      if (tmp->lettres[pos] == NULL) {
2d053d06   mclaudel   Projet modifié
78
          ajout(&tmp->lettres[pos],lettre);
7197538b   mclaudel   Projet modifié
79
      }
efd96bef   mclaudel   Projet modifié
80
      cpt++;
2d053d06   mclaudel   Projet modifié
81
82
83
      return ajout_alphab(&tmp->lettres[pos],mot,cpt);
      
      
7197538b   mclaudel   Projet modifié
84
85
86
  }
  
  
2d053d06   mclaudel   Projet modifié
87
88
89
90
  
  
  
  
5a0b8312   mclaudel   Algorithme amélio...
91
  Node * charger_arbre(Node ** Arbre){
2d053d06   mclaudel   Projet modifié
92
93
      FILE * dico;
      char mot[MAX_LETTRES];
efd96bef   mclaudel   Projet modifié
94
      dico = fopen("words.txt","r");
2d053d06   mclaudel   Projet modifié
95
96
97
98
99
100
      int i;
      while ((i = fscanf(dico,"%s",mot)) == 1){
          ajout_alphab(Arbre,mot,0);
      }
      fclose(dico);
      return *Arbre;
7197538b   mclaudel   Projet modifié
101
102
  }
  
2d053d06   mclaudel   Projet modifié
103
104
105
106
107
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
108
109
  void affichage_arbre(Node * Arbre)
  {
ebd317c5   mclaudel   Projet modifié
110
      if (is_empty(Arbre)){
2d053d06   mclaudel   Projet modifié
111
112
113
114
115
116
117
118
119
120
          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é
121
122
123
  }
  
  
2d053d06   mclaudel   Projet modifié
124
125
126
127
  
  
  
  
3b142eb1   mclaudel   Projet modifié
128
129
  void detruire_arbre(Node ** Arbre)
  {
ebd317c5   mclaudel   Projet modifié
130
    
2d053d06   mclaudel   Projet modifié
131
      if (is_empty(*Arbre)) return;
2d053d06   mclaudel   Projet modifié
132
133
134
135
      for (int i=0; i<size; i++){
          detruire_arbre(&(*Arbre)->lettres[i]);
      }
      free(*Arbre);
ebd317c5   mclaudel   Projet modifié
136
      *Arbre=NULL;
3b142eb1   mclaudel   Projet modifié
137
138
  }
  
2d053d06   mclaudel   Projet modifié
139
140
141
142
143
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
144
  void initialisation(Node ** Arbre){
2d053d06   mclaudel   Projet modifié
145
146
      Node *nouveau = malloc(sizeof(struct node));
      (*nouveau).l='?';
efd96bef   mclaudel   Projet modifié
147
      (*nouveau).fin_de_mot=0;
2d053d06   mclaudel   Projet modifié
148
      for (int i=0; i<size; i++) nouveau->lettres[i] = NULL;
ebd317c5   mclaudel   Projet modifié
149
150
151
152
153
154
155
      *Arbre = nouveau;}
  
  
  
  
  
  
efd96bef   mclaudel   Projet modifié
156
  void  comparaison(Node ** pn, char *  mot,int cpt)
ebd317c5   mclaudel   Projet modifié
157
158
  {
      char lettre=mot[cpt];
efd96bef   mclaudel   Projet modifié
159
      int pos = lettre ;
ebd317c5   mclaudel   Projet modifié
160
161
      cpt++;
      if (lettre == '\0'){
efd96bef   mclaudel   Projet modifié
162
163
164
165
166
        if((*pn)->fin_de_mot==0){
          printf("1 erreur \n");
        }
        
        return ;
ebd317c5   mclaudel   Projet modifié
167
      }
efd96bef   mclaudel   Projet modifié
168
169
170
      if ((*pn)->lettres[pos] == NULL) {
        printf("1 erreur \n");
        return;
ebd317c5   mclaudel   Projet modifié
171
      }
efd96bef   mclaudel   Projet modifié
172
      return comparaison(&(*pn)->lettres[pos],mot,cpt);
ebd317c5   mclaudel   Projet modifié
173
174
175
176
      
      
  }
  
efd96bef   mclaudel   Projet modifié
177
  void test_erreur(Node * Dico){
ebd317c5   mclaudel   Projet modifié
178
179
    FILE * texte;
    char mot[MAX_LETTRES];
efd96bef   mclaudel   Projet modifié
180
    texte = fopen("test.txt","r");
ebd317c5   mclaudel   Projet modifié
181
182
183
184
185
    int i;
    while ((i = fscanf(texte,"%s",mot)) == 1){
      comparaison(&Dico,mot,0);
    }
    fclose(texte);
3b142eb1   mclaudel   Projet modifié
186
  }
5a0b8312   mclaudel   Algorithme amélio...
187
  
2d053d06   mclaudel   Projet modifié
188
  
ebd317c5   mclaudel   Projet modifié
189
  		 
2d053d06   mclaudel   Projet modifié
190
191
192
  
  
  
5a0b8312   mclaudel   Algorithme amélio...
193
  int main(){
2d053d06   mclaudel   Projet modifié
194
195
196
197
198
      Node * Arbre;
      initialisation(&Arbre);
      charger_arbre(&Arbre);
      affichage_arbre(Arbre);
      printf("Arbre fini \n");
efd96bef   mclaudel   Projet modifié
199
      test_erreur(Arbre);
2d053d06   mclaudel   Projet modifié
200
      detruire_arbre(&Arbre);
efd96bef   mclaudel   Projet modifié
201
202
      //affichage_arbre(Arbre);
  
2d053d06   mclaudel   Projet modifié
203
      return 0;
5a0b8312   mclaudel   Algorithme amélio...
204
  }