Blame view

correcteur.c 2.56 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
2d053d06   mclaudel   Projet modifié
7
  #define size 26
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
67
68
69
70
71
72
73
74
      Node * tmp= *pn;
      //printf("%d \n",cpt);
      char lettre=mot[cpt];
      int pos = lettre - 'a';
      //printf("%c \n",lettre);
      cpt++;
      if (lettre == '\0'){
          (*tmp).fin_de_mot=1;
          return;
3b142eb1   mclaudel   Projet modifié
75
      }
2d053d06   mclaudel   Projet modifié
76
77
78
      if (tmp->lettres[pos] == NULL) {
          //printf("Rentré \n");
          ajout(&tmp->lettres[pos],lettre);
7197538b   mclaudel   Projet modifié
79
      }
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
93
94
95
96
97
98
99
      FILE * dico;
      char mot[MAX_LETTRES];
      dico = fopen("text.txt","r");
      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)
  {
2d053d06   mclaudel   Projet modifié
109
110
111
112
113
114
115
116
117
118
119
      if (Arbre->l == '?' && is_leaf(Arbre)){
          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)
  {
2d053d06   mclaudel   Projet modifié
129
130
131
132
133
134
135
136
137
138
      printf("---------- \n");
      printf("%p \n",*Arbre);
      if (is_empty(*Arbre)) return;
      printf("%c \n",(*Arbre)->l);
      for (int i=0; i<size; i++){
          detruire_arbre(&(*Arbre)->lettres[i]);
      }
      free(*Arbre);
      printf("suppression \n");
      printf("%p \n",*Arbre);
3b142eb1   mclaudel   Projet modifié
139
140
  }
  
2d053d06   mclaudel   Projet modifié
141
142
143
144
145
  
  
  
  
  
3b142eb1   mclaudel   Projet modifié
146
  void initialisation(Node ** Arbre){
2d053d06   mclaudel   Projet modifié
147
148
149
150
      Node *nouveau = malloc(sizeof(struct node));
      (*nouveau).l='?';
      for (int i=0; i<size; i++) nouveau->lettres[i] = NULL;
      *Arbre = nouveau;
3b142eb1   mclaudel   Projet modifié
151
  }
5a0b8312   mclaudel   Algorithme amélio...
152
  
2d053d06   mclaudel   Projet modifié
153
154
155
156
  
  
  
  
5a0b8312   mclaudel   Algorithme amélio...
157
  int main(){
2d053d06   mclaudel   Projet modifié
158
159
160
161
162
163
164
165
      Node * Arbre;
      initialisation(&Arbre);
      charger_arbre(&Arbre);
      affichage_arbre(Arbre);
      printf("Arbre fini \n");
      detruire_arbre(&Arbre);
      affichage_arbre(Arbre);
      return 0;
5a0b8312   mclaudel   Algorithme amélio...
166
  }