Commit 3b142eb18bebd70c7805ede5efd76267ad481a5f
1 parent
5a0b8312
Projet modifié
Showing
1 changed file
with
58 additions
and
1 deletions
Show diff stats
correcteur.c
... | ... | @@ -13,6 +13,24 @@ typedef struct node { |
13 | 13 | int dernier; |
14 | 14 | } Node; |
15 | 15 | |
16 | +bool is_empty(struct node *tree) | |
17 | +{ | |
18 | + return tree==NULL; | |
19 | +} | |
20 | + | |
21 | +bool is_leaf(struct node *tree) | |
22 | +{ | |
23 | + int cpt; | |
24 | + int i=0; | |
25 | + if (is_empty(tree)) return 1; | |
26 | + while (tree->lettres[i] != NULL){ | |
27 | + cpt++; | |
28 | + i++; | |
29 | + } | |
30 | + if (cpt !=0) cpt=1; | |
31 | + return(!is_empty(tree) && !cpt); | |
32 | +} | |
33 | + | |
16 | 34 | |
17 | 35 | void ajout(Node **N, char mot) |
18 | 36 | { |
... | ... | @@ -27,6 +45,10 @@ void ajout_alphab(Node ** pn, char * mot,int cpt) |
27 | 45 | { |
28 | 46 | int i = 0; |
29 | 47 | while (mot[cpt] != '\0'){ |
48 | + if ((*pn)==NULL){ | |
49 | + ajout(pn,mot[cpt]); | |
50 | + return; | |
51 | + } | |
30 | 52 | while ((*pn)->lettres[i] != NULL){ |
31 | 53 | if (strcmp(&(*pn)->l,mot) != 0){ |
32 | 54 | i++; |
... | ... | @@ -34,17 +56,19 @@ void ajout_alphab(Node ** pn, char * mot,int cpt) |
34 | 56 | *pn=(*pn)->lettres[i]; |
35 | 57 | return ajout_alphab(pn,mot,cpt++); |
36 | 58 | } |
59 | + (*pn)->dernier++; | |
37 | 60 | ajout(&(*pn)->lettres[i],mot[cpt]); |
38 | 61 | *pn=(*pn)->lettres[i]; |
39 | 62 | cpt++; |
40 | 63 | } |
64 | + (*pn)->fin_de_mot=1; | |
41 | 65 | } |
42 | 66 | |
43 | 67 | |
44 | 68 | Node * charger_arbre(Node ** Arbre){ |
45 | 69 | FILE * dico; |
46 | 70 | char mot[MAX_LETTRES]; |
47 | - dico = fopen("words.txt","r"); | |
71 | + dico = fopen("test.txt","r"); | |
48 | 72 | while (fscanf(dico,"%s",mot) == 1){ |
49 | 73 | ajout_alphab(Arbre,mot,0); |
50 | 74 | } |
... | ... | @@ -52,7 +76,40 @@ Node * charger_arbre(Node ** Arbre){ |
52 | 76 | return *Arbre; |
53 | 77 | } |
54 | 78 | |
79 | +void affichage_arbre(Node * Arbre) | |
80 | +{ | |
81 | + if (is_empty(Arbre)) return; | |
82 | + if (Arbre->lettres[0]== NULL) return; | |
83 | + for (int i=0; i<Arbre->dernier; i++){ | |
84 | + printf("%c -> %c",Arbre->l,Arbre->lettres[i]->l); | |
85 | + affichage_arbre(Arbre->lettres[i]); | |
86 | + if (Arbre->fin_de_mot) printf("fin de mot"); | |
87 | + } | |
88 | + | |
89 | +} | |
90 | + | |
91 | + | |
92 | +void detruire_arbre(Node ** Arbre) | |
93 | +{ | |
94 | + for (int i=0; i<(*Arbre)->dernier ; i++){ | |
95 | + if (*Arbre!=NULL) detruire_arbre(&(*Arbre)->lettres[i]); | |
96 | + } | |
97 | + free(*Arbre); | |
98 | +} | |
99 | + | |
100 | +void initialisation(Node ** Arbre){ | |
101 | + Node *nouveau = malloc(sizeof(struct node)); | |
102 | + (*nouveau).l='?'; | |
103 | + for (int i=0; i<27; i++) nouveau->lettres[i]=NULL; | |
104 | + nouveau->dernier=0; | |
105 | + *Arbre = nouveau; | |
106 | +} | |
55 | 107 | |
56 | 108 | int main(){ |
109 | + Node * Arbre; | |
110 | + initialisation(&Arbre); | |
111 | + charger_arbre(&Arbre); | |
112 | + affichage_arbre(Arbre); | |
113 | + detruire_arbre(&Arbre); | |
57 | 114 | return 0; |
58 | 115 | } | ... | ... |