diff --git a/dico.c b/dico.c new file mode 100644 index 0000000..2d7819a --- /dev/null +++ b/dico.c @@ -0,0 +1,118 @@ +#include +#include + + +typedef struct cell* ptarbre; +typedef struct cell* ptcellule; + +typedef struct cell { + int 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; + +/* Pas utile +void init_dico() +{ + ptarbre arbre; + arbre=NULL; +} +*/ +ptarbre rech(ptarbre arbre, int 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); + arbre=arbre->suivant; + } + return arbre; +} +void ajout_dico_tete(ptarbre *parbre, int lettre) +{ + parbre=malloc(sizeof(cell)); + (*parbre)->lettre=lettre; + printf("arbre lettre %c\n",(*parbre)->lettre); + (*parbre)->arbre=NULL; + (*parbre)->suivant=NULL; +} + +void ajout_dico(ptarbre arbre, ptarbre arbresuiv, int 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; +} + +void affiche_dico(ptarbre arbre) +// affiche tout le dictionnaire à partir de l'arbre (donc le numéro de lettre) sélectionné +{ + +} + + +int main() +{ + ptarbre arbre_originel,arbre; + arbre_originel=malloc(sizeof(cell)); + arbre=arbre_originel; + char c,t; + // Ouvrir fichier + FILE *fp = fopen("words1.txt","r"); + if (fp==NULL) + printf("words1 inaccessible \n",fp); + else + printf("words1 accessible \n",fp); + + while (fscanf(fp,"%c",&c)!= EOF) // lecture de tout le fichier + { + // while (fscanf(fp,"%d",&c)!='\n') // Tant que le mot n'est pas fini, on ajoute les lettres à la suite + // { + 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 + { + 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; + } + + + else + { + 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 + { + + arbre=rech(arbre->suivant,c)->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); + } + } + else { + arbre=arbre_originel; + } + //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot + } + + + fclose(fp); + + + return 0; +} -- libgit2 0.21.2