Tri tableau multidimensionnel [Résolu]

Signaler
Messages postés
6
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
10 février 2009
-
Messages postés
6
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
10 février 2009
-
Bonjour!
Je suis à la recherche d'une méthode simple mais efficace de tri de tableau multidimensionnel ...

J'ai déjà une ébauche de faite ... mais y un bug ... pis j'arrive pas à trouver une solution pour le régler ...
je suis parti d'un exemple en PHP ...

Voici ce que ça donne :

procedure TForm1.TrierTableau();
var lasTableauATrier : Array of array of String;
      lasLigne_Tampon : array of String;
      lasTableau_Tampon : Array of array of String;
      MaxLig, MaxCol, i, j, l, k, m, v, w,liColonneATrier : Integer;
begin
    SetLength(lasTableauATrier, 3, 3);


    lasTableauATrier[0,0] := '1340234';
    lasTableauATrier[0,1] := 'ENC10001';
    lasTableauATrier[0,2] := '2007-04-02';


    lasTableauATrier[1,0] := '1000076';
    lasTableauATrier[1,1] := 'PRO1000001';
    lasTableauATrier[1,2] := '2007-04-03';


    lasTableauATrier[2,0] := '1000032';
    lasTableauATrier[2,1] := 'PRO1000063';
    lasTableauATrier[2,2] := '2007-04-01';


    liColonneATrier := 0;


    { Récupération des deux dimensions du tableau (lignes, colonnes) }
    MaxLig := 3;
    MaxCol := 3;


    SetLength(lasLigne_Tampon, MaxCol);
    SetLength(lasTableau_Tampon, MaxCol, MaxLig);

    For i := 0 to MaxLig -1 do
        For j := 0 to MaxCol -1 do
            DebugTextOut(lasTableauATrier[i, j]);


    i := 0;
    repeat
        { Chaque élément est comparé à celui qui lui est supérieur dans le classement }
        j := 0;
        repeat
           If (lasTableauATrier[j, k] > lasTableauATrier[(j + 1), k]) Then
            begin
                { l'élément J est plus important que l'élément J + 1 alors on les intervertit }
                for l := 0 to MaxCol - 1 do
                begin
                    lasLigne_Tampon[l] := lasTableauATrier[j,l];
                    lasTableau_Tampon[j,l] := lasTableauATrier[(j + 1),l];
                    lasTableau_Tampon[(j + 2), l] := lasLigne_Tampon[l];
                end;


                if (j < MaxLig - 2) then
                    Inc(j);
            end
            else
            begin
                for l := 0 to MaxCol do
                begin
                    lasTableau_Tampon[j,l] := lasTableauATrier[j,l];
                    lasTableau_Tampon[(j + 1),l] := lasTableauATrier[(j+1),l];
                end;


            end;
            //Inc(j);
        until j = (MaxLig -1);
        Inc(i);

        For v := 0 to MaxLig -1 do
            For w := 0 to MaxCol -1 do
    


        //lasTableauATrier := lasTableau_Tampon;
    until i = MaxLig
end;

Mel  qui vous remercie à l'avance

3 réponses

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
1
Je revendique et recommande le deuxième ^^








Mais dans ton cas, je te recommande de faire un array of record, puisqu'apparamment, il s'agit plutôt d'enregistrements. De ce fait, tout sera plus simple et tu pourras faire une inversion de deux index en seulement trois lignes de code, au lieu de devoir faire une boucle.

++

   
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
pourquoi ne pas utiliser un TStringList ??!

<hr size="2" width="100%" />Croc (click me)
Messages postés
6
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
10 février 2009

J'essaie cela et je vous donnes des nouvelles!!!

merci à tous pour votre aide!

Mel