1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| (* Problème de Flavius Josèphe *)
(* http://irem.u-strasbg.fr/php/articles/109_Lefort.pdf *)
program Flavius2;
uses Flash8;
{$FRAME_WIDTH 320}
{$FRAME_HEIGHT 200}
{$BACKGROUND 0}
////////////////////////////////////////////////////////////////////////////////
const
LARGEUR = 320;
HAUTEUR = 200;
VER = 'Compilateur FlashPascal 2 v13.05.04'#13;
var
t: TextField;
f: TextFormat;
s: string;
////////////////////////////////////////////////////////////////////////////////
const
n = 41; // nombre de personnes
k = 3; // nombre fatal
var
i: integer; // ordre d'élimination de 1 à n
j: integer; // rang de 1 à n
c: integer; // compteur de 1 à k
const
prec = 0;
suiv = 1;
var
a: array[1..n, prec..suiv]of integer; // liste chaînée :)
begin
////////////////////////////////////////////////////////////////////////////////
f := TextFormat.Create('Tahoma', 16);
f.color := clWhite;
f.leftMargin := 5;
t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
t.SetNewTextFormat(f);
////////////////////////////////////////////////////////////////////////////////
a[1, prec] := n;
a[1, suiv] := 2;
a[n, prec] := n-1;
a[n, suiv] := 1;
for j := 2 to n-1 do
begin
a[j, prec] := j-1;
a[j, suiv] := j+1;
end;
i := 0;
j := 1;
c := 0;
s := '';
while i < n do
begin
Inc(c);
if c > k then c := 1;
if c = k then
begin
a[a[j, prec], suiv] := a[j, suiv];
a[a[j, suiv], prec] := a[j, prec];
Inc(i);
s := s + 'Elimination ' + IntToStr(i) + ' rang ' + IntToStr(j) + Chr(13);
end;
j := a[j, suiv];
end;
////////////////////////////////////////////////////////////////////////////////
t.text := VER + s;
f.size := 12;
f.color := clLime;
t.SetTextFormat(0, Length(VER)-1, f);
////////////////////////////////////////////////////////////////////////////////
end. |
Partager