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 :

Parcourir un arbre + ecriture fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut Parcourir un arbre + ecriture fichier
    Bonjour,

    Je voudrais parcourir mon arbre (déjà construit) et écrire des informations dans un fichier texte avec une mise en forme simple :

    blibli blublu
    toto tutu titi
    exemple bis

    etc....quelle fonction dois-je utiliser ? sachant qu'une ligne correspond au même noeud dans mon arbre...je n'ai aucune idée comment commencer...


    2ème question : comment parcourir tous les noeuds de mon arbre ? ce n'est pas un arbre binaire et je n'en connaît pas la profondeur...chaque noeud peut avoir un père et/ou un frère...

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    En utilisant une file tu peux parcourir ton arbre par niveaux.
    Je n'ai pas compris :
    quelle fonction dois-je utiliser ? sachant qu'une ligne correspond au même noeud dans mon arbre...
    Tu fais un fprint avec les valeurs du noeud ?
    D'autre part :
    chaque noeud peut avoir un père et/ou un frère...
    Tu veux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaque noeud peut avoir un fils et/ou un frère...
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut Re: [C] Parcourir un arbre + ecriture fichier
    Citation Envoyé par arnapou
    Je voudrais parcourir mon arbre (déjà construit) et écrire des informations dans un fichier texte avec une mise en forme simple :

    blibli blublu
    toto tutu titi
    exemple bis

    etc....quelle fonction dois-je utiliser ? sachant qu'une ligne correspond au même noeud dans mon arbre...je n'ai aucune idée comment commencer...
    Pour ouvrir/fermer un fichier, il faut utiliser fopen et fclose.

    Pour lire/écrire dans un fichier, il faut utiliser: fread/fwrite.

    2ème question : comment parcourir tous les noeuds de mon arbre ? ce n'est pas un arbre binaire et je n'en connaît pas la profondeur...chaque noeud peut avoir un père et/ou un frère...
    C'est plutôt une question algorithmique, mais généralement on commence par la racine de l'arbre, on affiche son information (à la limite le nombre de fils qu'il a) et après on fait un appel récursif vers ses fils... Ecrire une telle structure de données dans un fichier est un problème intéressant et tu apprendras beaucoup en le faisant. Je te laisse donc le côté implémentation, renvoie un post lorsque tu auras commencer et si tu es bloqué.

    Jc

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    euh..oui pardon un fils et un frère...dsl...

    en fait, je reformule la question : comment obtenir une mise en forme comme au dessus ? je ne connais pas la longueur de la chaine la plus longue de chaque colonne...comment savoir le nombre de tabulations à mettre avec un sprintf ? pour ensuite faire un fprintf ?

    pour la lecture de l'arbre, chaque niveau (ensemble de frères) seraient une file ?je ne vois pas bien comment commencer...plusieurs freres d'une même ligne peuvent avoir des fils dans mon prog...ça sent la récursivité là...

    Je vais tenter de voir encore si je trouve des exemples sur le web...parce que là, je suis toujours dans le brouillard....

    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    je viens de me rendre compte que la mise en forme est pas du tout passée...je voudrais que tout soit aligné avec des tabulations et cie comme un fichier de configuration sous linux par ex...

    Pour les fonctions de base du fichier (fopen, fclose...), ce n'est pas ça que je recherche comme info je les ai déjà bien utilisés pour construire mon arbre de MIB....

    Merci pour les infos
    A +

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par arnapou
    pour la lecture de l'arbre, chaque niveau (ensemble de frères) seraient une file ?je ne vois pas bien comment commencer...plusieurs freres d'une même ligne peuvent avoir des fils dans mon prog...ça sent la récursivité là...
    Ben non justement.
    l'algo est assez simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    enfiler la racine
    tant que la file n'est pas vide
      defiler un noeud
      traiter le noeud
      enfiler tous ses fils
    fin tant que
    (désolé pour le vocabulaire )
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Bon, merci pour l'algo...j'y réfléchi parce que là...tout n'est pas clair dans ma tite tête ...

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [C] Parcourir un arbre + ecriture fichier
    Citation Envoyé par fearyourself
    Pour lire/écrire dans un fichier, il faut utiliser: fread/fwrite.
    Si c'est du texte, fgets() / fprintf() ...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Trap D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    enfiler la racine
    tant que la file n'est pas vide
      defiler un noeud
      traiter le noeud
      enfiler tous ses fils
    fin tant que
    Bon, j'appelle le juge Outreau...
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par arnapou
    je viens de me rendre compte que la mise en forme est pas du tout passée...j
    Utilise les balises code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    blibli   blublu
    toto     tutu     titi
    exemple  bis
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                   1
                  /
                 2 __________ 3 ___________ 4
                /            /
               5 _ 6 _ 7    8
                      /    /
                     9    10________11
    Je me suis fait un ex pour essayer de trouver l'algo...mais toujours pas...
    2 a un frere et un fils, il faudrait donc que je stocke sa position (puisque j'ai des éléments simplement chainés, je ne peux pas faire de marche arrière après), même topo au niveau du 3 (il a un fils et un frère)....comment savoir combien de variables temporaires je dois déclarer ?
    Enfin, là, suis pommée...un grand manque d'inspiration et sur le oueb, toujours les mêmes exemples d'arbres binaires...

    Est-ce que qqn peut me guider un peu plus au niveau algo ? l'aide du dessus ne m'a pas beaucoup parlé...

    A +

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    A partir de ce que tu viens de montrer, on peut faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    enfiler la racine
    tant que la file n'est pas vide
      defiler un noeud
      tant que le noeud n'est pas vide
        traiter le noeud
        enfiler tous ses fils
        noeud <- frere du noeud
      fin tant que 
    fin tant que
    je n'ai jamais eu à traiter ce cas, mais on doit pas être loin de la solution.

    Pour ton exemple ça donne ca:
    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
    enfiler 1
    defiler 1
    traiter 1
    enfiler 2
    pas de frère
    defiler 2
    traiter 2
    enfiler 5
    2 devient 3 (frere de 2)
    traiter 3
    enfiler 8
    3 devient 4
    traiter 4
    pas de fils
    pas de frère
    defiler 5
    traiter 5
    pas de fils
    5 devient 6
    traiter 6
    pas de fils
    6 devient 7
    traiter 7
    enfiler 9
    pas de frère
    défiler 8
    traiter 8
    enfiler 10
    pas de frère
    défiler 9
    traiter 9
    pas de fils
    pas de frère
    défiler 10
    traiter 1à
    pas de fils
    10 devient 11
    traiter 11
    pas de fils 
    pas de frère
    file vide !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Y'a quelqu'un qui regarde un peu les pages du site notament lorsqu'il y a des anonces ... Ca fait plaisir de se donner tant de mal pour rien ...

    http://rperrot.developpez.com/articl...es/arbres/#LVI


  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Bon, ben, avec de l'aide à domicile voilà ce qu'on a pondu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void Ecriture_Fichier (FILE *fd, struct Noeud *MON_ARBRE) {
    	if(MON_ARBRE != NULL) {
    		fprintf(fd, "%s\t%s\t%s\t%s\t%s\n", MON_ARBRE->Nom, MON_ARBRE->AccesService, MON_ARBRE->FichierSrc, MON_ARBRE->Numero, MON_ARBRE->NumeroMIB);
    		Ecriture_Fichier(fd, MON_ARBRE->Frere);
    		Ecriture_Fichier(fd, MON_ARBRE->Fils);
    	}
    }
    Pour le lien vers le cours sur les arbres, j'ai pas tout compris encore...dsl...
    A + et merci

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Avec ta fonction tu parcours ton arbre comme ça :
    1, 2, 3, 4, 8, 10 , 11, 5 , 6, 7, 9.
    C'est ce que tu veux ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  16. #16
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Trap D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    enfiler la racine
    tant que la file n'est pas vide
      defiler un noeud
      traiter le noeud
      enfiler tous ses fils
    fin tant que
    Bon, j'appelle le juge Outreau...


    C'est trop marrant
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  17. #17
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Ben, en fait, peu m'importe l'ordre de parcours...ce que je veux, c être sure que j'ai lu tous les noeuds...de toute manière, il n'y a pas d'intérêt à avoir un truc dans l'ordre alphabétique...
    Merci beaucoup pour votre aide en tout cas... 8)

    A +
    Arnapou

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][debutant]creation + ecriture fichier
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/01/2006, 08h28
  2. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  3. [Delphi 2005] Comment parcourir la liste des fichiers ?
    Par babyface dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2005, 11h01
  4. [LG]Lecture-ecriture fichier
    Par arno15 dans le forum Langage
    Réponses: 19
    Dernier message: 03/02/2005, 22h25
  5. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40

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