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 :

Récursivité sur une liste


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Récursivité sur une liste
    Bonjour à tous;
    J'ai une liste d'entiers définit comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Type listeEntiers = ^cellule
            cellule = record
                        info : integer;
                        suivant : listeEntiers;
                        end;
    Et ma question est la suivante:
    Ecrire une procédure récursive permettant d'afficher les éléments de la liste dans l'ordre inverse:

    J'ai pensé chercher le dernier élément, l'écrire, puis le supprimer et enfin, on recommence ainsi de suite jusqu'à temps qu'il n'y a plus d'élément.
    (En faite on part de la fin et on arrive au début, en supprimant les éléments un à un).

    Selon vous est-ce que ma démarche est judicieuse ?

    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
    procedure inverse (a:listeEntiers) ;
    var p:liste;
    begin
    if a = nil
    then write (' La liste est vide, elle ne contient pas d'élément ')
    else if a^.suivant = nil
          then write (a^.info)
          else begin
                p:=a
               
                while (a^.suivant <> nil ) do
                begin
                a:=a^.suivant;
                end;
     
                if a^.suivant = nil
                then begin
                       write (a^.info);
                       dispose (a);
                       end;
                end;
    
    p:=a;
    inverse (a);
    end;
    Est-ce que ma procédure est juste ?
    Je vous remercie d'avance pour votre réponse

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Une question, pourquoi pointer p sur a si tu n' utilise pas p :
    p:=a
    . Ou le dernier p:=a devrait plutot etre a:=p , car à la fin de la procedure a vaudra nil puisque tu as fait dispose(a).
    Je n' ai pas pris le temps de verifier chaque ligne de temps code pour la simple raison que tu fais plus qu' on te le demande :
    Ecrire une procédure récursive permettant d'afficher les éléments de la liste dans l'ordre inverse
    On ne demande pas de supprimer les element un à un en partant de la fin. Moi je pensais plutot à un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure inverse (a:listeEntiers) ;
       begin
       {on empile les appels tant la fin de la liste n' est pas encore atteinte}
       if a^.suivant<>nil then
         inverse(a^.suivant);
       {on commence à ecrire la valeur du dernier element}
       {comme son suivant vaut nil, affiche son info en premier et on commence}
       {à deplier les appels en affichant les elements dans l' ordres inverse}
       writeln(a^.info);
      end;

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Bonjour darrylsite ;
    Je te remercie pour ta réponse, de plus ton code est très court par rapport au mien, merci

    Stp, si ça ne te déranges pas, pourrais-tu jeter un coup d'œil sur un exercice que j'ai fais, il comporte 3, là première est juste, mais les 2 dernières je ne sais pas , ça fait 2 jours que j'attends une réponse, ce serai vraiment super si tu pourrais m'aider, je t'en remercie d'avance, voici le site:
    http://www.developpez.net/forums/sho...d.php?t=467997

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

Discussions similaires

  1. etiquette ou label sur une liste deroulante
    Par camyo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 07/11/2005, 17h09
  2. simuler un double click sur une liste dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/09/2005, 11h45
  3. Réponses: 4
    Dernier message: 16/06/2005, 16h37
  4. Selectionnet tous ou faire un clear sur une liste
    Par Canou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/11/2004, 11h26
  5. [Débutant][jsp] évènement sur une liste
    Par phoebe dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/05/2004, 11h53

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