cs_liberation
Messages postés9Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention25 août 2011
-
1 avril 2011 à 09:54
cs_liberation
Messages postés9Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention25 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.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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