Blame view

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