Commit fb82dc550e2038caf4c3109499b562b6c6bdf01e
1 parent
6394a205
dico ok à vérifier avec une fonction d'affichage
Showing
1 changed file
with
44 additions
and
41 deletions
Show diff stats
... | ... | @@ -6,7 +6,7 @@ typedef struct cell* ptarbre; |
6 | 6 | typedef struct cell* ptcellule; |
7 | 7 | |
8 | 8 | typedef struct cell { |
9 | - int lettre; | |
9 | + char lettre; | |
10 | 10 | ptarbre arbre; // Descend d'un étage dans le mot (lettre suivante du mot) |
11 | 11 | ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position) |
12 | 12 | } cell; |
... | ... | @@ -18,34 +18,34 @@ void init_dico() |
18 | 18 | arbre=NULL; |
19 | 19 | } |
20 | 20 | */ |
21 | -ptarbre rech(ptarbre arbre, int lettre) | |
21 | +ptarbre rech(ptarbre arbre, char lettre) | |
22 | 22 | // recherche une lettre en ième position (correspondant à arbre) |
23 | 23 | // Retourne l'adresse de l'abre contenant la lettre à cette position |
24 | 24 | { |
25 | 25 | while((arbre!=NULL) && (arbre->lettre != lettre)) |
26 | 26 | { |
27 | - printf("lettre : %c lettre cherchee : %c\n", arbre->lettre,lettre); | |
27 | + printf("lettre : %c lettre cherchee : %c\n", (arbre->lettre),lettre); | |
28 | 28 | arbre=arbre->suivant; |
29 | 29 | } |
30 | 30 | return arbre; |
31 | 31 | } |
32 | -void ajout_dico_tete(ptarbre *parbre, int lettre) | |
32 | +void init_dico(ptarbre *parbre, char lettre) | |
33 | 33 | { |
34 | - parbre=malloc(sizeof(cell)); | |
35 | - (*parbre)->lettre=lettre; | |
36 | - printf("arbre lettre %c\n",(*parbre)->lettre); | |
37 | - (*parbre)->arbre=NULL; | |
34 | + (*parbre)=malloc(sizeof(cell)); | |
35 | + (*parbre)->arbre=malloc(sizeof(cell)); | |
38 | 36 | (*parbre)->suivant=NULL; |
37 | + (*parbre)->lettre=lettre; | |
38 | + printf("init dico\n"); | |
39 | 39 | } |
40 | 40 | |
41 | -void ajout_dico(ptarbre arbre, ptarbre arbresuiv, int lettre) | |
41 | +void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre) | |
42 | 42 | { |
43 | - arbresuiv=malloc(sizeof(cell)); | |
44 | - arbre->suivant=arbresuiv; // On relie la nouvelle lettre à l'avant dernière lettre | |
45 | - arbresuiv->lettre=lettre; | |
46 | - printf("arbre lettre : %c \n",arbresuiv->lettre); | |
47 | - arbresuiv->arbre=NULL; | |
48 | - arbresuiv->suivant=NULL; | |
43 | + *parbresuiv=malloc(sizeof(cell)); | |
44 | + (*parbre)->suivant=*parbresuiv; // On relie la nouvelle lettre à l'avant dernière lettre | |
45 | + (*parbresuiv)->arbre=malloc(sizeof(cell)); | |
46 | + (*parbresuiv)->suivant=NULL; | |
47 | + (*parbresuiv)->lettre=lettre; | |
48 | + printf("ajout lettre : %c \n",(*parbresuiv)->lettre); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | void affiche_dico(ptarbre arbre) |
... | ... | @@ -58,9 +58,9 @@ void affiche_dico(ptarbre arbre) |
58 | 58 | int main() |
59 | 59 | { |
60 | 60 | ptarbre arbre_originel,arbre; |
61 | - arbre_originel=malloc(sizeof(cell)); | |
62 | - arbre=arbre_originel; | |
61 | + arbre_originel=NULL; | |
63 | 62 | char c,t; |
63 | + ptarbre rec; | |
64 | 64 | // Ouvrir fichier |
65 | 65 | FILE *fp = fopen("words1.txt","r"); |
66 | 66 | if (fp==NULL) |
... | ... | @@ -74,40 +74,43 @@ int main() |
74 | 74 | // { |
75 | 75 | if (c != '\n') |
76 | 76 | { |
77 | - printf(" c %c\n", c); | |
78 | - printf("adresse %d\n ", rech(arbre,c)); | |
79 | - if (rech(arbre,c)==NULL) // Cas où c'est le premier mot | |
77 | + if (arbre_originel==NULL) // Cas où c'est le premier mot | |
80 | 78 | { |
81 | - printf("rech =NULL \n"); | |
82 | - printf("rech :%p \n", rech(arbre,c)); | |
83 | - ajout_dico_tete(&arbre,c); | |
84 | - arbre=arbre->arbre; | |
85 | - } | |
86 | - else if (rech(arbre->suivant,c)==NULL) | |
87 | - { | |
88 | - printf("rech suiv = NUll \n"); | |
89 | - ajout_dico(arbre,arbre->suivant,c); | |
90 | - arbre=arbre->suivant; | |
91 | - } | |
92 | - | |
79 | + printf("arbre =NULL \n"); | |
80 | + init_dico(&arbre_originel,c); | |
81 | + | |
82 | + arbre=arbre_originel->arbre; | |
83 | + } | |
93 | 84 | |
94 | - else | |
85 | + else // Cas où le dico n'est pas vide | |
95 | 86 | { |
96 | - printf("rech pas null\n"); | |
97 | - while (rech(arbre->suivant,c)!=NULL) // Cas où le début du mot existe déjà et qu'on le complète | |
87 | + printf(" c: %c\n", c); | |
88 | + rec=rech(arbre,c); | |
89 | + printf("adr rech %p\n",rech(arbre,c)); | |
90 | + | |
91 | + if (rec==NULL) | |
98 | 92 | { |
99 | - | |
100 | - arbre=rech(arbre->suivant,c)->arbre; // On va à l'étage d'après pour former le mot dans l'arbre | |
93 | + printf("rech = NUll \n"); | |
94 | + ajout_dico(&(arbre),&(rec),c); | |
95 | + arbre=rec->arbre; | |
96 | + } | |
97 | + | |
98 | + | |
99 | + else | |
100 | + {// Cas où le début du mot existe déjà et qu'on le complète | |
101 | + printf("rech pas null\n"); | |
102 | + arbre=rec->arbre; // On va à l'étage d'après pour former le mot dans l'arbre | |
101 | 103 | // affiche_dico(arbre); |
102 | 104 | } |
103 | - ajout_dico(arbre, arbre->suivant,c); | |
104 | - printf("lettre %c \n",arbre->lettre); | |
105 | + | |
106 | + // printf("lettre %c \n",arbre->lettre); | |
105 | 107 | } |
106 | - } | |
108 | + } | |
107 | 109 | else { |
110 | + printf("remise à 0\n"); | |
108 | 111 | arbre=arbre_originel; |
109 | 112 | } |
110 | - //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot | |
113 | + //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot | |
111 | 114 | } |
112 | 115 | |
113 | 116 | ... | ... |