RosettaCodeData/Task/Knuth-shuffle/Pascal/knuth-shuffle.pascal

53 lines
805 B
Text
Raw Permalink Normal View History

2013-04-10 22:43:41 -07:00
program Knuth;
const
2016-12-05 22:15:40 +01:00
startIdx = -5;
max = 11;
2013-04-10 22:43:41 -07:00
type
2016-12-05 22:15:40 +01:00
tmyData = string[9];
tmylist = array [startIdx..startIdx+max-1] of tmyData;
2013-04-10 22:43:41 -07:00
2016-12-05 22:15:40 +01:00
procedure InitList(var a: tmylist);
2013-04-10 22:43:41 -07:00
var
2016-12-05 22:15:40 +01:00
i: integer;
Begin
for i := Low(a) to High(a) do
str(i:3,a[i])
end;
procedure shuffleList(var a: tmylist);
var
i,k : integer;
tmp: tmyData;
2013-04-10 22:43:41 -07:00
begin
2016-12-05 22:15:40 +01:00
for i := High(a)-low(a) downto 1 do begin
k := random(i+1) + low(a);
tmp := a[i+low(a)]; a[i+low(a)] := a[k]; a[k] := tmp
2013-04-10 22:43:41 -07:00
end
end;
2016-12-05 22:15:40 +01:00
procedure DisplayList(const a: tmylist);
var
i : integer;
Begin
for i := Low(a) to High(a) do
write(a[i]);
writeln
end;
2013-04-10 22:43:41 -07:00
{ Test and display }
var
2016-12-05 22:15:40 +01:00
a: tmylist;
2013-04-10 22:43:41 -07:00
i: integer;
begin
2016-12-05 22:15:40 +01:00
randomize;
InitList(a);
DisplayList(a);
writeln;
For i := 0 to 4 do
Begin
shuffleList(a);
DisplayList(a);
end;
2013-04-10 22:43:41 -07:00
end.