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

Langage Pascal Discussion :

[LG]Tri par insertion dans une liste chainée


Sujet :

Langage Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 17
    Points : 11
    Points
    11
    Par défaut [LG]Tri par insertion dans une liste chainée
    voila j'essaie de faire un tri par insertion dans une liste chainée seulement je n'arrive pas a trouver ce qui ne va pas dans mon code, si quelqu'un pouvait eventuellement m'aider
    merci d'avance
    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
     
    procedure trier_liste(var TDL:ptliste;nbelem:integer);
    var ptint,ptRes,ptPrec:ptliste;
    begin
         ptPrec:=nil;
         ptint:=TDL;
         ptRes:=nil;
         for i:=1 to nbelem do
           begin
             while (ptint<>nil) do
               begin
                 if (ptPrec^.elem<=ptint^.elem)
                    then begin
                           ptRes:=ptPrec;
                           ptPrec:=ptint;
                           ptint:=ptint^.suiv;
                         end
                    else begin
                           ptRes:=ptPrec^.suiv;
                           ptPrec:=ptint;
                           ptint:=ptint^.suiv;
                         end;
               end;
           end;
    end;
    @+
    mister_dsg

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Est-ce que tu as remarqué que tu est entrain de vouloir déréférencer un pointeur valant nil?

    ptPrec:=nil;
    ...
    ...
    ...
    if (ptPrec^.elem<=ptint^.elem)
    ptPrec est une variable locale et forcément l'instruction ptPrec^.elem est fausse.

    et en plus plus loin tu as même :

    ptRes:=ptPrec^.suiv;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    le probleme est que meme si j'affecte une valeur a ptPrec (par exemple TDL) est bien ça ne marche pas quand meme
    donc j'aimerai savoir a quel niveau ça plante
    merci d'avance
    @+
    mister dsg

  4. #4
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Voici un lien assez intéressant!

    Lors du triage, tu compares successivement la valeur sur laquelle tu te trouves, tu le compares aux précédent jusqu'en début de chaine et à chaque fois tu fais des substitutions de VALEUR.

    En pseudo code, tu auras:
    PROCEDURE Tri_Insertion (Tableau a[1:n])
    POUR i VARIANT DE 2 A n FAIRE
    INSERER a[i] à sa place dans a[1:i-1];
    FIN PROCEDURE
    Et lorsque je lis ton algo, nulle part tu ne permutes (à moins que je me trompe)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    merci pour cette info mais elle ne m'a pas trop servi(enfin si un petit peu quand meme)
    en revanche j'ai pu corriger mon erreur et finir mon tri dans ma liste chainé et ça marche plutot bien
    pour ceux qui seraient interessés par le code le voici
    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
     
    procedure trier_liste(var TDL:ptliste;nbelem:integer);
    var ptint,ptPrec:ptliste;
        i:integer;
        stock:integer;{stock variable de stockage temporaire}
    begin
         for i:=1 to nbelem do
           begin
             ptint:=TDL;
             ptPrec:=ptint;
             ptint:=ptint^.suiv;
             while (ptint<>nil) do
               begin
                 if (ptPrec^.elem>ptint^.elem) then
                    begin
                      stock:=ptPrec^.elem;
                      ptPrec^.elem:=ptint^.elem;
                      ptint^.elem:=stock;
                    end;
                 ptPrec:=ptint;
                 ptint:=ptint^.suiv;
               end;
           end;
    end;
    encore merci pour l'aide
    @+
    mister_dsg

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/01/2014, 01h07
  2. Réponses: 7
    Dernier message: 21/11/2012, 12h40
  3. Réponses: 2
    Dernier message: 20/10/2012, 22h07
  4. tri par selection d'une liste chainée
    Par abdelghani666 dans le forum Débuter
    Réponses: 0
    Dernier message: 18/02/2012, 16h58
  5. Tri par insertion sur une liste chainé simple.
    Par loula427 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/03/2011, 14h54

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