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

Pascal Discussion :

Algorithme de liste chainée


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Algorithme de liste chainée
    Salut
    J'ai un problème de tri de la liste chaînée.
    Comment créer un programme permettant de trier par ordre alphabétique une liste chaînée ?
    Voilà mon code :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    program lust;
    uses wincrt;
        type
           pointeur=^per;
           per=record
           s:string;
           svt:pointeur;
           end;
    var debut,courant,t:pointeur;
        i:integer ;
        rep:char;
        s,p:string;
                                procedure aff (s:string);
                                begin
                                courant:=debut;
                                while courant <>nil do
                                begin
                                writeln (courant^.s);
                                courant:=courant^.svt;
                                end;
                                end;
      begin
      new (debut);
      courant:=debut;
      repeat
     
      write ('donne le mot:   ');
      readln(courant^.s);
     
      write (' outre siesie:o\n ?   ');
      readln (rep);
      if rep='o' then
      begin
       new(courant^.svt);
      courant:=(courant^.svt);
      end
      else 
      courant^.svt:=nil ;
      until rep='n';
      aff (s);
      courant:=debut;
      while courant<>nil do
      begin
      if courant^.s<courant^.svt^.s then
      begin
      p:=courant^.s;
      courant^.s:=courant^.svt^.s;
      courant^.svt^.s:=p;
      end
      else
      courant:=courant^.svt;
      end;
      aff (s);
     
      end.
    Merci à tous.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Via,

    Au risque de me répéter () : soigner la présentation du code.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Attention : dans le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if courant^.s<courant^.svt^.s then
    tu dois absolument prévoir le cas (inévitable) où courant^.svt vaut nil, sous peine de plantage.

    Remarque importante également : ta procédure aff utilise des variables globales, ce qui doit être évité. Pour y remédier, fournis-lui toutes les variables dont elle a besoin sous forme de paramètres et variables locales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure aff (s:string; debut:pointeur);
    var courant : pointeur;
    begin
      courant:=debut;
      while courant <> nil do
        begin
          writeln (courant^.s);
          courant:=courant^.svt;
        end;
    end;
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/02/2005, 23h42
  2. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  3. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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