Commit 3b142eb18bebd70c7805ede5efd76267ad481a5f

Authored by mclaudel
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 }
... ...