7b2d186e025e97273852e5586b4b1ec5643e8bfa
1 /*****************************************************************************/
4 /* Representation d'un ensemble de mots sous forme d'arbre n-aire */
5 /*****************************************************************************/
12 /* nombre de caracteres max dans un mot */
22 /* Recherche d'un mot dans l'arbre *****************************************/
24 recherche (NOEUD
* p
, char *mot
, int i
)
28 if (mot
[i
] == p
->lettre
)
36 return recherche (p
->fils
, mot
, i
+ 1);
41 if (p
->lettre
> mot
[i
])
47 return recherche (p
->frere
, mot
, i
);
52 /* Creation d'une fin de mot (liste chainee suivant le lien fils) **********/
54 insere_fin (char *mot
, int i
)
56 /* i est l'indice de la lettre courante dans le mot */
57 printf ("insere_fin %c, %i\n", mot
[i
], i
);
58 NOEUD
*p
= (NOEUD
*) malloc (sizeof (NOEUD
));
65 p
->fils
= insere_fin (mot
, i
+ 1);
69 /* Insertion d'un mot dans l'arbre ******************************************/
70 /* (on respecte l'ordre lexicographique des freres)**************************/
72 insere (NOEUD
* p
, char *mot
, int i
)
73 { /* i est l'indice de la lettre courante dans le mot */
76 p
= insere_fin (mot
, i
);
80 /*****************************************************************************/
81 /* Affichage par ordre alphabetique de tous les mots stockes dans l'arbre */
83 affiche (NOEUD
* p
, char *mot
, int i
)
84 { /* i est l'indice de la lettre courante dans le mot */
88 /* Visualisation de l'arbre n-aire *******************************************/
90 affiche_arbre (NOEUD
* p
, int prof
)
91 /* prof est utilise pour decaller l'affichage avec des espaces (selon le niveau dans l'arbre) */
96 affiche_arbre (p
->frere
, prof
);
97 for (i
= 0; i
< prof
; i
++)
99 printf ("%c\n", p
->lettre
);
100 affiche_arbre (p
->fils
, prof
+ 1);
104 /* Suppression d'un mot de l'arbre ********************************************/
105 /* Attention a ne supprimer que la fin du mot qui n'est partagee par aucun autre mot de l'arbre */
107 supprime (NOEUD
* p
, char *mot
, int i
)
108 /* i est l'indice de la lettre courante dans le mot */
114 /* Chargement des mots d'un fichier (vu comme un dictionnaire) dans l'arbre **/
116 charge_dico (char *nom_fichier
, int *nb_mots
)
123 fp
= fopen (nom_fichier
, "rt");
126 fscanf (fp
, "%d", nb_mots
); /* sur la 1ere ligne du fichier, le nombre de mots */
127 for (i
= 0; i
< *nb_mots
; i
++)
129 fscanf (fp
, "%s", mot
);
130 p
= insere (p
, mot
, 0); /* TODO il faut finir "insere" pour que "charge_dico" fonctionne */
136 /* Ecriture dans fp de tous les mots stockes dans l'arbre ********************/
138 affiche_fich (FILE * fp
, NOEUD
* p
, char *mot
, int i
)
141 /* ressemble beaucoup a "affiche", avec le parametre en plus "fp" qui est un FILE* */
144 /* Sauvegarde des mots de l'arbre dans un fichier ****************************/
146 sauve_dico (NOEUD
* p
, char *nom_fichier
, int nb_mots
)
150 fp
= fopen (nom_fichier
, "wt");
153 fprintf (fp
, "%d\n", nb_mots
);
154 affiche_fich (fp
, p
, mot
, 0); /* TODO il faut finir la fonction "affiche_fich" pour que "sauve_dico" fonctionne */
158 /*****************************************************************************/
160 main (int argc
, char *argv
[])
165 printf ("saisir un mot : ");
167 printf ("\ninsertion de %s\n", mot
);
168 arbre
= insere (arbre
, mot
, 0);
169 printf ("\naffichage arbre :\n");
170 affiche_arbre (arbre
, 0);
174 /* Exemple de trace d'execution *************************
176 saisir un mot : salut
195 **********************************************************/