📄 cpwperm.pas
字号:
{$I CPDIR.INC}
unit cpwperm;
interface
uses
cpwrand; { uniform random number generator }
const
MAXITEMS = 100;
type
PERMUTATION = array[1..MAXITEMS] of 0..MAXITEMS;
type
PERM_OBJ = object
P: PERMUTATION;
constructor Init (n:integer; Seed:longint);
function GetSeed:longint;
procedure MakeOne;
procedure Show(var f:text);
private
U : UNIFORM;
items : 0..MAXITEMS;
RT : 0..1;
SeedUsed : longint;
end;
implementation
{ create vector <1,..,n> }
constructor PERM_OBJ.Init (n:integer; Seed:longint);
var
i: integer;
begin
if (Seed = 0) then begin
U.Init;
SeedUsed := U.GetSeed;
end
else begin
U.SetSeed (Seed);
SeedUsed := Seed;
end;
items := n;
for i := 1 to items do
P[i] := i;
RT := 0;
end;
function PERM_OBJ.GetSeed:longint;
begin
GetSeed := SeedUsed;
end;
{ Generate a random permutation }
procedure PERM_OBJ.MakeOne;
var
Temp, i, j, k : integer;
r : real;
begin
for i := 1 to Pred (items) do begin
r := U.Rand01;
j := items - i + 1;
k := Trunc (j * r) + 1;
Temp := P[j];
P[j] := P[k];
P[k] := Temp;
end;
end;
{ show }
procedure PERM_OBJ.Show(var f:text);
var
i:integer;
begin
for i := 1 to items do
write (f, P[i]:3);
writeln (f);
end;
begin
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -