Blame view

arbre.c 2.82 KB
38be3329   rsSimonin   makefile et main
1
  #include "arbre.h"
5e43fa77   rsSimonin   arbre.c
2
  
5e43fa77   rsSimonin   arbre.c
3
  
38be3329   rsSimonin   makefile et main
4
5
6
7
8
9
10
11
12
  // typedef struct arbre{
  //     char val;
  //     struct arbre *suite[TAILLE];
  //     bool finmot; //1 si fin de mot
  // }Arbre;
  // 
  // typedef struct dico {
  //     Arbre *alpha[TAILLE];
  // }Dico;
5e43fa77   rsSimonin   arbre.c
13
  
5e43fa77   rsSimonin   arbre.c
14
15
  
  
38be3329   rsSimonin   makefile et main
16
17
  int calculcase(char c)
  {
7d2c7bff   rsSimonin   implementation de...
18
19
20
21
22
23
24
      if(c==39){
          return 26;
      }
      else if(c<97){
          return c-'A';
      }
      else {
6ab96f9e   rsSimonin   tout marche
25
      return c-'a';
7d2c7bff   rsSimonin   implementation de...
26
      }
5e43fa77   rsSimonin   arbre.c
27
28
29
30
31
32
33
34
35
36
37
  }
  
  bool est_vide(struct arbre *arbre)
  {
  	return arbre==NULL;
  }
  
  bool fin_de_mot(struct arbre *arbre)
  {
  	return arbre->finmot;
  }
5e43fa77   rsSimonin   arbre.c
38
  
38be3329   rsSimonin   makefile et main
39
40
  void ini_dico(struct dico *pt_dico)
  {
fc2a89b1   rsimonin   con
41
      printf("ini_dico\n");
7d2c7bff   rsSimonin   implementation de...
42
      for(int i=0;i<TAILLE;i++){
7d0a6328   rsimonin   modif creation
43
          pt_dico->alpha[i]=NULL;        
d6bcca7a   rsSimonin   initialisation
44
45
      }
  }
38be3329   rsSimonin   makefile et main
46
47
  void creation_arbre(Arbre **ppt_arbre,char c)
  {
7d2c7bff   rsSimonin   implementation de...
48
49
50
51
52
53
54
55
56
57
      printf("creation arbre\n");
      Arbre *monarbre=malloc(sizeof(struct arbre));
      monarbre->val=c;
      monarbre->finmot=false;
      for(int j=0;j<TAILLE;j++){
          monarbre->suite[j]=NULL;     
      }
      *ppt_arbre=monarbre;
  }
      
7d0a6328   rsimonin   modif creation
58
  
38be3329   rsSimonin   makefile et main
59
60
  void ajout_mot(struct arbre **arbrecourant,char *mot,int i)
  {
6ab96f9e   rsSimonin   tout marche
61
62
  
      printf("%s:length:%zu \n",mot,strlen(mot));
7d0a6328   rsimonin   modif creation
63
      
6ab96f9e   rsSimonin   tout marche
64
      if(mot[i]!='\0'){
7d0a6328   rsimonin   modif creation
65
          printf("\nlettre:%c; i=%d\n",mot[i],i);
6ab96f9e   rsSimonin   tout marche
66
          if (*arbrecourant==NULL){
7d2c7bff   rsSimonin   implementation de...
67
              creation_arbre(arbrecourant,mot[i]);
2e977567   rsSimonin   2 commit
68
          }
2e977567   rsSimonin   2 commit
69
          i++;
38be3329   rsSimonin   makefile et main
70
71
72
          if(mot[i]!='\0'){
              (*arbrecourant)->finmot=true;
          }
6ab96f9e   rsSimonin   tout marche
73
          ajout_mot(&((*arbrecourant)->suite[calculcase(mot[i])]),mot,i);
2e977567   rsSimonin   2 commit
74
      }
fc2a89b1   rsimonin   con
75
  
2e977567   rsSimonin   2 commit
76
77
  }
  
41bf8d90   rsSimonin   correction de bug
78
  void charger_arbre(FILE *fp, struct dico **ppt_dico)
