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 946
    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 946
    Points : 59 467
    Points
    59 467
    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 ?

  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 946
    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 946
    Points : 59 467
    Points
    59 467
    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.

  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 946
    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 946
    Points : 59 467
    Points
    59 467
    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é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