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 :

Tri de tableau par pointeurs


Sujet :

Pascal

  1. #1
    Membre confirmé Avatar de colocolo
    Inscrit en
    Février 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 166
    Par défaut Tri de tableau par pointeurs
    comment trier un tableau par pointeur

  2. #2
    Membre confirmé Avatar de colocolo
    Inscrit en
    Février 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 166
    Par défaut merci
    j'ai essayé ça mais ça marche pas. 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
    procedure triinsertion;
    var
    begin
    p2:=p;
    p:=p^lien
    p2^.lien:=nil;
    while (p<>nil) do begin
          if (p^.valeur<p2.valeur)then begin
                                        p1:=p;
                                        p1^lien:=p2;
                                        p2:=p1;
                                        end
          else begin
    procedure tri;
    var p,temp1,temp2,min:liste;
    t:integer;
    begin
    temp1:=p;
    while (temp1<>nil) do
             begin
             min:=temp1;
             temp2:=temp1;
             while(temp1<>nil) do
                  begin
                  if (min^.valeur>temp2^.valeur) then
                  min:=temp2;
                  temp2:=temp2^.lien;
                  end;
                  t:=temp1^.valeur;
                  temp1^.valeur:=min^.valeur;
                  min^.valeur:=t;
                  temp1:=temp1^.valeur;
                  end;
                  end;

  3. #3
    Membre confirmé Avatar de colocolo
    Inscrit en
    Février 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 166
    Par défaut merci svp
    J'ai essayé aussi ça mais ça ne marche pas non plus. Je n'arrive pas à trouver la faille.
    Le tri de sélection marche sur le principe de chercher le minimum de toute la liste puis refaire la méthode jusqu'à ce que la liste soit triée.
    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
    procedure tri_par_selection;
    var p:liste;
    i,j:integer;
     
    begin
     for i:=1 to Llongueur(l)-1 do
       min:=i;
     
       for j:=i+1 to Llongueur(l)do
       if (p^.lien^.valeur<p^.valeur) then p:=p^.lien;
       if (i<>min)then begin
                           x:=p^.valeur;
                           p^.lien^.valeur:=p^.valeur;
                           p^.valeur:=x;
                           end;
       p:=p^.lien;
       end;
       end;
       end;

  4. #4
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    bonjour, merci, s'il vous plait, balise [code], ca t'evoque quelque chose ??

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Il faudrait commencer par faire un code correct.

    Ton code:
    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
    procedure tri_par_selection;
    var p:liste;
    i,j:integer;
     
    begin
     for i:=1 to Llongueur(l)-1 do
       min:=i;
     
       for j:=i+1 to Llongueur(l)do
       if (p^.lien^.valeur<p^.valeur) then p:=p^.lien;
       if (i<>min)then begin
                           x:=p^.valeur;
                           p^.lien^.valeur:=p^.valeur;
                           p^.valeur:=x;
                           end;
       p:=p^.lien;
       end;
       end;
       end;
    ne va même pas compiler (où sont les begin que tous tes end sont censés fermer ?

    sans parler du 1er code que tu as posté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
          else begin
    procedure tri;
    ...
    comment veux-tu que ça compile ?

    ET faire une indentation correcte, c'est à dire régulière et cohérente

  6. #6
    Membre confirmé Avatar de colocolo
    Inscrit en
    Février 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 166
    Par défaut
    J'aimerais que quelqu'un m'aide pour que le code soit juste :
    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
    procedure tri_par_selection;
    var p:liste;
    i,j:integer;
     
    begin
     for i:=1 to Llongueur(l)-1 do
       min:=i;
     
       for j:=i+1 to Llongueur(l)do
       if (p^.lien^.valeur<p^.valeur) then p:=p^.lien;
       if (i<>min)then begin
                           x:=p^.valeur;
                           p^.lien^.valeur:=p^.valeur;
                           p^.valeur:=x;
                           end;
       p:=p^.lien;
       end;
       end;
       end;

  7. #7
    Inactif
    Inscrit en
    Janvier 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 98
    Par défaut
    bonjour mais j'ai lu que le dernier code tu devrais nous donner tout le programme dans ce cas pas une procedure peut étre que c'est l'appel qui fonctionne pas
    ou est la declaration du type liste et ou est le READLN;

  8. #8
    Membre confirmé Avatar de colocolo
    Inscrit en
    Février 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 166
    Par défaut sos aide
    voici le code:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    program pointeur;
    uses wincrt;
    type
      liste=^cases;
         cases=record
         valeur:integer;
         lien:liste;
         end;
    var l:liste;nombres:integer;
     
    procedure ajouter(var l:liste; x:integer);
    var
      p:liste;
    begin
     new(p);
     p^.valeur:=x;
     p^.lien:=l;
     l:=p;
    end;
     
     
     
     
    function Llongueur (l: Liste): integer;
        var resultat: integer;
        begin
        resultat := 0 ;
        while l <> nil do
            begin
            resultat := 1 + resultat;
            l := l^.lien;
            end;
        Llongueur := resultat;
        end;
     
     
     
     
    procedure tri_de_bulle;
    var b,p:liste;
        i:integer;
        temp:integer;{temp variable de stockage temporaire}
    begin
         for i:=1 to Llongueur(l) do
           begin
             p:=l;
             b:=p;
             p:=p^.lien;
             while (p<>nil) do
               begin
                 if (b^.valeur>p^.valeur) then
                    begin
                      temp:=b^.valeur;
                      b^.valeur:=p^.valeur;
                      p^.valeur:=temp;
                    end;
                 b:=p;
                 p:=p^.lien;
               end;
           end;
    end;
     
     
      function triselection(l:liste):liste;
      var p,p1,result,p2:liste;
        min:integer;
        begin
     if (p <> nil) then
     
     
    { Recherche du minimum }
      p1 := p;
      p2 := nil ;
      min := p^.valeur ;
     while (p1^.lien <> nil) do begin
         if (p1^.lien^.valeur < min) then begin
      min := p1^.lien^.valeur ;
      p2 := p1 ;
         end;
         p1 := p1^.lien ;
     end;
     
     { On supprime le minimum de la liste}
     if (p2 = nil) then begin
         p^.lien := triselection(p^.lien) ;
         (* C2PAS: Exit *) Result := p ;
     end
     else begin
        p1 := p2^.lien ;
         p2^.lien := p2^.lien^.lien ;
         p1^.lien := triselection(p) ;
         (* C2PAS: Exit *) Result := p1 ;
     end;
        end;
     
     
     
       procedure afficher;
    var
      p: liste;
    begin
      p := l;
      while p <> nil do
      begin
        writeln(p^.valeur);
        p := p^.lien;
      end;
    end;
    procedure vider;
    var
      p, r: liste;
    begin
      p := l;
      while (p <> nil) do
      begin
        r := p^.lien;
        dispose(p);
        p := r;
      end;
    end;
     
     
    begin
    writeln('entrer les valeurs à ajouter(999 pour quiter):');
    readln(nombres);
    while nombres<>999 do
    begin
    ajouter(l,nombres);;
    readln(nombres);
    end;
    triselection(l);
    writeln('valeurs de la liste trié: ');
    afficher;
    readln;
    vider;
    end.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Fais-nous une indentation correcte, après on verra.

  10. #10
    Inactif
    Inscrit en
    Janvier 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 98
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
     new(p);
     p^.valeur:=x;
     p^.lien:=NIL;
     l:=p;
    end;
    tu veux d'abord créer un pointeur donc le lien doit pointer sur le NIL

Discussions similaires

  1. Modification du contenu d'un tableau par pointeur
    Par africanwinners dans le forum Débuter
    Réponses: 2
    Dernier message: 25/08/2011, 19h27
  2. [DOM] Tri de tableau par Javascript [Javascript, XSLT, XML]
    Par edevouge dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/05/2007, 16h13
  3. Lecture de tableau par pointeur
    Par SPACHFR dans le forum Débuter
    Réponses: 7
    Dernier message: 16/05/2007, 16h43
  4. tri d'index de tableau par rapport au contenu
    Par parisien dans le forum C
    Réponses: 7
    Dernier message: 13/02/2006, 23h32
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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