Apa itu Unique Random?
Unique Random adalah bilangan acak yang tidak boleh berulang alias unique.
Memang agak repot untuk membuat unique random di Delphi 7. Salah satunya karena tidak ada List<Integer> seperti di Java.
Salah satu contoh implementasi unique random adalah untuk mengacak soal seperti di CAT(Computer Assisted Test) milik BKN(Badan Kepegawaian Negara) yg dipakai untuk Tes CPNS. Tujuannya adalah untuk meminimalisir terjadinya saling contek jawaban antar peserta.
Source Code
<pre class="brush:delphi">procedure Shuffle(var aArray; aItemCount: Integer; aItemSize: Integer);
var
Inx: Integer;
RandInx: Integer;
SwapItem: PByteArray;
A: TByteArray absolute aArray;
begin
Randomize;
if (aItemCount > 1) then
begin
GetMem(SwapItem, aItemSize);
try
for Inx := 0 to (aItemCount - 2) do
begin
RandInx := Random(aItemCount - Inx);
Move(A[Inx * aItemSize], SwapItem^, aItemSize);
Move(A[RandInx * aItemSize], A[Inx * aItemSize], aItemSize);
Move(SwapItem^, A[RandInx * aItemSize], aItemSize);
end;
finally
FreeMem(SwapItem, aItemSize);
end;
end;
end;
procedure TForm1.btnGenerateClick(Sender: TObject);
begin
goRandom(se1.Value);
end;
Implementasi
<pre class="brush:delphi">procedure TForm1.goRandom(x : Integer);
var
a: array[1..100] of Integer;
i: Shortint;
begin
lst1.Clear;
Randomize;
for i := Low(a) to x {High(a)} do a[i] := i;
Shuffle(a, x{High(a)}, SizeOf(Integer));
for i := 1 to {High(a)} x - 1 do
lst1.Items.Add(IntToStr(i)+' | '+IntToStr(a[i]));
end;
[dl url=âhttp://hangga.github.io/blog/wp-content/uploads/2014/08/UniqueRandom.rarâ title=âDownload Source Lengkapâ desc=âTolles Archivâ]
Referensi: http://www.swissdelphicenter.ch/en/showcode.php?id=1006