Tri a bulle dans un stringGrid

Signaler
Messages postés
30
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
23 décembre 2011
-
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
-
voila j'ai un probleme avec un tri a bulle ou plutot le stringGrid.

Je voudrais trier des cellules (numerotées de 1 à x) dans l'ordre croissant. sauf que si j'ai un numéro 10 dans une cellule il considere que c'est la valeur 1 et est classé juste après le 1. En gros il me classe que 9 valeurs alors je sais pas si c'est mon code de tri a bulle qui est pas bon ou le stringGrid qui ne peut prendre 2 nbres en valeurs en tt cas voici mon code de tri :

//Permet d'afficher les équipes dans l'ordre du classement
var i,j,val : integer;
procedure Permuter(a,b : integer);
//échange les lignes a et b de la grille grClassement
var ch : string;
i : integer;
begin
with FormClassement.StringGridClassement do
for i := 0 to 7 do
begin
ch := cells[i,a];
cells[i,a] := cells[i,b];
cells[i,b] := ch;
end;
end;


begin
with FormClassement.StringGridClassement do
for i := 1 to NbEquipes - 1 do
for j := 1 to NbEquipes - i do
if cells[7, j] < cells[7, j + 1] then Permuter(j, j + 1);


end;

merci de m'aider.

tony
A voir également:

7 réponses

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Au lieu de mettre
if cells[7, j] < cells[7, j + 1] then Permuter(j, j + 1);
il faut que tu compares les valeurs en tant que nombre entier et non en tant que chaînes
C'est à dire :
if StrToInt(cells[7, j]) < StrToInt(cells[7, j + 1]) then Permuter(j, j + 1);
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Mais, au lieu d'utiliser le tri à bulle (peu performant) je te conseille d'utiliser l'algorithme QuickSort qui lui, est bien plus rapide.
Tu vas me dire: "oui mais c'est plus dur à mettre en place"
Et je vais te répondre: "pas avec mon impémentation simplifiée de QuickSort". (je fais bien ma pub hein ?)

Va voir ici: Quicksort: Implémentation facile

Tu y trouvera deux exemples d'utilisation et tu verras, c'est très simple.
Si tu as quand même un problème, demande moi de l'aide (sur le forum).

@ Cirec si tu passes ici: sur ce coup, tu as 'perdu' ^^. en effet, avec ta façon d'aborder l'algortihme, tu n'as pas prévu commen faire si quelqu'un veux trier delon la ligne 7 d'un stringgrid !!

Si tu ne te plantes pas ......
tu ne pousseras jamais
Messages postés
30
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
23 décembre 2011

merci a toi. c'était tout bete ms j'y avais pas pensé et sa faiait un petit moment que je cherchais et a la fin sa ma soulé.

Ta methode QuickSort est plus compliqué et comme sa marche comme cela ... ms je garde les sources sous le coude sa peu servir si tu dit que c'est plus rapide d'execution.

Autre chose comment fais tu pour agrandir la fenetre de mon programme selon la longueur de mon stringGrid?

merci

tony
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Je te conseille plus de mettre des ScrollBars à ton StringGrid plutot que de redimentionner la fenetre. Parce que pour ceux qui ont de petites résolutions d'écran ou si jamais ton StringGrid est un peu trop large, ça coince ...

StringGrid.ScrollBars := ssBoth; // De toutes façons, c'est activé par défaut

Si tu ne te plantes pas ......
tu ne pousseras jamais
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
@ Florenth,
Cirec si tu passes ici: sur ce coup, tu as 'perdu' ^^. en effet, avec ta façon d'aborder l'algortihme, tu n'as pas prévu commen faire si quelqu'un veux trier delon la ligne 7 d'un stringgrid !!



la tu m'as eu ...



mais en même temps à la base ma version était prévue pour trier les tableaux (dynamique où non) et pour pouvoir les afficher, le tout, simplement (ce qu'elle fait) et c'est à la fin j'ai vu que l'on pouvait aussi lui passer des TStrings.

Alors oui je n'ai pas pensé à trier selon une ligne mais par contre tu peux trier juste une partie (de la ligne 5 à la ligne 15 par Ex.) que ce soit d'un tableau où d'un Memo etc...
Et je pense que ce ne doit pas être trop dur de rajouter cette partie (quoi que j'en vois pas l'intérêt)

<hr>













@+
Cirec
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Et ben, ma fonction, elle s'appelle SortAnything() et elle est faire pour trier anything !!
Non, sérieusement, c'est juste pour te montrer que cela ne sert à rien de vouloir coder un unité qui permettrait de TOUT trier rien qu'en une ligne. Après c'est sur, si tu tries tout le temps des 'array of Integer' ou des 'TStrings', là tu es gagnant.

Bref, on arrete le débat, on en a déjà trop dit ... quoique c'était surement plus interessant de débattre là dessus que de répondre à un petit paumé "comment on enrigistre les lignes d'une Listbox dans un fichier ??" mdr.

PS: ma fonction aussi permet de trier depuis la ligne 5j usqu'a la ligne 15. Je le précise car ta réponse me laissait perplexe la dessus.

@ ++

Si tu ne te plantes pas ......
tu ne pousseras jamais
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
Désolé pour la mise en page
C'est déjà la deuxième fois que ça m'arrive ????

Bref, on arrete le débat, on en a déjà trop dit ... quoique c'était surement plus interessant de débattre là dessus que de répondre à un petit paumé "comment on enrigistre les lignes d'une Listbox dans un fichier ??" mdr.

D'accord avec toi et j'ai vu et c'est trop fort

Mais au passage elle fait plus que que seulement trier des array of Integer où des TStrings
et ce que déteste par dessus tout c'est de devoir réécrir tout le temps de même code ce que j'ai pris en compte chez moi. Donc si tu as besoin d'un nouveau type d'array qui en comporte quand même déjà 27, il suffit de le rajouter et ce une fois pour toute.

Avis aux Admin : La nouvelle fenêtre de selection pur ajouter une image il manque un bouton de sélection où je l'ai pas vu et a la place de l'aperçu il y a un texte dans une langue ???

<hr>
@+
Cirec