Commit fb82dc550e2038caf4c3109499b562b6c6bdf01e

Authored by vsalingu
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  
... ...