IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

souci arbre binaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Par défaut souci arbre binaire
    Bonjour , je travaille sur un arbre binaire qui doit me rendre en sortie
    les token d'un fichier ainsi que leur nombre d'occurences et la ligne ou ils apparraissent.
    Je bloque actuellement sur la recuperation de la ligne dans mon arbre.
    Pourriez vous m'aider le reste fonctionne parfaitement.
    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #define lg_max 100
     
    typedef struct noeud 
    { 
        char *mot; 
        int nb_occ; 
        int *numeroligne;
        struct noeud *gauche; 
        struct noeud *droit; 
    } Noeud; 
     
     
     
    typedef Noeud *Adr_noeud; 
     
    Adr_noeud inser_arbre(Adr_noeud rac, char *un_mot, int *numero) 
        { 
        int comp; 
     
        if (rac==NULL) 
    { 
            rac = (Adr_noeud) malloc(sizeof(Noeud)); 
            rac->mot = (char *) malloc(strlen(un_mot)+1); 
            rac->nb_occ = 1; 
            rac->numeroligne = 0;
            strcpy(rac->mot,un_mot); 
            rac->gauche = rac->droit = NULL; 
     
        } 
        else if ((comp = strcmp(un_mot, rac->mot)) == 0) 
             {
             rac->nb_occ++;
             rac->numeroligne = numero; // je recupere ma ligne
             }
        else if (comp < 0)  rac->gauche = inser_arbre(rac->gauche, un_mot); 
        else rac->droit = inser_arbre(rac->droit, un_mot); 
        return rac; 
    } 
     
    void arbre_vers_sortie(Adr_noeud rac) 
    { 
        if (rac != NULL) 
        { 
            arbre_vers_sortie(rac->gauche); 
            printf(" %s (%d fois)\n", rac->mot, rac->nb_occ); 
            arbre_vers_sortie( rac->droit); 
        } 
    } 
     
    int main(int argc, char *argv[])
    {
        char ligne[lg_max];
        char sep[]= " \n'";
        char *ptr;
        int *numligne;
        Noeud * rac;
        rac = NULL;
     
        FILE * file = NULL;
        file = fopen(argv[1],"r");
        while (fgets(ligne,lg_max,file))
        {
              ptr = strtok(ligne,sep);
              while ( ptr != NULL)
              {
              printf("token %s\n",ptr);
              rac = inser_arbre(rac,ptr,numligne); //puis je passer ma ligne en parametre ?
              ptr = strtok(NULL, sep);
              }
              numl++;
        }
        fclose(file);
        printf("\n");
        arbre_vers_sortie(rac);
     
      system("PAUSE");	
      return 0;
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour, je ne suis pas sur de comprendre ton ptoblème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    09-09-01-1.c: In function `inser_arbre':
    09-09-01-1.c:36: error: too few arguments to function `inser_arbre'
    09-09-01-1.c:38: error: too few arguments to function `inser_arbre'
    09-09-01-1.c: In function `main':
    09-09-01-1.c:69: error: `numl' undeclared (first use in this function)
    09-09-01-1.c:69: error: (Each undeclared identifier is reported only once
    09-09-01-1.c:69: error: for each function it appears in.)
    09-09-01-1.c: At top level:
    09-09-01-1.c:51: warning: unused parameter 'argc'
    Quand on corrige ces erreurs, le résultat semble cohérent :
    Code en entrée : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    5 5
    2 2
    4 0
    14 9 12 9 13
    14 2 3 4 3
    13 12 8 2 11
    5 5 6 9 13
    6 2 11 6 3
    Code en sortie : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     0 (1 fois)
     11 (2 fois)
     12 (2 fois)
     13 (3 fois)
     14 (2 fois)
     2 (5 fois)
     3 (3 fois)
     4 (2 fois)
     5 (4 fois)
     6 (3 fois)
     8 (1 fois)
     9 (3 fois)

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Par défaut
    merci pour la reponse, oui en fait je me suis mal exprimé ^^
    je voudrais que mon programme puisse renvoyer en plus du nombre d'occurence, le ou les lignes où ils apparaissent.
    lorque j'appelle ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rac = inser_arbre(rac,ptr);
    je dois donc envoyer en + le numero de ma ligne d'ou le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rac = inser_arbre(rac,ptr,numligne);
    apres avoir chercher, j'ai compris qu'il fallait que je crée mes feuilles de telle maniere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct feuille
    {
    char *mot; // c est le token que je recupere comme dans mon code precedent
    struct liste* numerolignes;// adresse du premier element de la liste de chainée contenant les numeros de ligne des occurences.
    }
     
    struct liste 
    {
    int numero; // valeur de la ligne a laquelle on trouve le token (mot)
    struct liste * suivant;
    }
    en gros faut que lorsque j appelle ma fonction insert, le mot soit recuperé dans ma feuille ainsi que les numeros de ligne qui eux se trouvent dans ma liste.
    Mais je ne sais pas du tout comment m y prendre.
    j'appelle donc a l'aide ! ^^
    Merci

Discussions similaires

  1. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  2. suppression d'un arbre binaire
    Par NomUtilisateurDejaPris dans le forum C
    Réponses: 11
    Dernier message: 16/02/2004, 10h05
  3. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45
  4. Arbre binaire
    Par Heaven dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/02/2004, 19h01
  5. [LG]probleme de creation arbre binaire
    Par jsaviola dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2004, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo