Commit 046e94d94fb2d622f338b8b7f0d0a9b713f94d45
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 | 62 | } |
63 | 63 | |
64 | 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 | 67 | if(arbre == NULL) |
68 | 68 | { |
... | ... | @@ -96,8 +96,9 @@ void affiche_dico(ptarbre arbre, int n_lettre, char mot[]) |
96 | 96 | } |
97 | 97 | |
98 | 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 | 102 | printf("L'arbre est vide\n"); |
102 | 103 | else |
103 | 104 | { |
... | ... | @@ -110,41 +111,41 @@ void free_tree(cell **ptr_tree) |
110 | 111 | } |
111 | 112 | |
112 | 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 | 116 | char c,t; |
116 | 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 | 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 | 130 | init_dico(parbre,c); |
130 | 131 | (*parbre_prec)=(*parbre); |
131 | 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 | 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 | 143 | ajout_dico_tete(parbre,c); |
143 | 144 | (*parbre_prec)=(*parbre); |
144 | 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 | 150 | ajout_dico(&(rec),&(rec->suivant),c); |
150 | 151 | (*parbre_prec)=(*parbre); |
... | ... | @@ -153,27 +154,28 @@ void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, |
153 | 154 | } |
154 | 155 | |
155 | 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 | 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 | 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 | 176 | int main() |
176 | 177 | { |
178 | + int cpt=0; | |
177 | 179 | char mot[30]=""; |
178 | 180 | int n_lettre=0; |
179 | 181 | ptarbre arbre_originel,arbre,arbre_prec; |
... | ... | @@ -182,13 +184,14 @@ int main() |
182 | 184 | // Ouvrir fichier |
183 | 185 | FILE *fp = fopen("words","r"); |
184 | 186 | if (fp==NULL) |
185 | - printf("words1 inaccessible \n",fp); | |
187 | + printf("Dictionnaire inaccessible \n",fp); | |
186 | 188 | else |
187 | - printf("words1 accessible \n",fp); | |
189 | + printf("Dictionnaire accessible \n",fp); | |
188 | 190 | cons_arbre(&arbre_originel, &arbre, &arbre_prec,fp); |
189 | 191 | affiche_dico(arbre_originel,n_lettre,mot); |
190 | 192 | free_tree(&arbre); |
191 | 193 | fclose(fp); |
194 | + | |
192 | 195 | |
193 | 196 | return 0; |
194 | 197 | } | ... | ... |