Blame view

correcteur.c 2.97 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
  
  
  
  
  
2d053d06   mclaudel   Projet modifié
31
  void ajout(Node **N, char lettre)
7197538b   mclaudel   Projet modifié
32
  {
2d053d06   mclaudel   Projet modifié
33
34
35
36
37
      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é
38
39
40
  }
  
  
2d053d06   mclaudel   Projet modifié
41
42
43
44
45
  
  
  
  
  void ajout_alphab(Node ** pn, char *  mot,int cpt)
7197538b   mclaudel   Projet modifié
46
  {
2d053d06   mclaudel   Projet modifié
47
      Node * tmp= *pn;
2d053d06   mclaudel   Projet modifié
48
      char lettre=mot[cpt];
efd96bef   mclaudel   Projet modifié
49
      int pos;
0aa091e7   Fontaine Maxime   Algorithme modifié
50
      
efd96bef   mclaudel   Projet modifié
51
      pos=lettre;
0aa091e7   Fontaine Maxime   Algorithme modifié
52
53
      if (lettre>='A' && lettre <= 'Z') pos =lettre -'A'+'a';
      if (lettre == '\0' || pos == 44 || pos == 46){
2d053d06   mclaudel   Projet modifié
54
55
          (*tmp).fin_de_mot=1;
          return;
3b142eb1   mclaudel   Projet modifié
56
      }
2d053d06   mclaudel   Projet modifié
57
      if (tmp->lettres[pos] == NULL) {
2d053d06   mclaudel   Projet modifié
58
          ajout(&tmp->lettres[pos],lettre);
7197538b   mclaudel   Projet modifié
59
      }
efd96bef   mclaudel   Projet modifié
60
      cpt++;
2d053d06   mclaudel   Projet modifié
61
62
63
      return ajout_alphab(&tmp->lettres[pos],mot,cpt);
      
      
7197538b   mclaudel   Projet modifié
64
65
66
  }
  
  
2d053d06   mclaudel   Projet modifié
67
68
69
70
  
  
  
  
6d28d90b   Fontaine Maxime   Désolé pour le re...
71
72
  Node * charger_arbre(Node ** Arbre, char * dico){
      FILE * fp;
2d053d06   mclaudel   Projet modifié
73
      char mot[MAX_LETTRES];
6d28d90b   Fontaine Maxime   Désolé pour le re...
74
      fp = fopen(dico,"r");
2d053d06   mclaudel   Projet modifié
75
      int i;
6d28d90b   Fontaine Maxime   Désolé pour le re...
76
      while ((i = fscanf(fp,"%s",mot)) == 1){
2d053d06   mclaudel   Projet modifié
77
78
          ajout_alphab(Arbre,mot,0);
      }
6d28d90b   Fontaine Maxime   Désolé pour le re...
79
      fclose(fp);
2d053d06   mclaudel   Projet modifié
80
      return *Arbre;
7197538b   mclaudel   Projet modifié
81
82
  }
  
