Blame view

arbre.c 3.1 KB
c62798e8   rsimonin   ajout fonction mo...
1
2
3
4
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdbool.h>
  #include <string.h>
fde8b39d   rsSimonin   fini
5
  #include "arbre.h"
5e43fa77   rsSimonin   arbre.c
6
  
38be3329   rsSimonin   makefile et main
7
8
  int calculcase(char c)
  {
7d2c7bff   rsSimonin   implementation de...
9
10
11
12
13
14
15
      if(c==39){
          return 26;
      }
      else if(c<97){
          return c-'A';
      }
      else {
6ab96f9e   rsSimonin   tout marche
16
      return c-'a';
7d2c7bff   rsSimonin   implementation de...
17
      }
5e43fa77   rsSimonin   arbre.c
18
  }
d6eeddaa   rsimonin   toutes les foncti...
19
      
c62798e8   rsimonin   ajout fonction mo...
20
21
  bool mot_existe(struct arbre *monarbre,char *mot,int i){
      if (monarbre==NULL){
20cb4a11   rsimonin   modif_affichage
22
          //printf("%s n'est pas dans le dictionnaire\n",mot);
c62798e8   rsimonin   ajout fonction mo...
23
24
          return false;
      }
c62798e8   rsimonin   ajout fonction mo...
25
      if (mot[i+1]=='\0'){
20cb4a11   rsimonin   modif_affichage
26
          //printf("%s %d\n",mot, monarbre->finmot);
c62798e8   rsimonin   ajout fonction mo...
27
28
          return monarbre->finmot;
      }
d6eeddaa   rsimonin   toutes les foncti...
29
30
      i++;
      return mot_existe(monarbre->suite[calculcase(mot[i])],mot,i);
5e43fa77   rsSimonin   arbre.c
31
  }
5e43fa77   rsSimonin   arbre.c
32
  
38be3329   rsSimonin   makefile et main
33
34
  void ini_dico(struct dico *pt_dico)
  {
20cb4a11   rsimonin   modif_affichage
35
      //printf("Initialisation du dictionnaire\n");
7d2c7bff   rsSimonin   implementation de...
36
      for(int i=0;i<TAILLE;i++){
7d0a6328   rsimonin   modif creation
37
          pt_dico->alpha[i]=NULL;        
d6bcca7a   rsSimonin   initialisation
38
39
      }
  }
