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 :

Les listes chaînées


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Par défaut Les listes chaînées
    Bonjour à tous ;
    Alors voilà j'ai un exercice concernant les listes chainées, mais je n'ai pas la correction, si vous pouvez me le corriger ce serai super sympa, merci d'avance.

    Voici l'énoncé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Type Liste=^cellule
                               cellule=record
                                         info:integer;
                                         suivant:Liste;
                                         end;
    1).Etant donnée une liste d'entiers positifs, écrire une fonction permettant de retourner le plus grand élément de la liste.
    2).Ecrire une procédure permettant de supprimer le plus grand élément de la liste.
    3).Ecrire une procédure qui étant donnée une liste L1, calcule une liste L2 composée des éléments de L1 triée par ordre croissant.
    Juste le temps d'écrire la réponse à la première question...

  2. #2
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Par défaut
    1).
    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
    function plusgrand(a:liste):integer;
    var valeur:integer;
          p:liste;
    begin
           if a=nil
           then write('La liste ne contient pas d''élément')
           else begin
                 p:=a;
    a:=a^.suivant;
    valeur:=p^.info;
     
    while (a<>nil) do
    begin
    if valeur <= a^.info
    then begin
           valeur:=a^.info;
           a:=a^.suivant;
            end;
    else begin
           a:=a^.suivant;
          end;
    end;
    plusgrand:=valeur;
    end;
    Ai-je bon ?? Merci d'avance de bien vouloir me corriger

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Sio,

    Pour que le code soit affiché correctement, encadre-le par les balises [ code] et [ /code] (sans les parenthèses, qui ne servent qu'à les désactiver).

    Pour le code, ça a l'air d'aller, sauf : à quoi sert la variable p, utilisée seulement pour lire une valeur, et dont on se passe très facilement, ou alors la faire varier en épluchant la liste, plutôt que la variable a.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Par défaut
    Bonjour Sio
    merci de me corriger, p me sert à lire le premier élément de la liste et de le comparer au suivant, sinon je ne vois pas comment ne pas m'en servir

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Par défaut
    Voici la question2).
    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
     
    procedure supprimer (var a:liste; trouve: boolean);
    var valeur:integer;
    begin
           if a=nil
           then trouve:=false
           else begin
                 valeur:=plusgrand(a); {c'est la question 1). }
                 trouve:=true;
                 p:=a;
                 a:=a^.suivant;
     
                 while (valeur > 1)  and (a<>nil) do
                 begin
                        if a^.info = valeur
                        then begin
                                      a:=a^.suivant;
                                      p:=p^.suivant;
                                      dispose(p);
                                end
                         else begin
                                      a:=a^.suivant;
                                      p:=p^.suivant;
                                end;
                 end;
                 end;
    end;
    Merci d'avance pour votre correction
    Si vous trouvez plus simple n'hésitez pas à me corriger

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Woe,
    Citation Envoyé par shelzy01 Voir le message
    Bonjour Sio
    merci de me corriger, p me sert à lire le premier élément de la liste et de le comparer au suivant, sinon je ne vois pas comment ne pas m'en servir
    Une fois que tu as fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                        p:=a;
                        a:=a^.suivant;
                        valeur:=p^.info;
    p ne te sert plus à rien dans ton code, et tu peux remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        valeur:=a^.info;
                        a:=a^.suivant;


    Pour la suite, en lecture rapide:

    La déclaration de ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure supprimer (var a:liste; trouve: boolean);
    ne permet pas de renvoyer une valeur via le paramètre trouve, car Pascal travaille par défaut par valeur, c'est à dire que les procédures/fonctions travaillent avec une copie locale des paramètres.

    Pour que la valeur que tu affectes à ce paramètre soit passée au programme appelant, il faut utiliser le mot-clé var:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure supprimer (var a:liste; var trouve: boolean);
    Et dans la procédure, que veux-tu faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                 while (valeur > 1)  and (a<>nil) do
    d'où sort ce valeur > 1 ?

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Par défaut
    Bonsoir

    D'accord j'ai compris la question 1 (merci), pour la question 2, comme il faut supprimer le plus grand élément de la liste, donc je fais appel à la question 1, est je vais donc l'appeler valeur.
    Je recherche donc dans la liste l'élément le plus grand et je le supprime, c'est vrai que:

    ne sert à rien

    Donc on peut écrire:
    Sinon est-il bon ?
    Merci pour votre correction

  8. #8
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 21
    Par défaut
    Désolè, mais après réflexion à propos de la question 1, il y a quelque chose que je ne comprends pas

    valeur:=a^.info;
    a:=a^.suivant;
    Si je n'écris pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    p:=a;
    a:=a^.suivant;
    il n'y a plus rien qui tiens la cellule, c'est à dire par exemple la cellule contenant la valeur 3
    a_ - 3__ - 8__ - 9__
    si on fait a:=a^.suivant on passe à la cellule contenant la valeur 8 ??
    Je ne comprends pas, pouvez vous m'expliquer je vous en remercie d'avance, sinon la question 2 est juste ?

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

Discussions similaires

  1. Les listes chaînées
    Par AureK dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 05/09/2007, 17h52
  2. Les listes chaînées
    Par dyala dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2007, 10h09
  3. petit problème sur les listes chaînées
    Par poche dans le forum C
    Réponses: 14
    Dernier message: 19/03/2007, 16h53
  4. [TP 7] Problème avec les listes chaînées (error 202)
    Par thelinekioubeur dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/12/2006, 23h15
  5. Réponses: 7
    Dernier message: 22/10/2005, 19h20

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