Transcription code Delphi vers Pure Basic
Publié : sam. 23/févr./2008 14:05
Bonjour.
Je Tente avec peine de transcrire ce code Delphi en Pure Basic.
Ce code servant à calculer des systèmes réducteurs.
La syntaxe Delphi etant un peu " lourde" a decripter, surtout la fin des boucles avec le begin, sans compter les ; qui ne facilitent pas la visibilité...
( puis sans intentation)
===================
program Reducteur;
{$APPTYPE CONSOLE}
uses
SysUtils;
{
Objectif : programme de calcul de systèmes réducteurs
Le programme calcule le nombre de combinaisons nécessaires pour
être sûr d'obtenir n numéros parmis m tirés sur une sélection de p numéros
}
type
TCombinaison = record
Necessaire : Boolean;
Tirage : array[0..5] of byte;
end;
function Combinaison(AValeurMax : Integer; ASelection : Integer) : Integer;
var
i : Integer;
p : Integer;
r : Int64;
begin
r := 1;
p := AValeurMax;
for i := 0 to Pred(ASelection) do begin
r := p * r;
Dec(p);
end;
p := ASelection;
for i := 0 to Pred(ASelection) do begin
r := r div p;
Dec(p);
end;
Result := r;
end;
var
i : integer;
j,k,l : Integer;
nb_numeros_tires : Integer;
nb_numeros_selectionnes : Integer;
nb_numeros_objectif : Integer;
nb_numeros_max : Integer;
combinaisons : array of TCombinaison;
nb_combinaisons : Integer;
nb_numero_communs : Integer;
nb_combinaisons_selectionnee : Integer;
begin
nb_numeros_tires := 6; // Base
nb_numeros_max := 60; // Numeros totals
nb_numeros_objectif := 3; // Reduction
for nb_numeros_selectionnes := nb_numeros_tires to nb_numeros_max do begin
// calcul du nombre de combinaisons possibles
nb_combinaisons := Combinaison(nb_numeros_selectionnes, nb_numeros_tires);
SetLength(combinaisons, nb_combinaisons);
System.Writeln(Format('Selection : %d '#7' Combinaisons : %d', [nb_numeros_selectionnes, nb_combinaisons]));
// remplissage du tableau
combinaisons[0].Tirage[0] := 1;
combinaisons[0].Tirage[1] := 2;
combinaisons[0].Tirage[2] := 3;
combinaisons[0].Tirage[3] := 4;
combinaisons[0].Tirage[4] := 5;
combinaisons[0].Tirage[5] := 6;
Combinaisons[0].Necessaire := True; // Par défaut on garde tout
if High(Combinaisons) > 0 then begin
for i := 1 to High(Combinaisons) do begin
for j := 0 to High(Combinaisons.Tirage) do begin
Combinaisons.Tirage[j] := Combinaisons[i-1].Tirage[j];
end;
j := High(Combinaisons.Tirage);
Inc(Combinaisons.Tirage[j]);
while Combinaisons.Tirage[j] > (nb_numeros_selectionnes + j - High(Combinaisons.Tirage)) do begin
Inc(Combinaisons.Tirage[j-1]);
Dec(j);
end;
for j := 1 to High(Combinaisons.Tirage) do begin
if Combinaisons.Tirage[j] > (nb_numeros_selectionnes + j - High(Combinaisons.Tirage)) then begin
Combinaisons[i].Tirage[j] := Combinaisons[i].Tirage[j-1] + 1;
end;
end;
Combinaisons[i].Necessaire := True;
end;
end;
// Recherche des combinaisons nécessaires
nb_combinaisons_selectionnee := 0;
for i := 0 to Pred(nb_combinaisons) do begin
if Combinaisons[i].Necessaire then begin
Inc(nb_combinaisons_selectionnee);
for j := i + 1 to Pred(nb_combinaisons) do begin
nb_numero_communs := 0;
for k := 0 to High(Combinaisons[i].Tirage) do begin
for l := 0 to High(Combinaisons[j].Tirage) do begin
if Combinaisons[i].Tirage[k] = Combinaisons[j].Tirage[l] then begin
Inc(nb_numero_communs);
if nb_numero_communs = nb_numeros_objectif then break;
end;
end;
if nb_numero_communs = nb_numeros_objectif then break;
end;
if nb_numero_communs = nb_numeros_objectif then begin
Combinaisons[j].Necessaire := False;
end;
end;
end;
end;
// Affichage
Writeln(Format('%d combinaisons necessaires', [nb_combinaisons_selectionnee]));
for i := 0 to Pred(nb_combinaisons) do begin
if Combinaisons[i].Necessaire then begin
for j := 0 to High(Combinaisons[i].Tirage) do begin
write(Format('%.2d ', [Combinaisons[i].Tirage[j]]));
end;
writeln('');
end;
end;
end;
system.Readln;
end.
================
Merci de toute astuce
Je Tente avec peine de transcrire ce code Delphi en Pure Basic.
Ce code servant à calculer des systèmes réducteurs.
La syntaxe Delphi etant un peu " lourde" a decripter, surtout la fin des boucles avec le begin, sans compter les ; qui ne facilitent pas la visibilité...
( puis sans intentation)
===================
program Reducteur;
{$APPTYPE CONSOLE}
uses
SysUtils;
{
Objectif : programme de calcul de systèmes réducteurs
Le programme calcule le nombre de combinaisons nécessaires pour
être sûr d'obtenir n numéros parmis m tirés sur une sélection de p numéros
}
type
TCombinaison = record
Necessaire : Boolean;
Tirage : array[0..5] of byte;
end;
function Combinaison(AValeurMax : Integer; ASelection : Integer) : Integer;
var
i : Integer;
p : Integer;
r : Int64;
begin
r := 1;
p := AValeurMax;
for i := 0 to Pred(ASelection) do begin
r := p * r;
Dec(p);
end;
p := ASelection;
for i := 0 to Pred(ASelection) do begin
r := r div p;
Dec(p);
end;
Result := r;
end;
var
i : integer;
j,k,l : Integer;
nb_numeros_tires : Integer;
nb_numeros_selectionnes : Integer;
nb_numeros_objectif : Integer;
nb_numeros_max : Integer;
combinaisons : array of TCombinaison;
nb_combinaisons : Integer;
nb_numero_communs : Integer;
nb_combinaisons_selectionnee : Integer;
begin
nb_numeros_tires := 6; // Base
nb_numeros_max := 60; // Numeros totals
nb_numeros_objectif := 3; // Reduction
for nb_numeros_selectionnes := nb_numeros_tires to nb_numeros_max do begin
// calcul du nombre de combinaisons possibles
nb_combinaisons := Combinaison(nb_numeros_selectionnes, nb_numeros_tires);
SetLength(combinaisons, nb_combinaisons);
System.Writeln(Format('Selection : %d '#7' Combinaisons : %d', [nb_numeros_selectionnes, nb_combinaisons]));
// remplissage du tableau
combinaisons[0].Tirage[0] := 1;
combinaisons[0].Tirage[1] := 2;
combinaisons[0].Tirage[2] := 3;
combinaisons[0].Tirage[3] := 4;
combinaisons[0].Tirage[4] := 5;
combinaisons[0].Tirage[5] := 6;
Combinaisons[0].Necessaire := True; // Par défaut on garde tout
if High(Combinaisons) > 0 then begin
for i := 1 to High(Combinaisons) do begin
for j := 0 to High(Combinaisons.Tirage) do begin
Combinaisons.Tirage[j] := Combinaisons[i-1].Tirage[j];
end;
j := High(Combinaisons.Tirage);
Inc(Combinaisons.Tirage[j]);
while Combinaisons.Tirage[j] > (nb_numeros_selectionnes + j - High(Combinaisons.Tirage)) do begin
Inc(Combinaisons.Tirage[j-1]);
Dec(j);
end;
for j := 1 to High(Combinaisons.Tirage) do begin
if Combinaisons.Tirage[j] > (nb_numeros_selectionnes + j - High(Combinaisons.Tirage)) then begin
Combinaisons[i].Tirage[j] := Combinaisons[i].Tirage[j-1] + 1;
end;
end;
Combinaisons[i].Necessaire := True;
end;
end;
// Recherche des combinaisons nécessaires
nb_combinaisons_selectionnee := 0;
for i := 0 to Pred(nb_combinaisons) do begin
if Combinaisons[i].Necessaire then begin
Inc(nb_combinaisons_selectionnee);
for j := i + 1 to Pred(nb_combinaisons) do begin
nb_numero_communs := 0;
for k := 0 to High(Combinaisons[i].Tirage) do begin
for l := 0 to High(Combinaisons[j].Tirage) do begin
if Combinaisons[i].Tirage[k] = Combinaisons[j].Tirage[l] then begin
Inc(nb_numero_communs);
if nb_numero_communs = nb_numeros_objectif then break;
end;
end;
if nb_numero_communs = nb_numeros_objectif then break;
end;
if nb_numero_communs = nb_numeros_objectif then begin
Combinaisons[j].Necessaire := False;
end;
end;
end;
end;
// Affichage
Writeln(Format('%d combinaisons necessaires', [nb_combinaisons_selectionnee]));
for i := 0 to Pred(nb_combinaisons) do begin
if Combinaisons[i].Necessaire then begin
for j := 0 to High(Combinaisons[i].Tirage) do begin
write(Format('%.2d ', [Combinaisons[i].Tirage[j]]));
end;
writeln('');
end;
end;
end;
system.Readln;
end.
================
Merci de toute astuce
