Commit 6394a205b5b1410da28ef9827e8f60f7b548e5de

Authored by vsalingu
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
dico.c 0 → 100644
... ... @@ -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 +}
... ...