Tri tableau multidimensionnel

Résolu
coulombemel Messages postés 6 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 10 février 2009 - 13 avril 2007 à 17:16
coulombemel Messages postés 6 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 10 février 2009 - 13 avril 2007 à 22:01
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

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
13 avril 2007 à 19:44
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.

++

   
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
13 avril 2007 à 21:11
pourquoi ne pas utiliser un TStringList ??!

<hr size="2" width="100%" />Croc (click me)
0
coulombemel Messages postés 6 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 10 février 2009
13 avril 2007 à 22:01
J'essaie cela et je vous donnes des nouvelles!!!

merci à tous pour votre aide!

Mel
0
Rejoignez-nous