2e977567   rsSimonin   2 commit
79
  {   char mot[20];
41bf8d90   rsSimonin   correction de bug
80
      ini_dico(*ppt_dico);
fc2a89b1   rsimonin   con
81
      while (fscanf(fp, "%s", mot)==1){
6ab96f9e   rsSimonin   tout marche
82
          printf("mot:%s\n\n\n",mot);
6ab96f9e   rsSimonin   tout marche
83
          printf("\nlettre:%c\n",mot[0]);
6ab96f9e   rsSimonin   tout marche
84
          ajout_mot(&((*ppt_dico)->alpha[calculcase(mot[0])]),mot,0);
2e977567   rsSimonin   2 commit
85
86
      }
      return ;
2e977567   rsSimonin   2 commit
87
  }
d6bcca7a   rsSimonin   initialisation
88
  
41bf8d90   rsSimonin   correction de bug
89
  
38be3329   rsSimonin   makefile et main
90
91
  void free_arbre(struct arbre *pt_arbre)
  {
41bf8d90   rsSimonin   correction de bug
92
93
94
     if (pt_arbre==NULL){
          return ;
      }
7d2c7bff   rsSimonin   implementation de...
95
      for(int i=0;i<TAILLE;i++){
6ab96f9e   rsSimonin   tout marche
96
          free_arbre((pt_arbre->suite[i]));
41bf8d90   rsSimonin   correction de bug
97
      }
41bf8d90   rsSimonin   correction de bug
98
      free(pt_arbre);
075f46e2   rsimonin   affichage et corr...
99
  }
d6bcca7a   rsSimonin   initialisation
100
  
38be3329   rsSimonin   makefile et main
101
102
  void free_dico(struct dico *pt_dico)
  {
41bf8d90   rsSimonin   correction de bug
103
     if (pt_dico==NULL){
075f46e2   rsimonin   affichage et corr...
104
105
          return ;
      }
6ab96f9e   rsSimonin   tout marche
106
    
7d2c7bff   rsSimonin   implementation de...
107
      for(int i=0;i<TAILLE;i++){
6ab96f9e   rsSimonin   tout marche
108
          free_arbre((pt_dico->alpha[i]));
075f46e2   rsimonin   affichage et corr...
109
      }
41bf8d90   rsSimonin   correction de bug
110
  
6ab96f9e   rsSimonin   tout marche
111
      free(pt_dico);
075f46e2   rsimonin   affichage et corr...
112
113
  }
  
38be3329   rsSimonin   makefile et main
114
115
  void affiche_arbre(struct arbre *arbre)
  {
075f46e2   rsimonin   affichage et corr...
116
117
118
      if(arbre==NULL){
          return ;
      }
4a1bc8c3   rsSimonin   affichage free et...
119
      printf("%c:",arbre->val);
7d2c7bff   rsSimonin   implementation de...
120
      for(int i=0;i<TAILLE;i++){
075f46e2   rsimonin   affichage et corr...
121
122
123
          affiche_arbre(arbre->suite[i]);
      }
  }
d6bcca7a   rsSimonin   initialisation
124
  
38be3329   rsSimonin   makefile et main
125
126
  void affiche_dico(struct dico *dico)
  {
41bf8d90   rsSimonin   correction de bug
127
128
129
130
      if(dico==NULL){
          return ;
      }
      printf("---------------------------------------\n");
7d2c7bff   rsSimonin   implementation de...
131
      for(int i=0;i<TAILLE;i++){
fc2a89b1   rsimonin   con
132
          printf("%d:",i);
41bf8d90   rsSimonin   correction de bug
133
134
135
136
137
138
          affiche_arbre(dico->alpha[i]);
          printf("\n");
      }
     
  }
  
d6bcca7a   rsSimonin   initialisation
139
  
38be3329   rsSimonin   makefile et main
140
141
142
143
144
145
146
147
148
149
150
151
152
  // int main (){
  //     FILE* fp = fopen("words-no-accents","r"); //amelioration entrée
  // 	if(fp == NULL){ return EXIT_FAILURE;} //File is not readable
  // 	
  //     struct dico *mondico=malloc(sizeof(struct dico));
  //     charger_arbre(fp,&mondico);
  //     affiche_dico(mondico);
  //     
  //     
  //     free_dico(mondico);
  //     fclose(fp);    
  //     return 0;
  // }