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,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 | } |