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