Commit 6394a205b5b1410da28ef9827e8f60f7b548e5de
1 parent
caf6b693
Lecture du fichier ok, erreur de sgementation sur l'ajout: utilisation de pointeur de pointeur
Showing
1 changed file
with
118 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,118 @@ | @@ -0,0 +1,118 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | + | ||
4 | + | ||
5 | +typedef struct cell* ptarbre; | ||
6 | +typedef struct cell* ptcellule; | ||
7 | + | ||
8 | +typedef struct cell { | ||
9 | + int lettre; | ||
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) | ||
12 | +} cell; | ||
13 | + | ||
14 | +/* Pas utile | ||
15 | +void init_dico() | ||
16 | +{ | ||
17 | + ptarbre arbre; | ||
18 | + arbre=NULL; | ||
19 | +} | ||
20 | +*/ | ||
21 | +ptarbre rech(ptarbre arbre, int lettre) | ||
22 | +// recherche une lettre en ième position (correspondant à arbre) | ||
23 | +// Retourne l'adresse de l'abre contenant la lettre à cette position | ||
24 | +{ | ||
25 | + while((arbre!=NULL) && (arbre->lettre != lettre)) | ||
26 | + { | ||
27 | + printf("lettre : %c lettre cherchee : %c\n", arbre->lettre,lettre); | ||
28 | + arbre=arbre->suivant; | ||
29 | + } | ||
30 | + return arbre; | ||
31 | +} | ||
32 | +void ajout_dico_tete(ptarbre *parbre, int lettre) | ||
33 | +{ | ||
34 | + parbre=malloc(sizeof(cell)); | ||
35 | + (*parbre)->lettre=lettre; | ||
36 | + printf("arbre lettre %c\n",(*parbre)->lettre); | ||
37 | + (*parbre)->arbre=NULL; | ||
38 | + (*parbre)->suivant=NULL; | ||
39 | +} | ||
40 | + | ||
41 | +void ajout_dico(ptarbre arbre, ptarbre arbresuiv, int lettre) | ||
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; | ||
49 | +} | ||
50 | + | ||
51 | +void affiche_dico(ptarbre arbre) | ||
52 | +// affiche tout le dictionnaire à partir de l'arbre (donc le numéro de lettre) sélectionné | ||
53 | +{ | ||
54 | + | ||
55 | +} | ||
56 | + | ||
57 | + | ||
58 | +int main() | ||
59 | +{ | ||
60 | + ptarbre arbre_originel,arbre; | ||
61 | + arbre_originel=malloc(sizeof(cell)); | ||
62 | + arbre=arbre_originel; | ||
63 | + char c,t; | ||
64 | + // Ouvrir fichier | ||
65 | + FILE *fp = fopen("words1.txt","r"); | ||
66 | + if (fp==NULL) | ||
67 | + printf("words1 inaccessible \n",fp); | ||
68 | + else | ||
69 | + printf("words1 accessible \n",fp); | ||
70 | + | ||
71 | + while (fscanf(fp,"%c",&c)!= EOF) // lecture de tout le fichier | ||
72 | + { | ||
73 | + // while (fscanf(fp,"%d",&c)!='\n') // Tant que le mot n'est pas fini, on ajoute les lettres à la suite | ||
74 | + // { | ||
75 | + if (c != '\n') | ||
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 | ||
80 | + { | ||
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 | + | ||
93 | + | ||
94 | + else | ||
95 | + { | ||
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 | ||
98 | + { | ||
99 | + | ||
100 | + arbre=rech(arbre->suivant,c)->arbre; // On va à l'étage d'après pour former le mot dans l'arbre | ||
101 | + // affiche_dico(arbre); | ||
102 | + } | ||
103 | + ajout_dico(arbre, arbre->suivant,c); | ||
104 | + printf("lettre %c \n",arbre->lettre); | ||
105 | + } | ||
106 | + } | ||
107 | + else { | ||
108 | + arbre=arbre_originel; | ||
109 | + } | ||
110 | + //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot | ||
111 | + } | ||
112 | + | ||
113 | + | ||
114 | + fclose(fp); | ||
115 | + | ||
116 | + | ||
117 | + return 0; | ||
118 | +} |