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

Ada Discussion :

liste chaînée en ada insertion à la fin


Sujet :

Ada

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut liste chaînée en ada insertion à la fin
    Bonjour à tous !

    je commence à désespérer ... je vous explique mon problème : j'ai une liste chaînée qui marche à merveille, suppression, modification et insertion au milieu, au début ... nickel quoi. Mais mon problème se situe au niveau de l'insertion à la fin de ma liste. Pour info ma liste est composée d'élément record qui eux-même contienne un nombre entier et un deuxième champ qui s'appelle suivant pour faire le lien avec l'élément suivant.
    Voila le code que j'ai pour faire mon insertion à la fin je crée un nouvel élément donc je rempli le champs num avec un nombre et je dis qu'il y a pas de suivant. Je parcours ma liste jusqu'au dernier élément. Une fois mon pointeur arrivé sur le dernier élément je dis que ce qui suis ce dernier élément c'est le nouvel élément que je viens de créer et après je dis que ce nouvel élément c'est la fin de la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                Pt_nouveau := new T_Element'(num, null);
     
                while Pt_courant /= null loop
                	Pt_courant := Pt_Courant.suivant;
                end loop;
     
                Pt_courant.suivant := Pt_nouveau;
                La_Queue.Queue := Pt_nouveau;
    Alors j'ai regardé ... dans plein de livre c'est comme ça, j'ai aussi chercher sur le net ... identique mais lors de la compilation aucun message d'erreur et quand je l'exécute paf une constraint error comme si je débordais de ma liste. Je comprends pas bien comment faire autrement et comment résoudre ce problème ... Si quelqu'un pouvais m'aider ... merci d'avance

    environnement : JGrasp

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par koda29 Voir le message
    Bonjour à tous !

    je commence à désespérer ... je vous explique mon problème : j'ai une liste chaînée qui marche à merveille, suppression, modification et insertion au milieu, au début ... nickel quoi. Mais mon problème se situe au niveau de l'insertion à la fin de ma liste. Pour info ma liste est composée d'élément record qui eux-même contienne un nombre entier et un deuxième champ qui s'appelle suivant pour faire le lien avec l'élément suivant.
    Voila le code que j'ai pour faire mon insertion à la fin je crée un nouvel élément donc je rempli le champs num avec un nombre et je dis qu'il y a pas de suivant. Je parcours ma liste jusqu'au dernier élément. Une fois mon pointeur arrivé sur le dernier élément je dis que ce qui suis ce dernier élément c'est le nouvel élément que je viens de créer et après je dis que ce nouvel élément c'est la fin de la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                Pt_nouveau := new T_Element'(num, null);
     
                while Pt_courant /= null loop
                	Pt_courant := Pt_Courant.suivant;
                end loop;
     
                Pt_courant.suivant := Pt_nouveau;
                La_Queue.Queue := Pt_nouveau;
    Alors j'ai regardé ... dans plein de livre c'est comme ça, j'ai aussi chercher sur le net ... identique mais lors de la compilation aucun message d'erreur et quand je l'exécute paf une constraint error comme si je débordais de ma liste. Je comprends pas bien comment faire autrement et comment résoudre ce problème ... Si quelqu'un pouvais m'aider ... merci d'avance

    environnement : JGrasp
    Non, si tu tentais d'accéder à un élément inexistant tu aurait Access_Check Failed. L'erreur est ailleurs.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Non, si tu tentais d'accéder à un élément inexistant tu aurait Access_Check Failed. L'erreur est ailleurs.
    Donc, un Constraint Error

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Pt_nouveau := new T_Element'(num, null);
     
                while Pt_courant /= null loop
                	Pt_courant := Pt_Courant.suivant;
                end loop;
     
                Pt_courant.suivant := Pt_nouveau;
                La_Queue.Queue := Pt_nouveau;

    Ah ben non, hein... Ca peut pas marcher !

    Que vaut Pt_courant en fin de boucle ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Donc, un Constraint Error

    oui oui c exactement ça ... mais justement si il existe cet élément comment je peux faire autrement pour l'ajouter à la fin de ma liste ... parce que là je vois vraiment pas

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Pt_nouveau := new T_Element'(num, null);
     
                while Pt_courant /= null loop
                	Pt_courant := Pt_Courant.suivant;
                end loop;
     
                Pt_courant.suivant := Pt_nouveau;
                La_Queue.Queue := Pt_nouveau;

    Ah ben non, hein... Ca peut pas marcher !

    Que vaut Pt_courant en fin de boucle ?
    bin il est sur le dernier élément de ma liste (ce dernier élément a son champ "suivant" sur null )

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par koda29 Voir le message
    bin il est sur le dernier élément de ma liste (ce dernier élément a son champ "suivant" sur null )
    Donc si il est null, c'est que l'élément n'existe pas !
    Et si ton élément n'existe pas, tu ne peux accéder à au champ suivant de l'élément.

    Donc ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Donc si il est null, c'est que l'élément n'existe pas !
    Et si ton élément n'existe pas, tu ne peux accéder à au champ suivant de l'élément.

    Donc ?
    bin je dois dis que le champs suivant de ce dernier élément pointe sur le nouveau ... ? mais eeeeh c'est un peu là qu'est mon problème ... parce que je lui dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Pt_courant.suivant := Pt_nouveau    -- Pt_nouveau donc le pointeur sur mon
                                                      -- nouvel élément
    Mais je pense que c'est là le hic enfin c'est en arrivant sur cette ligne qu'il plante

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par koda29 Voir le message
    bin je dois dis que le champs suivant de ce dernier élément pointe sur le nouveau ... ? mais eeeeh c'est un peu là qu'est mon problème ... parce que je lui dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Pt_courant.suivant := Pt_nouveau    -- Pt_nouveau donc le pointeur sur mon
                                                      -- nouvel élément
    Mais je pense que c'est là le hic enfin c'est en arrivant sur cette ligne qu'il plante

    Si c'est là qu'il plante, c'est que l'erreur est en amont.

    Il faut que tu arrête ta boucle sur le dernier élément, et non, sur un pointeur null.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Si c'est là qu'il plante, c'est que l'erreur est en amont.

    Il faut que tu arrête ta boucle sur le dernier élément, et non, sur un pointeur null.
    oui sauf que justement ma boucle s'arrête quand on est sur le dernier élément ... il n'y a que le dernier élément dont le champs suivant soit à null.

    Autrement y aurait peut-être la possibilité de ne pas faire de boucle et de dire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    La_Queue.Queue.suivant := Pt_nouveau;   -- dire que l'élément crée va après la queue
    La_Queue.Queue := La_Queue.Queue.suivant;      -- dire que le nouvel élément c'est maintenant la queue
    c'est peut-être plus propre ... mais y a toujours ce même problème

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par koda29 Voir le message
    oui sauf que justement ma boucle s'arrête quand on est sur le dernier élément ... il n'y a que le dernier élément dont le champs suivant soit à null.
    Pourquoi tu mets pas while Pt_Courant.suivant /= null loop ?
    Citation Envoyé par koda29 Voir le message
    Autrement y aurait peut-être la possibilité de ne pas faire de boucle et de dire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    La_Queue.Queue.suivant := Pt_nouveau;   -- dire que l'élément crée va après la queue
    La_Queue.Queue := La_Queue.Queue.suivant;      -- dire que le nouvel élément c'est maintenant la queue
    c'est peut-être plus propre ... mais y a toujours ce même problème
    C'est surtout plus rapide. C'est une solution, mais c'est pas comme ça.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Pourquoi tu mets pas while Pt_Courant.suivant /= null loop ?


    C'est surtout plus rapide. C'est une solution, mais c'est pas comme ça.
    Wow c'est trop trop cool c'est exactement ça ! je sais pas pourquoi j'y ai pas pensé ... en tout cas merci beaucoup parce que j'étais vraiment bloqué et pas la pêche mais alors là c bon je suis tout fou et content. merci encore, faut continuer à faire des forums d'entraide comme ça c'est juste génial !

    allé peut-être à une prochaine

    ps: voila le code qui marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Pt_nouveau := new T_Element'(num, null);
     
                while Pt_Courant.suivant /= null loop
                	Pt_courant := Pt_Courant.suivant;
                end loop;
     
                Pt_courant.suivant := Pt_nouveau;
                La_Queue.Queue := Pt_nouveau;

  13. #13
    Invité
    Invité(e)
    Par défaut
    Désolé pour mes erreurs.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Désolé pour mes erreurs.
    pas de problème ! on est encore des humains, on ne peut pas toujours faire juste ... c'est aussi pour ça qu'il y a des forums comme celui-ci ^^ passe une bonne fin de journée a+

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

Discussions similaires

  1. [Free Pascal] Insertion d'éléments dans une liste chaînée
    Par Pacorabanix dans le forum Free Pascal
    Réponses: 4
    Dernier message: 20/04/2010, 00h42
  2. Recherche d'index à partir de la fin d'une liste chaînée
    Par Jimalexp dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/01/2009, 12h07
  3. insertion dans Liste chaînée
    Par ALIAS200 dans le forum Débuter
    Réponses: 12
    Dernier message: 29/02/2008, 09h20
  4. liste chainée et insertion en fin ou debut
    Par bonjour69 dans le forum C
    Réponses: 7
    Dernier message: 21/12/2005, 20h50
  5. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34

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