TRI HORIZONTAL

Résolu
cs_liberation Messages postés 9 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 25 août 2011 - 1 avril 2011 à 09:54
cs_liberation Messages postés 9 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 25 août 2011 - 1 avril 2011 à 17:11
Bonjour,

J'ai besoin de votre aide pour réaliser un tri de combinaisons du loto.
Dans une fenêtre Richedit, j'affiche les combinaisons d'un fichier loto dont les combinaisons sont dans le désordre.
Pouvez-vous me dire comment je dois faire pour trier chaque combinaison dans un ordre croissant, avant de l'afficher dans la fenêtre richedit ?
Je suis débutant et bien incapable de m?en sortir.
Merci pour le coup de main.

http://img63.xooimage.com/views/6/7/e/tri-2739849.jpg/

7 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 avril 2011 à 11:44
Salut,

voici une alternative au trie.

[hr]function TriNumString(const str: string): string;

  function LeadingZero(Num: Integer; const Prec: Byte =  2):  string ;
  [b]begin
    /bResult : = Format('%.*d', [Prec, Num]);
  end;
[b]var
  /bP: PChar;    // sert de pointeur sur les données
  Str2: string[2]; // contient le nombre courant en string
  Value: Integer;  // contient le nombre courant en entier
  aBoolArray: array[1..49] of boolean; // tableau de boolean
