Generate random numbers without repeating a value: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (→{{header|Raku}}: add roll() example) |
No edit summary |
||
Line 280: | Line 280: | ||
PRINT |
PRINT |
||
END SUB</syntaxhighlight> |
END SUB</syntaxhighlight> |
||
=={{header|Delphi}}== |
|||
{{works with|Delphi|6.0}} |
|||
{{libheader|SysUtils,StdCtrls}} |
|||
Creates a "TRandomizer" object which makes it easy to setup and use multiple non repeating randomizers. Since the objects are independent, each one can have different parameters. |
|||
<syntaxhighlight lang="Delphi"> |
|||
{Create randomize object to make it easier to use} |
|||
type TRandomizer = class(TObject) |
|||
private |
|||
FSize: integer; |
|||
procedure SetSize(const Value: integer); |
|||
protected |
|||
procedure Randomize; |
|||
public |
|||
Numbers: array of Integer; |
|||
constructor Create; |
|||
property Size: integer read FSize write SetSize; |
|||
end; |
|||
{ TRandomizer } |
|||
constructor TRandomizer.Create; |
|||
begin |
|||
Size:=20; |
|||
end; |
|||
procedure TRandomizer.Randomize; |
|||
var I,Inx1,Inx2,T: integer; |
|||
begin |
|||
for I:=1 to 100 do |
|||
begin |
|||
Inx1:=Random(Length(Numbers)); |
|||
Inx2:=Random(Length(Numbers)); |
|||
T:=Numbers[Inx1]; |
|||
Numbers[Inx1]:=Numbers[Inx2]; |
|||
Numbers[Inx2]:=T; |
|||
end; |
|||
end; |
|||
procedure TRandomizer.SetSize(const Value: integer); |
|||
var I: integer; |
|||
begin |
|||
if FSize<>Value then |
|||
begin |
|||
FSize:=Value; |
|||
SetLength(Numbers,FSize); |
|||
for I:=0 to FSize-1 do Numbers[I]:=I+1; |
|||
Randomize; |
|||
end; |
|||
end; |
|||
{------------------------------------------------------------------------------} |
|||
procedure ShowRandomNumbers(Memo: TMemo); |
|||
var RD: TRandomizer; |
|||
var S: string; |
|||
var I,J: integer; |
|||
begin |
|||
RD:=TRandomizer.Create; |
|||
try |
|||
RD.Size:=20; |
|||
for J:=1 to 5 do |
|||
begin |
|||
RD.Randomize; |
|||
S:='['; |
|||
for I:=0 to High(RD.Numbers) do |
|||
S:=S+Format('%3D',[RD.Numbers[I]]); |
|||
S:=S+']'; |
|||
Memo.Lines.Add(S); |
|||
end; |
|||
finally RD.Free; end; |
|||
end; |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
[ 20 12 9 19 2 8 16 14 10 4 11 6 18 5 7 1 17 3 15 13] |
|||
[ 7 12 20 13 4 19 8 3 17 5 2 6 9 1 15 11 18 16 10 14] |
|||
[ 19 12 7 20 6 16 1 10 13 15 4 2 8 9 3 17 11 18 14 5] |
|||
[ 18 13 12 20 8 2 3 10 4 16 19 1 7 5 11 15 9 6 17 14] |
|||
[ 17 20 19 3 6 10 12 9 5 16 18 7 8 13 4 15 1 11 14 2] |
|||
</pre> |
|||
=={{header|F_Sharp|F#}}== |
=={{header|F_Sharp|F#}}== |