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 :

Liste unidirectionnelle (pointeur)


Sujet :

Pascal

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Liste unidirectionnelle (pointeur)
    salut,


    voila l'exercice:ecrire un programme en pascal qui inverse une liste unidirectionnelle.
    j'ai ecrit le programme mais j'ai un petit problème dans la procedure cree_invers (elle ne fait rien apres la compilation),
    donc svp je damande votre aide voila mon programme :


    Code pascal : 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
    56
    program inverse_liste;
    uses crt;
    const n=5;
    type ptr=^noeud;
         noeud=record
         val:integer;
         suiv:ptr;
         end;
    var c,c1:ptr;
    procedure cree_invers(var c1:ptr;c:ptr);
    var t:ptr;x:integer;
    begin
    t:=nil;c1:=nil;
    while c<>nil do
    begin
    x:=c^.val;
    writeln(x);
    new(c1);
    c1^.suiv:=t;
    t:=c1;
    t^.val:=x;
    end;
    c:=c^.suiv;
    end;
    procedure cree_liste(var c:ptr);
    var a,b:ptr;i:integer;
    begin
    new(a);
    writeln('1 ere valeur:');
    readln(a^.val);
    b:=a;
    writeln;
    for i:=2 to n do
    begin
    new(c);
    writeln(i,' ieme valeur ');
    readln(c^.val);
    b^.suiv:=c;
    b:=c;
    writeln;
    end;
    b^.suiv:=nil;
    c:=a;
    for i:=1 to n do
    begin
    writeln(c^.val);
    c:=c^.suiv;
    end;
    end;
    begin
    clrscr;
    writeln('                 voila ma liste:');
    cree_liste(c);
    writeln('                  et voila ma liste invers‚e:');
    cree_invers(c1,c);
    end.


    d'avance

  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
    Fio,

    Une mise en forme correcte du code aiderait à s'y retrouver.

    En vitesse, il manque au moins une procédure pour détruire la liste : à chaque réservation de mémoire doit correspondre un libération.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Points : 292
    Points
    292
    Par défaut
    Citation Envoyé par gotoit Voir le message
    Code pascal : 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
    procedure cree_invers(var c1:ptr;c:ptr);
      var t:ptr;x:integer;
    begin
      t:=nil;c1:=nil;
      while c<>nil do
      begin
        x:=c^.val;
        writeln(x);
        new(c1);
        c1^.suiv:=t;
        t:=c1;
        t^.val:=x;
      end;
    c:=c^.suiv;
    end;
    Fais rentrer l'instruction colorée en rouge à l'intérieur de la boucle while, ça t'aideras à continuer... Et pour ne pas perdre ta liste originale, affecte la tête de la liste c à une autre variable c2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while c2 <> nil do
    begin
      traitement;
      c2 := c2^.suiv;
    end;

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/10/2006, 15h33
  2. [LG]Liste de pointeurs
    Par kmitz dans le forum Langage
    Réponses: 10
    Dernier message: 02/04/2005, 02h57
  3. [LG]Liste de pointeurs de type pointer
    Par tom_snop dans le forum Langage
    Réponses: 4
    Dernier message: 29/03/2005, 23h40
  4. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 08h46
  5. [LG]liste chainee + pointeur + affichage
    Par k_ro dans le forum Langage
    Réponses: 6
    Dernier message: 17/01/2004, 13h58

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