38be3329   rsSimonin   makefile et main
40
41
  void creation_arbre(Arbre **ppt_arbre,char c)
  {
c62798e8   rsimonin   ajout fonction mo...
42
  //     printf("creation arbre\n");
7d2c7bff   rsSimonin   implementation de...
43
44
45
46
47
48
49
50
51
      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
52
  
38be3329   rsSimonin   makefile et main
53
54
  void ajout_mot(struct arbre **arbrecourant,char *mot,int i)
  {
6ab96f9e   rsSimonin   tout marche
55
  
c62798e8   rsimonin   ajout fonction mo...
56
  //     printf("%s:length:%zu \n",mot,strlen(mot));
7d0a6328   rsimonin   modif creation
57
      
6ab96f9e   rsSimonin   tout marche
58
      if(mot[i]!='\0'){
c62798e8   rsimonin   ajout fonction mo...
59
  //         printf("\nlettre:%c; i=%d\n",mot[i],i);
6ab96f9e   rsSimonin   tout marche
60
          if (*arbrecourant==NULL){
7d2c7bff   rsSimonin   implementation de...
61
              creation_arbre(arbrecourant,mot[i]);
2e977567   rsSimonin   2 commit
62
          }
c62798e8   rsimonin   ajout fonction mo...
63
          if(mot[i+1]=='\0'){
0164603a   rsimonin   affichage
64
              //printf("mot:%s %c\n",mot,mot[i]);
38be3329   rsSimonin   makefile et main
65
66
              (*arbrecourant)->finmot=true;
          }
d6eeddaa   rsimonin   toutes les foncti...
67
68
          i++;
          ajout_mot(&((*arbrecourant)->suite[calculcase(mot[i])]),mot,i);
2e977567   rsSimonin   2 commit
69
      }
d6eeddaa   rsimonin   toutes les foncti...
70
      else return ;
fc2a89b1   rsimonin   con
71
  
2e977567   rsSimonin   2 commit
72
73
  }
  
46b621e7   rsimonin   chargementdu deux...
74
  void charger_dico(FILE *fp, struct dico **ppt_dico)
2e977567   rsSimonin   2 commit
75
  {   char mot[20];
41bf8d90   rsSimonin   correction de bug
76
      ini_dico(*ppt_dico);
fc2a89b1   rsimonin   con
77
      while (fscanf(fp, "%s", mot)==1){
c62798e8   rsimonin   ajout fonction mo...
78
79
  //         printf("mot:%s\n\n\n",mot);
  //         printf("\nlettre:%c\n",mot[0]);
6ab96f9e   rsSimonin   tout marche
80
          ajout_mot(&((*ppt_dico)->alpha[calculcase(mot[0])]),mot,0);
2e977567   rsSimonin   2 commit
81
82
      }
      return ;
2e977567   rsSimonin   2 commit
83
  }
d6bcca7a   rsSimonin   initialisation
84
  
41bf8d90   rsSimonin   correction de bug
85
  
38be3329   rsSimonin   makefile et main
86
87
  void free_arbre(struct arbre *pt_arbre)
  {
41bf8d90   rsSimonin   correction de bug
88
89
90
     if (pt_arbre==NULL){
          return ;
      }
7d2c7bff   rsSimonin   implementation de...
91
      for(int i=0;i<TAILLE;i++){
6ab96f9e   rsSimonin   tout marche
92
          free_arbre((pt_arbre->suite[i]));
41bf8d90   rsSimonin   correction de bug
93
      }
41bf8d90   rsSimonin   correction de bug
94
      free(pt_arbre);
075f46e2   rsimonin   affichage et corr...
95
  }
d6bcca7a   rsSimonin   initialisation
96
  
38be3329   rsSimonin   makefile et main
97
98
  void free_dico(struct dico *pt_dico)
  {
41bf8d90   rsSimonin   correction de bug
99
     if (pt_dico==NULL){
075f46e2   rsimonin   affichage et corr...
100
101
          return ;
      }
6ab96f9e   rsSimonin   tout marche
102
    
7d2c7bff   rsSimonin   implementation de...
103
      for(int i=0;i<TAILLE;i++){
6ab96f9e   rsSimonin   tout marche
104
          free_arbre((pt_dico->alpha[i]));
075f46e2   rsimonin   affichage et corr...
105
      }
41bf8d90   rsSimonin   correction de bug
106
  
fde8b39d   rsSimonin   fini
107
      //free(pt_dico);
075f46e2   rsimonin   affichage et corr...
108
109
  }
  
38be3329   rsSimonin   makefile et main
110
111
  void affiche_arbre(struct arbre *arbre)
  {
075f46e2   rsimonin   affichage et corr...
112
113
114
      if(arbre==NULL){
          return ;
      }
4a1bc8c3   rsSimonin   affichage free et...
115
      printf("%c:",arbre->val);
7d2c7bff   rsSimonin   implementation de...
116
      for(int i=0;i<TAILLE;i++){
075f46e2   rsimonin   affichage et corr...
117
118
119
          affiche_arbre(arbre->suite[i]);
      }
  }
d6bcca7a   rsSimonin   initialisation
120
  
38be3329   rsSimonin   makefile et main
121
122
  void affiche_dico(struct dico *dico)
  {
41bf8d90   rsSimonin   correction de bug
123
124
125
126
      if(dico==NULL){
          return ;
      }
      printf("---------------------------------------\n");
7d2c7bff   rsSimonin   implementation de...
127
      for(int i=0;i<TAILLE;i++){
fc2a89b1   rsimonin   con
128
          printf("%d:",i);
41bf8d90   rsSimonin   correction de bug
129
130
131
132
133
134
          affiche_arbre(dico->alpha[i]);
          printf("\n");
      }
     
  }
  
d6eeddaa   rsimonin   toutes les foncti...
135
  void analyse_fichier(FILE *fp,Dico *pt_dico, int *nb_t, int *nb_f){
46b621e7   rsimonin   chargementdu deux...
136
137
138
139
140
141
      int nbmot_t=0;
      int nbmot_f=0;
      char mot[20];
      while (fscanf(fp, "%s", mot)==1){
  //         printf("mot:%s\n\n\n",mot);
  //         printf("\nlettre:%c\n",mot[0]);
d6eeddaa   rsimonin   toutes les foncti...
142
          if(mot_existe(pt_dico->alpha[calculcase(mot[0])],mot,0)==1){
46b621e7   rsimonin   chargementdu deux...
143
144
145
146
              nbmot_t++;
          }
          else nbmot_f++;
      }
d6eeddaa   rsimonin   toutes les foncti...
147
148
      *nb_t=nbmot_t;
      *nb_f=nbmot_f;    
46b621e7   rsimonin   chargementdu deux...
149
  }