Blame view

projet.c 2.51 KB
c3db3af8   gcremasc   Ajout des fichier...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
  #include "projet.h"
  
  bool is_empty(ptcell pt)
  {
    return(pt==NULL);
  }
  
  bool feuille(ptcell pt)
  {
    for(int i=0; i<NB; i++)
      if(pt->arbre[i] != NULL)
        return false;
    return true;
  }
  
  void init_arbre(ptcell *pt)
  {
    if(is_empty(*pt))
      {
        *pt = malloc(sizeof(cell));
        (*pt)->lettre = '?';
        (*pt)->fin = false;
        for(int i=0; i<NB; i++)
          (*pt)->arbre[i] = NULL;
      }
  } 
  
  int indice_lettre(char lettre)
  {
    if(lettre>=97 && lettre<=122) 
      return lettre-'a';
    if(lettre>=65 && lettre<=90) 
      return lettre-'A';
    if(lettre == 39) 
      return lettre-13;
    else return -1;
  }
  
  void ajout_arbre(ptcell pt, char mot[])
  {
    int index=0;
    int indice;
    ptcell pt1 = pt;
    while(mot[index]!='\0')
    {
      indice = indice_lettre(mot[index]);
      if(pt1->arbre[indice]!=NULL)
      {
        pt1=pt1->arbre[indice];
        if(mot[index+1]=='\0')
          pt1->fin = true;
      }
      else
      {
        ptcell pt2 = NULL;
        pt2 = malloc(sizeof(cell));
        pt2->lettre = mot[index];
        for(int i=0; i<NB; i++)
          pt2->arbre[i]=NULL;
        pt2->fin = false;
        if(mot[index+1]=='\0')
          pt2->fin = true;
        pt1->arbre[indice] = pt2;
        pt1=pt1->arbre[indice];
      }
      index++;
    }
  }
  
  bool caract_fin(char lettre)
  {
    if(lettre==0) return true;
    if((lettre>=32 && lettre<=38)||(lettre>=40 && lettre<=47)||(lettre>=58 && lettre<=64)||(lettre>=123 && lettre<=126)) return true;
    return false;
  }
  
  void verifie_mot(ptcell pt, char mot[], int* compteur)
  {
    bool fin = false;
    int index = 0;
    int indice;
    ptcell pt1 = pt;
    while(!caract_fin(mot[index]))
    {
      indice = indice_lettre(mot[index]);
      if(pt1 != NULL && pt1->arbre[indice]!=NULL)
      {
        index++;
        pt1=pt1->arbre[indice];
        fin=pt1->fin;
      }
      else
      {
        fin = true;
        printf("Le mot %s n'est pas reconnu.\n", mot);
        (*compteur)++;
        break;
      }
    }
    if(!fin)
    {
      (*compteur)++;
      printf("Le mot %s n'est pas reconnu.\n", mot);
    }
  }
  
  // Lecture du fichier à analyser
  void lecture_texte(FILE* fp, ptcell* arbre, int* compteur)
  {
    char mot[MAX];
    while(1)
    {
      if(fscanf(fp, "%s", mot)!=1)
        break;
      verifie_mot(*arbre, mot, compteur);
    }
  }
  
  // Lecture du dictionnaire
  void lecture_dico(FILE* fp, ptcell* arbre)
  {
    char mot[MAX];
    while(1)
      {
        if(fscanf(fp, "%s", mot)!=1)
          break;
        ajout_arbre(*arbre, mot);
      } 
  }
  
  void free_arbre(ptcell* arbre)
  {
    if(*arbre!=NULL)
    {
      for(int i=0; i<NB; i++)
      {
        free_arbre(&(*arbre)->arbre[i]);
      }
      free(*arbre);
    }
  }