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,7 +6,7 @@ typedef struct cell* ptarbre;
6 typedef struct cell* ptcellule; 6 typedef struct cell* ptcellule;
7 7
8 typedef struct cell { 8 typedef struct cell {
9 - int lettre; 9 + char lettre;
10 ptarbre arbre; // Descend d'un étage dans le mot (lettre suivante du mot) 10 ptarbre arbre; // Descend d'un étage dans le mot (lettre suivante du mot)
11 ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position) 11 ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position)
12 } cell; 12 } cell;
@@ -18,34 +18,34 @@ void init_dico() @@ -18,34 +18,34 @@ void init_dico()
18 arbre=NULL; 18 arbre=NULL;
19 } 19 }
20 */ 20 */
21 -ptarbre rech(ptarbre arbre, int lettre) 21 +ptarbre rech(ptarbre arbre, char lettre)
22 // recherche une lettre en ième position (correspondant à arbre) 22 // recherche une lettre en ième position (correspondant à arbre)
23 // Retourne l'adresse de l'abre contenant la lettre à cette position 23 // Retourne l'adresse de l'abre contenant la lettre à cette position
24 { 24 {
25 while((arbre!=NULL) && (arbre->lettre != lettre)) 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 arbre=arbre->suivant; 28 arbre=arbre->suivant;
29 } 29 }
30 return arbre; 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 (*parbre)->suivant=NULL; 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 void affiche_dico(ptarbre arbre) 51 void affiche_dico(ptarbre arbre)
@@ -58,9 +58,9 @@ void affiche_dico(ptarbre arbre) @@ -58,9 +58,9 @@ void affiche_dico(ptarbre arbre)
58 int main() 58 int main()
59 { 59 {
60 ptarbre arbre_originel,arbre; 60 ptarbre arbre_originel,arbre;
61 - arbre_originel=malloc(sizeof(cell));  
62 - arbre=arbre_originel; 61 + arbre_originel=NULL;
63 char c,t; 62 char c,t;
  63 + ptarbre rec;
64 // Ouvrir fichier 64 // Ouvrir fichier
65 FILE *fp = fopen("words1.txt","r"); 65 FILE *fp = fopen("words1.txt","r");
66 if (fp==NULL) 66 if (fp==NULL)
@@ -74,40 +74,43 @@ int main() @@ -74,40 +74,43 @@ int main()
74 // { 74 // {
75 if (c != '\n') 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 // affiche_dico(arbre); 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 else { 109 else {
  110 + printf("remise à 0\n");
108 arbre=arbre_originel; 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