Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/05/2006, à 17:58

Premium

[Résolu] Aide pour un affichage correct

Bonjour,

j'aurais besoin d'aide concernant l'écriture d'une boucle pour m'afficher un sommet et ses voisins sur une ligne.
Par exemple si un sommet A à 2 voisins B et C, l'affichage serait :

A,B
A,C

"arbre->liste.nb" => c'est le nb de noeuds distincts de l'arbre
"arbre->liste.elem[i]->tabNoeud.nb" => c'est le nb de voisins

avec cette boucle :

 for (i=0, ptDistinct=arbre->liste.elem; i < arbre->liste.nb; i++, ptDistinct++)
     {
       j=0;
       ptVoisin=(*ptDistinct)->tabNoeud.elem;
       printf("%s", Noeud_printf(*ptDistinct));
       while(j<(*ptDistinct)->tabNoeud.nb)
     {
       printf(",%s", Noeud_printf(*ptVoisin));
       j++;
       ptVoisin++;
       printf("\n");
     }
     }

j'obtiens un affichage de ce type :

A,B
,C

Le sommet A n'est pas réécrit


Alors j'ai essayé ceci :

for (i=0, ptDistinct=arbre->liste.elem; i < arbre->liste.nb; i++, ptDistinct++) {
       j=0;
       ptVoisin=(*ptDistinct)->tabNoeud.elem;
       while(j<(*ptDistinct)->tabNoeud.nb) {
       printf("%s,%s\n",Noeud_printf(*ptDistinct), Noeud_printf(*ptVoisin));
       j++;
       ptVoisin++;
     }
}

Avec cet affichage, j'obtiens 
A,A
A,A


Est-ce que vous pourriez m'aider car je n'y arrive pas à avoir un affichage correcte?

Merci

Dernière modification par Premium (Le 28/05/2006, à 13:59)

Hors ligne

#2 Le 27/05/2006, à 23:01

gene69

Re : [Résolu] Aide pour un affichage correct

for (i=0, ptDistinct=arbre->liste.elem; i < arbre->liste.nb; i++, ptDistinct++)
     {
       j=0;
       ptVoisin=(*ptDistinct)->tabNoeud.elem;

rien que cette ligne me fait bondir. Pourquoi utilises tu l'opérateur ternaire? tu te rends compte le risque que tu prends?

même remarque pour le *ptDistinct ++

perso je fais mes affichage avec une recursion et non des itérations.

affichage(noeud) {
   if PREFIXE affiche (point);
   affichage(fil gauche);
   if INFIXE affiche (point);
   affichage(fil droit);
   if POSTFIXE affiche(point);
}


Mais en fait ce que tu voudrais faire maintenant c'est une fonction qui affiche tout les chemins jusqu'à la feuille? fait le parcourt comme je te le proposose mais en construisant une chaine que tu dupliques à chaque itération et tu concatenes l'affichage que tu souhaites. enfin tu affiches lorsque tu arrives vers la feuille.

un exemple apres mangé. wink


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#3 Le 28/05/2006, à 13:59

Premium

Re : [Résolu] Aide pour un affichage correct

gene69 a écrit :
for (i=0, ptDistinct=arbre->liste.elem; i < arbre->liste.nb; i++, ptDistinct++)
     {
       j=0;
       ptVoisin=(*ptDistinct)->tabNoeud.elem;

rien que cette ligne me fait bondir. Pourquoi utilises tu l'opérateur ternaire? tu te rends compte le risque que tu prends?

même remarque pour le *ptDistinct ++

perso je fais mes affichage avec une recursion et non des itérations.

affichage(noeud) {
   if PREFIXE affiche (point);
   affichage(fil gauche);
   if INFIXE affiche (point);
   affichage(fil droit);
   if POSTFIXE affiche(point);
}


Mais en fait ce que tu voudrais faire maintenant c'est une fonction qui affiche tout les chemins jusqu'à la feuille? fait le parcourt comme je te le proposose mais en construisant une chaine que tu dupliques à chaque itération et tu concatenes l'affichage que tu souhaites. enfin tu affiches lorsque tu arrives vers la feuille.

un exemple apres mangé. wink

Salut,

j'ai résolu mon problème d'affichage en faisant ceci :;)

for (i=0, ptDistinct=arbre->liste.elem; i < arbre->liste.nb; i++, ptDistinct++) {
       j=0;
       ptVoisin=(*ptDistinct)->tabNoeud.elem;
       while(j<(*ptDistinct)->tabNoeud.nb) {
       printf("%s,",Noeud_printf(*ptDistinct)) ;
       printf("%s\n"), Noeud_printf(*ptVoisin));
       j++;
       ptVoisin++;
     }
}

En faite, je voulais juste afficher un sommet et ses voisins sur une ligne.
Par exemple, si un sommet A a 2 voisins B et C, j'obtiens ceci :
A,B
A,C

j'avais écrit une fonction qui recherche les voisins d'un noeud

Dernière modification par Premium (Le 28/05/2006, à 14:25)

Hors ligne