diff --git a/dico.c b/dico.c index 2d7819a..bef55dd 100644 --- a/dico.c +++ b/dico.c @@ -6,7 +6,7 @@ typedef struct cell* ptarbre; typedef struct cell* ptcellule; typedef struct cell { - int lettre; + char lettre; ptarbre arbre; // Descend d'un étage dans le mot (lettre suivante du mot) ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position) } cell; @@ -18,34 +18,34 @@ void init_dico() arbre=NULL; } */ -ptarbre rech(ptarbre arbre, int lettre) +ptarbre rech(ptarbre arbre, char lettre) // recherche une lettre en ième position (correspondant à arbre) // Retourne l'adresse de l'abre contenant la lettre à cette position { while((arbre!=NULL) && (arbre->lettre != lettre)) { - printf("lettre : %c lettre cherchee : %c\n", arbre->lettre,lettre); + printf("lettre : %c lettre cherchee : %c\n", (arbre->lettre),lettre); arbre=arbre->suivant; } return arbre; } -void ajout_dico_tete(ptarbre *parbre, int lettre) +void init_dico(ptarbre *parbre, char lettre) { - parbre=malloc(sizeof(cell)); - (*parbre)->lettre=lettre; - printf("arbre lettre %c\n",(*parbre)->lettre); - (*parbre)->arbre=NULL; + (*parbre)=malloc(sizeof(cell)); + (*parbre)->arbre=malloc(sizeof(cell)); (*parbre)->suivant=NULL; + (*parbre)->lettre=lettre; + printf("init dico\n"); } -void ajout_dico(ptarbre arbre, ptarbre arbresuiv, int lettre) +void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre) { - arbresuiv=malloc(sizeof(cell)); - arbre->suivant=arbresuiv; // On relie la nouvelle lettre à l'avant dernière lettre - arbresuiv->lettre=lettre; - printf("arbre lettre : %c \n",arbresuiv->lettre); - arbresuiv->arbre=NULL; - arbresuiv->suivant=NULL; + *parbresuiv=malloc(sizeof(cell)); + (*parbre)->suivant=*parbresuiv; // On relie la nouvelle lettre à l'avant dernière lettre + (*parbresuiv)->arbre=malloc(sizeof(cell)); + (*parbresuiv)->suivant=NULL; + (*parbresuiv)->lettre=lettre; + printf("ajout lettre : %c \n",(*parbresuiv)->lettre); } void affiche_dico(ptarbre arbre) @@ -58,9 +58,9 @@ void affiche_dico(ptarbre arbre) int main() { ptarbre arbre_originel,arbre; - arbre_originel=malloc(sizeof(cell)); - arbre=arbre_originel; + arbre_originel=NULL; char c,t; + ptarbre rec; // Ouvrir fichier FILE *fp = fopen("words1.txt","r"); if (fp==NULL) @@ -74,40 +74,43 @@ int main() // { if (c != '\n') { - printf(" c %c\n", c); - printf("adresse %d\n ", rech(arbre,c)); - if (rech(arbre,c)==NULL) // Cas où c'est le premier mot + if (arbre_originel==NULL) // Cas où c'est le premier mot { - printf("rech =NULL \n"); - printf("rech :%p \n", rech(arbre,c)); - ajout_dico_tete(&arbre,c); - arbre=arbre->arbre; - } - else if (rech(arbre->suivant,c)==NULL) - { - printf("rech suiv = NUll \n"); - ajout_dico(arbre,arbre->suivant,c); - arbre=arbre->suivant; - } - + printf("arbre =NULL \n"); + init_dico(&arbre_originel,c); + + arbre=arbre_originel->arbre; + } - else + else // Cas où le dico n'est pas vide { - printf("rech pas null\n"); - while (rech(arbre->suivant,c)!=NULL) // Cas où le début du mot existe déjà et qu'on le complète + printf(" c: %c\n", c); + rec=rech(arbre,c); + printf("adr rech %p\n",rech(arbre,c)); + + if (rec==NULL) { - - arbre=rech(arbre->suivant,c)->arbre; // On va à l'étage d'après pour former le mot dans l'arbre + printf("rech = NUll \n"); + ajout_dico(&(arbre),&(rec),c); + arbre=rec->arbre; + } + + + else + {// Cas où le début du mot existe déjà et qu'on le complète + printf("rech pas null\n"); + arbre=rec->arbre; // On va à l'étage d'après pour former le mot dans l'arbre // affiche_dico(arbre); } - ajout_dico(arbre, arbre->suivant,c); - printf("lettre %c \n",arbre->lettre); + + // printf("lettre %c \n",arbre->lettre); } - } + } else { + printf("remise à 0\n"); arbre=arbre_originel; } - //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot + //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot } -- libgit2 0.21.2