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 :

Problème de liste


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Par défaut Problème de liste
    Bonjour,

    J'ai un bout de code qui bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    list<SOMMET*>::iterator p, q;
    for(p = LAllSommets.begin(); p != LAllSommets.end(); p++)
    {
    cout << "liste des voisins de "<< (*p)->nom<<" : ";
    for(q = (*p)->LVoisins.begin(); q != (*p)->LVoisins.end(); q++)
    {
    cout << (*q)->nom << " ";
    }
    cout << endl;
    }
    J'explique : LAllSommets est une liste de pointeurs vers des sommets qui ont comme attribut un nom et une liste de pointeurs vers des sommets voisins : LVoisins. (qu isont des sommets)

    la première boucle me renvoie bien la liste de tous mes sommets par contre la deuxième s'arête au deuxième sommet. (le premier sommet (a) n'a qu'un voisin alors que b en a deux ! c'est la seule différence)

    Pourriez vous m'éclairé vers ou chercher pour résoudre ce bug... Je patauge.

    Merci
    Akasha

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Citation Envoyé par Akasha2509 Voir le message
    la première boucle me renvoie bien la liste de tous mes sommets par contre la deuxième s'arête au deuxième sommet. (le premier sommet (a) n'a qu'un voisin alors que b en a deux ! c'est la seule différence)
    Parsing error.
    Je ne comprends pas la phrase. Que désigne "a" et "b" exactement ? Quel est le problème ?

    Bon heureusement le code est plus clair que toi.
    Il fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pour chaque sommet 
      Pour chaque voisin
        afficher nom du voisin
      Fin Pour
    Fin Pour
    Et le code semble bon. Donc a priori, s'il y a une erreur c'est que les listes LVoisins sont mal remplies.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Par défaut
    Désolée pour l'explication tordue... ^^

    Je vais esayer de me rattraper : a est le sommet pointé par le premier pointeur de la liste des pointeurs de tous les sommets (LAllSommets), b est le suivant dans la liste LAllSommets.

    LAllSommets et LVoisins sont des listes de pointeurs vers des sommets.

    Et par exemple, si j'ai un carré abcd :
    la liste des voisins de a est d,
    celle de b est a etc...
    (à chaque fois c'est le sommet qui précède le sommet courant).

    Le programme rentre bien dans la première boucle, et si je ne fait que ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    list<SOMMET*>::iterator p;
    for(p = LAllSommets.begin(); p != LAllSommets.end(); p++)
    {
        cout << "liste des voisins de "<< (*p)->nom<<" : ";
    }
    tout va bien, il m'affiche bien la liste des noms de tous les sommets.

    Mais si j'ajoute une deuxième boucle pour afficher la liste des voisins à ces sommets, plus rien ne vas, il m'affiche :

    liste des voisins de a : d
    liste des voisins de b :

    alors que b est sensé avoir 2 voisins.

    J'espère avoir été plus claire.

    En tout cas merci de ta réponse !!

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 17
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    Citation Envoyé par Akasha2509 Voir le message
    Et par exemple, si j'ai un carré abcd, la liste des voisins de a est d, celle de b est a etc... (à chaque fois c'est le sommet qui précède le somemt courant).
    Du coup c'est normal qu'il y ait un seul sommet, non? (vu que c'est seulement le sommet précédant le sommet courant)

    Sinon c'est comme l'a dit Arzar que tu as mal rempli ta liste (*p)->LVoisins.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Par défaut
    le carré n'était qu'un exemple. En fait il s'agit de plusieurs polygones ayant des points et/ou des aretes en commun.

    Sinon je déclare et rempli la liste des sommets voisins comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //le sommet voisin de s dans le polygone courant
    SOMMET sVoisin = *LSommets.back();
     
    s.LVoisins.push_front(&sVoisin);
    Avec LSommets la liste des pointeurs vers des sommets qui composent le polygone courant.

  6. #6
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Il y avait bien une erreur lors du remplissage de LVoisins
    Car ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SOMMET sVoisin = *LSommets.back();
     
    s.LVoisins.push_front(&sVoisin );
    construit un *nouveau* sommet, sVoisin, en copiant le dernier sommet de LSommets, puis insère l'adresse de ce sommet fraichement crée dans LVoisins. Mais ici, c'est l'adresse du dernier sommet de LSommets qui nous intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SOMMET* ptrsVoisin = LSommets.back(); 
     
    s.LVoisins.push_front(ptrsVoisin);
    Ou plus court
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s.LVoisins.push_front( LSommets.back());

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Par défaut
    Un énorme MERCI !!!

    Ca marche nickel.

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

Discussions similaires

  1. [MySQL] Problème de liste déroulante dynamique
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 03/03/2006, 16h38
  2. Problème de liste déroulante et js...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/03/2006, 10h44
  3. [MySQL] Problème de listes déroulantes liées avec requêtes sql
    Par richton95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/12/2005, 16h04
  4. Problème avec liste déroulante
    Par Invité dans le forum IHM
    Réponses: 2
    Dernier message: 14/12/2005, 21h04
  5. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10

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