Commit 046e94d94fb2d622f338b8b7f0d0a9b713f94d45

Authored by vsalingu
1 parent 253ecfa4

Code documenté version finale

Showing 1 changed file with 23 additions and 20 deletions   Show diff stats
@@ -62,7 +62,7 @@ void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre) @@ -62,7 +62,7 @@ void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre)
62 } 62 }
63 63
64 void affiche_dico(ptarbre arbre, int n_lettre, char mot[]) 64 void affiche_dico(ptarbre arbre, int n_lettre, char mot[])
65 -// affiche tout le dictionnaire à partir de l'arbre (donc le numéro de lettre) sélectionné 65 +// Action qui affiche tout le dictionnaire à partir de arbre (donc le numéro de lettre) sélectionné en stockant le début du mot qui est commun à tous les suivants dans mot initialisé à vide et le numéro de la lettre dans n_lettre initialisé à 0.
66 { 66 {
67 if(arbre == NULL) 67 if(arbre == NULL)
68 { 68 {
@@ -96,8 +96,9 @@ void affiche_dico(ptarbre arbre, int n_lettre, char mot[]) @@ -96,8 +96,9 @@ void affiche_dico(ptarbre arbre, int n_lettre, char mot[])
96 } 96 }
97 97
98 void free_tree(cell **ptr_tree) 98 void free_tree(cell **ptr_tree)
  99 +// Action qui libère la mémoire allouée pour stockée les données du dictionnaire *(*ptr_tree).
99 { 100 {
100 - if ((*ptr_tree)==NULL) 101 + if ((*ptr_tree)==NULL)
101 printf("L'arbre est vide\n"); 102 printf("L'arbre est vide\n");
102 else 103 else
103 { 104 {
@@ -110,41 +111,41 @@ void free_tree(cell **ptr_tree) @@ -110,41 +111,41 @@ void free_tree(cell **ptr_tree)
110 } 111 }
111 112
112 void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, FILE* fp) 113 void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, FILE* fp)
  114 +// Action qui construit entièrement l'arbre, à partir du fichier fp, en partant de l'adresse parbre_originel qui correspond à la première cellule, parbre qui est la copie de l'arbre originel qui va nous permettre de nous balader entre les différentes lettres de chaque mot et de revenir à la première cellule à la fin de chaque mot.
113 { 115 {
114 -  
115 char c,t; 116 char c,t;
116 ptarbre rec; 117 ptarbre rec;
117 - while (fscanf(fp,"%c",&c)!= EOF) // lecture de tout le fichier 118 + while (fscanf(fp,"%c",&c)!= EOF) // Lecture de tout le fichier fp.
118 { 119 {
119 if (c != '\n') 120 if (c != '\n')
120 { 121 {
121 - if ((*parbre_originel)==NULL) // Cas où c'est le premier mot premiere lettre 122 + if ((*parbre_originel)==NULL) // Cas où c'est le premier mot et premiere lettre du dictionnaire.
122 { 123 {
123 - init_dico(parbre_originel,c);;  
124 - (*parbre_prec)=(*parbre_originel);  
125 - (*parbre)=(*parbre_originel)->fils; 124 + init_dico(parbre_originel,c);
  125 + (*parbre_prec)=(*parbre_originel); // On sauvegarde l'adresse de la lettre précédente.
  126 + (*parbre)=(*parbre_originel)->fils; // On passe à l'adresse de la cellule qui contiendra la prochaine lettre du même mot.
126 } 127 }
127 - else if ((*parbre)==NULL) // premier mot de l'arbre 128 + else if ((*parbre)==NULL) // Cas où c'est le premier mot de l'arbre mais pas la première lettre.
128 { 129 {
129 init_dico(parbre,c); 130 init_dico(parbre,c);
130 (*parbre_prec)=(*parbre); 131 (*parbre_prec)=(*parbre);
131 (*parbre)=(*parbre)->fils; 132 (*parbre)=(*parbre)->fils;
132 } 133 }
133 134
134 - else // Cas où le dico n'est pas vide 135 + else // Cas où ce n'est pas le premier mot, il faut faire une recherche parmi les lettres de même indice (donc à l'étage '(*parbre)') déjà enregistrées dans l'arbre.
135 { 136 {
136 rec=rech((*parbre),c); 137 rec=rech((*parbre),c);
137 - if (rec->lettre!=c) 138 + if (rec->lettre!=c) // Cas où la lettre présente dans la cellule à l'adresse renvoyée par rech((*parbre),c) n'est pas la lettre recherchée.
138 { 139 {
139 140
140 - if (rec==(*parbre) && rec->lettre=='\0') // 1ere lettre de la liste 141 + if (rec==(*parbre) && rec->lettre=='\0') // Cas où il n'y a pas de lettres à l'indice *parbre donc la recherche renvoie l'adresse de la première cellule qui est vide.
141 { 142 {
142 ajout_dico_tete(parbre,c); 143 ajout_dico_tete(parbre,c);
143 (*parbre_prec)=(*parbre); 144 (*parbre_prec)=(*parbre);
144 (*parbre)=(*parbre)->fils; 145 (*parbre)=(*parbre)->fils;
145 } 146 }
146 147
147 - else if (rec->suivant==NULL && rec->lettre!='\0') 148 + else if (rec->suivant==NULL && rec->lettre!='\0') // Cas où il y a qu'une lettre à l'indice *parbre donc la recherche renvoie l'adresse de la première cellule qui ne contient pas la lettre recherchée.
148 { 149 {
149 ajout_dico(&(rec),&(rec->suivant),c); 150 ajout_dico(&(rec),&(rec->suivant),c);
150 (*parbre_prec)=(*parbre); 151 (*parbre_prec)=(*parbre);
@@ -153,27 +154,28 @@ void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, @@ -153,27 +154,28 @@ void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec,
153 } 154 }
154 155
155 else 156 else
156 - {// Cas où le début du mot existe déjà et qu'on le complète 157 + {// Cas où la recherche renvoie l'adresse d'une cellule dont la lettre est la lettre recherchée donc le début du mot existe déjà et on le complète.
157 (*parbre_prec)=(*parbre); 158 (*parbre_prec)=(*parbre);
158 - (*parbre)=rec->fils; // On va à l'étage d'après pour former le mot dans l'arbre 159 + (*parbre)=rec->fils; // On va à l'étage d'après pour former le mot dans l'arbre.
159 160
160 } 161 }
161 162
162 163
163 } 164 }
164 } 165 }
165 - else { 166 + else { // Cas où c==\n donc le mot est terminé, il faut retourner en haut de l'arbre pour ajouter le prochain mot.
166 if ((*parbre_originel)!=NULL) 167 if ((*parbre_originel)!=NULL)
167 { 168 {
168 - (*parbre_prec)->fin_mot=true; // Cette lettre est la dernière du mot 169 + (*parbre_prec)->fin_mot=true; // Cette lettre est la dernière du mot.
169 } 170 }
170 - (*parbre)=(*parbre_originel); // On revient en haut de l'arbre pour commencer un nouveau mot 171 + (*parbre)=(*parbre_originel); // On revient en haut de l'arbre pour commencer un nouveau mot.
171 } 172 }
172 } 173 }
173 } 174 }
174 175
175 int main() 176 int main()
176 { 177 {
  178 + int cpt=0;
177 char mot[30]=""; 179 char mot[30]="";
178 int n_lettre=0; 180 int n_lettre=0;
179 ptarbre arbre_originel,arbre,arbre_prec; 181 ptarbre arbre_originel,arbre,arbre_prec;
@@ -182,13 +184,14 @@ int main() @@ -182,13 +184,14 @@ int main()
182 // Ouvrir fichier 184 // Ouvrir fichier
183 FILE *fp = fopen("words","r"); 185 FILE *fp = fopen("words","r");
184 if (fp==NULL) 186 if (fp==NULL)
185 - printf("words1 inaccessible \n",fp); 187 + printf("Dictionnaire inaccessible \n",fp);
186 else 188 else
187 - printf("words1 accessible \n",fp); 189 + printf("Dictionnaire accessible \n",fp);
188 cons_arbre(&arbre_originel, &arbre, &arbre_prec,fp); 190 cons_arbre(&arbre_originel, &arbre, &arbre_prec,fp);
189 affiche_dico(arbre_originel,n_lettre,mot); 191 affiche_dico(arbre_originel,n_lettre,mot);
190 free_tree(&arbre); 192 free_tree(&arbre);
191 fclose(fp); 193 fclose(fp);
  194 +
192 195
193 return 0; 196 return 0;
194 } 197 }