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]Liste chaînée


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Points : 6
    Points
    6
    Par défaut [LG]Liste chaînée
    Bonjour

    J'ai un problème avec l'instruction If pcour^.info.lettre='N'
    En effet j'ai bien en mettant ma souris sur pcour^.info.lettre, 'N'
    et est donc bien 'N'='N'
    mais le programme ne veut pas rentrer dans le Then!!, il passe directement à parcours:=parcours+1
    J'ai essayé de mettre des "Begin" et "end" un peu partout, sans succès!!
    Je suis très embêté, je ne comprends pas pourquoi cela ne fonctionne pas!
    Si vous pouviez m'aider...
    merci
    Chloé

    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
    Const
    jeu='Plateaudejeu.txt';
     
    Type
    T_nom=string[30];
    T_donnee=Record
                    lettre:char;
             end;
     
    T_ptr_elmt=^T_elmt;
    T_elmt=Record
                    info:T_donnee;
                    psuiv:T_ptr_elmt;
           end;
    T_cpt=1..6;
     
     
    Procedure DE(var cpt:T_cpt; var parcours:integer; var pcour:T_ptr_elmt);
     
    Var
    p_avt:integer;
    pcaseN:T_ptr_elmt;
    MAX:integer;
     
    Begin
    MAX:=6;
    cpt:=3;
    Writeln('Vous avez tire le chiffre: ',cpt);
    p_avt:=parcours;
     
    While parcours <> (cpt + p_avt) do
    Begin
     
    pcour:=pcour^.psuiv;
     
    If pcour^.info.lettre='N'
    Then
    pcaseN:=pcour;
     
    parcours:=parcours+1;
     
    end;

  2. #2
    Membre actif Avatar de Fares BELHAOUAS
    Homme Profil pro
    Développeur Flex & Java
    Inscrit en
    Mars 2002
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Flex & Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 182
    Points : 252
    Points
    252
    Par défaut
    Salam Cloe,

    Essaye de mettre des messages (Writeln, si t'es en pascal, ou bien Showmessage, si t'es sous Delphi) un peu partout, pour repérer en execution ton problème.

    Commence par en mettre un dans le then, n'oublie pas de mettre un bloc begin end pour ton then.

    Bon Courage

    PS: ton premier post est verouillé, c'est normal.

    ---
    Message N° 80
    Bon courage, @ ciao bonsoir!
    --------------
    Mettre le Tag est aussi une aide aux développeurs

  3. #3
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bienvenue sur le forum Pascal !

    Bon, là, tu nus demandes un peu de jouer au débogueur, et sur un forum, ce n'est pas viable...

    Tel quel, ton programme n'est pas complet, mais du peu qu'on peut voir, il n'y a un petit souci. En effet, dès que tu rentres dans ta boucle while, tu passe tout de suite à l'élément suivant de ta liste chaînée avec pcour := pcour^.psuiv;. Or, imagine que ta liste ne contienne qu'un seul élément, ça veut dire que dès que tu rentres dans ta boucle, tu testes la fin de ta liste. Ca ne peut pas fonctionner.
    Il faut placer pcour := pcour^.psuiv; juste avant le end du while.

    De plus, tu ne testes pas si pcour <> nil. C'est extrêmement important ! D'ailleurs, ton problème vient sûrement de là

    Pense aussi à bien indenter ton code (c'est à dire mettre des tabulations), ce sera bien plus lisible pour le commun des mortels, toi y compris

    Avec ce qu'on a sous les yeux, il est impossible de t'aider plus. Tu peux nous mettre plus de code à quelque part ? (pas forcément sur le forum, s'il est trop long...)



    @++


    PS: Ton code, bien indenté, ça donne ça (c'est pas mieux ? ) :
    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
    const
      jeu = 'Plateaudejeu.txt';
     
    type
      T_nom = string[30];
     
      T_donnee = record
        lettre: Char;
      end;
     
      T_ptr_elmt = ^T_elmt;
      T_elmt = record
        info: T_donnee;
        psuiv: T_ptr_elmt;
      end;
     
      T_cpt = 1..6;
     
     
    procedure DE(var cpt: T_cpt; var parcours: Integer; var pcour: T_ptr_elmt);
    var
      p_avt: Integer;
      pcaseN: T_ptr_elmt;
      MAX: Integer;
    begin
      MAX := 6;
      cpt := 3;
     
      Writeln('Vous avez tire le chiffre: ', cpt);
     
      p_avt := parcours;
     
      while parcours <> (cpt + p_avt) do
      begin
        pcour := pcour^.psuiv;
     
        if pcour^.info.lettre='N' then
          pcaseN := pcour;
     
        parcours := parcours + 1;
      end;
     
    ....
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    bah jpe vous envoyez tout cke j'ai fait, mais ca va etre long a tout comprendre...

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Citation Envoyé par Hdd34
    Tel quel, ton programme n'est pas complet, mais du peu qu'on peut voir, il n'y a un petit souci. En effet, dès que tu rentres dans ta boucle while, tu passe tout de suite à l'élément suivant de ta liste chaînée avec pcour := pcour^.psuiv;. Or, imagine que ta liste ne contienne qu'un seul élément, ça veut dire que dès que tu rentres dans ta boucle, tu testes la fin de ta liste. Ca ne peut pas fonctionner.
    Il faut placer pcour := pcour^.psuiv; juste avant le end du while.

    De plus, tu ne testes pas si pcour <> nil. C'est extrêmement important ! D'ailleurs, ton problème vient sûrement de là
    Revois d'abord ces problèmes là avant de poster ton code en entier...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

Discussions similaires

  1. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  2. Réponses: 2
    Dernier message: 04/10/2002, 09h13
  3. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56
  4. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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