[b]begin
  /b{on met tout le tableau à False}
  for Value : =  1  to  49 [b]do
    /baBoolArray[Value] : =  False;
   {pointe sur le début de la chaine}
  P : =  @Str[1];
  [i]{tant qu'on est pas à la fin de la chaine}
  /i while  P^ <> #0 [b]do
  begin
    /b{récupère le nombre}
    Str2 : =  P;
     {tente la conversion en entier}
    if TryStrToInt(Str2, Value) [b]then
      /b[i]{si ok on met l'index correspondant du tableau à True}
      /iaBoolArray[Value] : =  True
    [b]else
      /b{si non on déclanche une erreur de conversion}
       raise  EConvertError.Create('Erreur de conversion');
    {et on se déplace au suivant ... 2 chiffres + un espace  =  3 caractères}
    Inc(P, 3);
  end;
  [i]{et pour finir on vérifie dans l'ordre le tableau}
  /ifor Value :=  1  to  49 [b]do
    /b {si True}
    if aBoolArray[Value] [b]then
      /b[i]{on l'ajoute à la chaine finale + un espace}
      /iResult : = Result + LeadingZero(Value) + #32;
end;

var  {deux variables pour tester}
  aStr1: string =  '44 26 36 04 11';
  aStr2:  string  = '17 49 08 15 29';
  {Utilisation}
procedure TForm5.Button1Click(Sender: TObject);
[b]begin
  /bListBox1.Items.Add(TriNumString(aStr1));
  ListBox1.Items.Add(TriNumString(aStr2));
end;
[hr]
voilà c'est assez simple à comprendre .. à toi de traiter chaque chaine avant des les ajouter à ta ListBox

[hr]@+Cirec
[hr]
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 avril 2011 à 13:41
bon ...

tu peux virer tout ce que tu as mis dans ta procédure "Button1Click" .. variables comprises.

et remplacer par ceci:
[hr]function TriNumString(const str: string): string;

  function LeadingZero(Num: Integer; const Prec: Byte =  2):  string ;
  [b]begin
    /bResult : = Format('%.*d', [Prec, Num]);
  end;
[b]var
  /bP: PChar;    // sert de pointeur sur les données
  Str2: string[2]; // contient le nombre courant en string
  Value: Integer;  // contient le nombre courant en entier
  aBoolArray: array[1..49] of boolean; // tableau de boolean
[b]begin
  /b{initialise le résultat à une chaine vide}
  Result : =  EmptyStr;
  {on met tout le tableau à False}
   for  Value : =  1 to 49 [b]do
    /baBoolArray[Value] :=  False;
   {pointe sur le début de la chaine}
  P : = @Str[1];
  [i]{tant qu'on est pas à la fin de la chaine}
  /i while  P^ <> #0 [b]do
  begin
    /b{récupère le nombre}
    Str2 : =  P;
     {tente la conversion en entier}
    if TryStrToInt(Str2, Value) [b]then
      /b[i]{si ok on met l'index correspondant du tableau à True}
      /iaBoolArray[Value] : =  True
    [b]else
      /b{si non on déclanche une erreur de conversion}
       raise  EConvertError.Create('Erreur de conversion');
    {et on se déplace au suivant ... 2 chiffres + un espace  =  3 caractères}
    Inc(P, 3);
  end;
  [i]{et pour finir on vérifie dans l'ordre le tableau}
  /ifor Value :=  1  to  49 [b]do
    /b {si True}
    if aBoolArray[Value] [b]then
      /b[i]{on l'ajoute à la chaine finale + un espace}
      /iResult : = Result + LeadingZero(Value) + #32;
end;

procedure TForm5.Button2Click(Sender: TObject);
[b]var
  /bJ: Integer;
[b]begin
  /b{si on choisit un fichier avec OpenDialog}
  if OpenDialog1.Execute [b]then
  try
    /b{début des modifications}
    RichEdit1.Lines.BeginUpdate;
    {charge le fichier dans le RichEdit}
    RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
    {et pour chaque ligne}
    for J :=  0  to  RichEdit1.Lines.Count-1 [b]do
      /b {on trie et on réaffecte le résultat}
      RichEdit1.Lines[J] : = TriNumString(RichEdit1.Lines[J]);
  [b]finally
    /b{fin des modifications}
    RichEdit1.Lines.EndUpdate;
  end;
end;
[hr]
ps: la fonction "TriNumString" a été modifiée il faut donc remplacer l'ancienne par celle ci-dessus.


[hr]@+Cirec
[hr]
3
cs_liberation Messages postés 9 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 25 août 2011
1 avril 2011 à 12:39
Merci beaucoup,Cirec, d'avoir eu la gentillesse de répondre à mon désarroi.

mais, comme je l'ai dit je suis débutant ( tout petit débutant ! )

J'avais commencé à coder le button1 comme ceci :

procedure TForm1.Buttonn1Click(Sender: TObject);
var
v,a,b,c,d,e:string;
li:integer;
f,k:textfile;
begin
assignfile(f,v);
reset(f);
opendialog1.Execute;
v:=opendialog1.FileName;
RICHEDIT1.Lines.LOADFROMFILE(v);

Où dois-je insérer ton code ?

Faut-il faire des modifs ?

Pardon d'être si nul, mais je patine dans la purée...

Cordialement.
0
cs_liberation Messages postés 9 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 25 août 2011
1 avril 2011 à 13:15
http://img60.xooimage.com/views/3/b/d/tri2-273a89b.jpg/

Merci, Cirec, parfait le tri. Il me reste maintenant à trouver le moyen de "charger" toute la liste des combinaisons.

Merci pour le coup de main, c'est sympat

un dernier truc que jaimerais comprendre c'est quoi dans ton code : '%.*d' ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_liberation Messages postés 9 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 25 août 2011
1 avril 2011 à 15:23
un très grand MERCI, Cirec, tu m'a vraiment éclairé ma lanterne !

Super !!!

http://img61.xooimage.com/views/5/f/b/tri3-273b528.jpg/
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 avril 2011 à 16:24
content que ça te plaise.

juste une chose encore ... penses à cliquer sur le bouton "Réponse Acceptée" du message qui résout ton problème ... c'est plus facile pour les suivants de trouver la bonne réponse.

pour cette question j'ai fait les changements pour toi mais à l'avenir essayes d'y penser


[hr]@+Cirec
[hr]
0
cs_liberation Messages postés 9 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 25 août 2011
1 avril 2011 à 17:11
Ok, no problème !
0
Rejoignez-nous