2d053d06   mclaudel   Projet modifié
83
84
85
86
87
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
88
89
  void affichage_arbre(Node * Arbre)
  {
ebd317c5   mclaudel   Projet modifié
90
      if (is_empty(Arbre)){
2d053d06   mclaudel   Projet modifié
91
92
93
94
95
96
97
98
99
100
          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é
101
102
103
  }
  
  
2d053d06   mclaudel   Projet modifié
104
105
106
107
  
  
  
  
3b142eb1   mclaudel   Projet modifié
108
109
  void detruire_arbre(Node ** Arbre)
  {
ebd317c5   mclaudel   Projet modifié
110
    
2d053d06   mclaudel   Projet modifié
111
      if (is_empty(*Arbre)) return;
2d053d06   mclaudel   Projet modifié
112
113
114
115
      for (int i=0; i<size; i++){
          detruire_arbre(&(*Arbre)->lettres[i]);
      }
      free(*Arbre);
ebd317c5   mclaudel   Projet modifié
116
      *Arbre=NULL;
3b142eb1   mclaudel   Projet modifié
117
118
  }
  
2d053d06   mclaudel   Projet modifié
119
120
121
122
123
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
124
  void initialisation(Node ** Arbre){
2d053d06   mclaudel   Projet modifié
125
126
      Node *nouveau = malloc(sizeof(struct node));
      (*nouveau).l='?';
efd96bef   mclaudel   Projet modifié
127
      (*nouveau).fin_de_mot=0;
2d053d06   mclaudel   Projet modifié
128
      for (int i=0; i<size; i++) nouveau->lettres[i] = NULL;
ebd317c5   mclaudel   Projet modifié
129
130
131
132
133
134
135
      *Arbre = nouveau;}
  
  
  
  
  
  
0aa091e7   Fontaine Maxime   Algorithme modifié
136
  int  comparaison(Node ** pn, char *  mot,int cpt,int * erreur)
ebd317c5   mclaudel   Projet modifié
137
138
  {
      char lettre=mot[cpt];
efd96bef   mclaudel   Projet modifié
139
      int pos = lettre ;
0aa091e7   Fontaine Maxime   Algorithme modifié
140
      if (lettre>='A' && lettre <= 'Z') pos =lettre -'A'+'a';
ebd317c5   mclaudel   Projet modifié
141
      cpt++;
0aa091e7   Fontaine Maxime   Algorithme modifié
142
      if (lettre == '\0' || pos == 44 || pos == 46){
efd96bef   mclaudel   Projet modifié
143
        if((*pn)->fin_de_mot==0){
0aa091e7   Fontaine Maxime   Algorithme modifié
144
            (*erreur)++;
efd96bef   mclaudel   Projet modifié
145
146
        }
        
0aa091e7   Fontaine Maxime   Algorithme modifié
147
        return (*erreur);
ebd317c5   mclaudel   Projet modifié
148
      }
72a3086e   Fontaine Maxime   Algorithme modifié
149
      if (lettre == '?' || lettre == '!' || lettre == ':' || lettre == ';') return (*erreur);
efd96bef   mclaudel   Projet modifié
150
      if ((*pn)->lettres[pos] == NULL) {
0aa091e7   Fontaine Maxime   Algorithme modifié
151
152
          (*erreur)++;
        return (*erreur);
ebd317c5   mclaudel   Projet modifié
153
      }
0aa091e7   Fontaine Maxime   Algorithme modifié
154
      return comparaison(&(*pn)->lettres[pos],mot,cpt,erreur);
ebd317c5   mclaudel   Projet modifié
155
156
157
158
      
      
  }
  
6d28d90b   Fontaine Maxime   Désolé pour le re...
159
160
  void test_erreur(Node * Dico,char * texte){
      FILE * fp;
0aa091e7   Fontaine Maxime   Algorithme modifié
161
162
      int * erreur=malloc(sizeof(int));
      (*erreur)=0;
ebd317c5   mclaudel   Projet modifié
163
    char mot[MAX_LETTRES];
6d28d90b   Fontaine Maxime   Désolé pour le re...
164
    fp = fopen(texte,"r");
ebd317c5   mclaudel   Projet modifié
165
    int i;
6d28d90b   Fontaine Maxime   Désolé pour le re...
166
    while ((i = fscanf(fp,"%s",mot)) == 1){
0aa091e7   Fontaine Maxime   Algorithme modifié
167
      (*erreur)=comparaison(&Dico,mot,0,erreur);
ebd317c5   mclaudel   Projet modifié
168
    }
6d28d90b   Fontaine Maxime   Désolé pour le re...
169
170
171
172
      if ((*erreur)==0 || (*erreur)==1 ) printf("%d erreur \n",(*erreur));
      else printf("%d erreurs \n",(*erreur));
      free(erreur);
    fclose(fp);
3b142eb1   mclaudel   Projet modifié
173
  }
5a0b8312   mclaudel   Algorithme amélio...
174
  
2d053d06   mclaudel   Projet modifié
175
  
ebd317c5   mclaudel   Projet modifié
176
  		 
2d053d06   mclaudel   Projet modifié