#1 Le 27/05/2006, à 16: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, à 12:59)
Hors ligne
#2 Le 27/05/2006, à 22: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é.
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, à 12:59
- Premium
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é.
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, à 13:25)
Hors ligne