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]probleme d'ajout dans une liste chainée...


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [LG]probleme d'ajout dans une liste chainée...
    Bonjour a tous,
    J'ai un ptit prob, lorsque je parcours ma liste chainée, je me retrouve avec un mailon supplémentaire...
    Je ne sais aps d'où celà vient, pouvez vous jetter un oeil, svp?
    merci

    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
     
    type voisins      = ^voisin;
           voisin       = record
                            info : integer;
                            suiv : voisins;
                          end;
      procedure init_voisins  (var pinit : voisins);
      begin
        pinit:=nil;
      end;
      procedure ajout_voisins (var pinit : voisins ; pays : integer);
        var q, pc, pa : voisins;
      begin
        new(q);
        q^.info:=pays;
        if pinit=nil
          then begin
                 q^.suiv:=nil;
                 pinit:=q
               end
          else if pinit^.info>pays
                  then begin
                         q^.suiv:=pinit;
                         pinit:=q
                       end
                  else begin
                         pc:=nil;
                         pa:=pinit;
                         while (pa^.info<pays)and(pa^.suiv<>nil)do
                         begin
                           pc:=pa;
                           pa:=pa^.suiv
                         end;
                         if pa^.info > pays
                           then begin
                                  q^.suiv:=pc^.suiv;
                                  pc^.suiv:=q
                                end
                           else begin
                                  pa^.suiv:=q;
                                  q^.suiv:=nil
                                end;
                       end;
      end;

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Ben à partir du moment où tu alloues une variable dynamique q, que tu l'initialises et que tu l'ajoutes à ta liste chaînée, le tout dans une procédure qui s'appelle ajout_quelque chose, tu te retrouves assez logiquement avec un maillon supplémentaire !?!

    Es-tu sûr(e) d'avoir posté le bon morceau de programme ?
    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]

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    en fait, je fais 5 ajouts...
    et lorsque je parcours ma chaine, il fait comme si il en avait 6, et je me retrouve avec des bugs...
    enfin voici le morceau de code du parcours...

    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
     
    function attaquesui_ai1(njoueur:integer;var att,def:integer ;var monde:carte):boolean;
      var pcv : voisins;
          i_vois, u_vois, cpt : integer;
          s : string;
          attac : boolean;
    begin
      attac:=false;
      cpt:=1;
      pcv:=monde[att].voisins;
      while (pcv<>nil)and(monde[pcv^.info].proprio=njoueur)do begin
                                                                pcv:=pcv^.suiv;
                                                                cpt:=cpt+1;
                                                              end;
      if monde[pcv^.info].proprio<>njoueur
        then begin
               attac:=true;
               i_vois:=pcv^.info;
               u_vois:=monde[i_vois].unite;
               outtextxy(150,150,monde[i_vois].nom);
               str(cpt,s);
               outtextxy(150,160,s);
               readln;
             end;
      while pcv<>nil do
      begin
        if (monde[pcv^.info].unite<u_vois)and(monde[pcv^.info].proprio<>njoueur)
          then begin
                 u_vois:=monde[pcv^.info].unite;
                 i_vois:=pcv^.info;
               end;
        pcv:=pcv^.suiv;
      end;
      def:=i_vois;
      attaquesui_ai1:=attac;
    end;
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         territoire   = record
                            nom     : string;
                            coord   : array[1..2]of integer;
                            voisins : voisins;
                            proprio, unite : integer;
                          end;
           carte        = array[1..nb_pays] of territoire;

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    A priori je n'ai pas vu de faute de logique dans ta procédure ajout_voisins mais je me pose deux petites questions au sujet de la fonction attaquesui_ai1 :

    1. Juste après la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      while (pcv <> nil) and (monde[pcv^.info].proprio = njoueur) do
        begin
          pcv:=pcv^.suiv;
          cpt:=cpt+1;
        end;
    tu fais le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if monde[pcv^.info].proprio <> njoueur
    Ma question : est-il impossible que pcv ait la valeur nil avant le test ?

    2. Ne dois-tu pas réinitialiser la valeur de pcv avant la dernière boucle ?
    Tu devrais peut-être écrire une petite procédure de parcours qui ne fait qu'afficher le contenu de ta liste chaînée : tu verrais déjà si elle te trouve 6 éléments au lieu de 5.
    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]

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bien vu!!!!!!!!!!!!!!!!!
    Pour le 1... J'avais en effet pas traité le cas ou pcv=nil...
    Deux jours dessus...
    Merci!!!!!!

    Pour Alcatîz, hip^.hip^.hip^.hourra

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Hooooo c'est trop, c'est trop !
    Et je n'étais pas en forme, sur ce coup-là...

    Heureux d'avoir été utile.
    Bonne prog !
    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]

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

Discussions similaires

  1. Ajouter un élément dans une liste chainée.
    Par fourize dans le forum Général Java
    Réponses: 7
    Dernier message: 12/05/2012, 10h26
  2. probleme suppression dans une liste chainée
    Par Ganondorf dans le forum Débuter
    Réponses: 7
    Dernier message: 06/10/2010, 19h02
  3. Ajout dans une liste avec un bouton
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 07/12/2005, 08h27
  4. Ajout dans une liste/vérification
    Par illight dans le forum Access
    Réponses: 1
    Dernier message: 11/10/2005, 17h12
  5. Réponses: 2
    Dernier message: 10/10/2005, 02h25

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