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 alphabetique avec les pointeurs


Sujet :

Langage Pascal

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

    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Points : 24
    Points
    24
    Par défaut [LG]Tri alphabetique avec les pointeurs
    Bonjour a tous,

    J'essaie de realiser une liste chainée de nom que l'on range par ordre alphabetique, malheuresement je n'arrive a rien, et a chaque fois que j'entre une valeur, elle ecrase la precedente ou alors mon programme quitte subitement lorsque j'entre un nom

    Si vous trouvez l'erreur merci de m'aider

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    procedure ajout_alpha(var deb:ptr_famille);
    var
       fam,famprec:ptr_famille;
       name:string[20];
       place:boolean;
     
    begin
    writeln('Entrez le nom');
    readln(name);
    famprec:=NIL;
    fam:=deb;
    place:=false;
    while (fam<>NIL) AND (place=false) do
    begin
    if (fam^.nom>name) then
    begin
    place:=TRUE;
    end
    else
    begin
    famprec:=fam;
    fam:=fam^.suivant;
    end;
    end;
     
    if (fam=NIL) then
    begin
    new(fam);
    fam^.suivant:=deb;
    deb:=fam;
    fam^.nom:=name;
    end
    else
    begin
    new(fam);
    fam^.suivant:=famprec^.suivant;
    fam^.nom:=name;
    famprec^.suivant:=fam;
    end;
    end;[/quote][/quote]

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Première chose, indente ton code, ca sera plus lisible pour tout le monde... Ensuite plusieurs problèmes :

    - ta boucle de parcours pour rechercher si un mot est déjà dans la liste n'est pas simple... Elle peut être simplifiée comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fam := deb;
    place := false;
    while ((fam<>nil) and (not place)) do
    begin
      if (fam^.nom > name) then place := true;
      famprec := fam;
      fam := fam^.suivant;
    end;
    Tu peux même te passer du booléen place si tu veux, en plaçant le test dans la condition de continuation de la boucle.

    - ensuite ton insertion n'est pas correcte. Si fam vaut nil, ca veut dire qu'il n'y a aucun nom qui est lexicographiquement avant le nom entré. Il faut donc faire une insertion en fin de liste, or toi tu la fais en début. Si fam est différent de nil, tu recrées une cellule fam, ce qui écrases la précédente fatalement...

    Il faut que tu revois ces deux points
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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

    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Oui j'ai oublié de preciser le type du pointeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    type
        ptr_famille = ^famille;
     
        famille = record
                nom:string;
                suivant:ptr_famille;
                end;


    Merci pour cette reponse, le probléme est que je ne trouve pas la solution pour faire une insertion en fin de liste :'([/code]

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

    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Arf ma procédure etait parfait en faite il s'agissait d'une erreur dans mon programme principale :s

    Merci quand meme de m'avoir aider

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut


    Euh... elle est loin d'être parfaite ta procédure...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

Discussions similaires

  1. souci avec les pointeurs
    Par arlette dans le forum C++
    Réponses: 2
    Dernier message: 15/04/2006, 23h33
  2. souci avec les pointeurs
    Par arlette dans le forum C++
    Réponses: 4
    Dernier message: 15/04/2006, 20h11
  3. une erreur avec les pointeur..
    Par lecyberax dans le forum C
    Réponses: 12
    Dernier message: 15/04/2006, 12h04
  4. Comment fait ça avec les pointeurs, la fonction et les struc
    Par mahdianis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/02/2006, 18h01
  5. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31

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