랜덤 함수를 쓰면은 임의의 값이 주어지잖아요..
근데.. 예를 들어 범위 1-100 까지의 랜덤 값을 100개 구할때..
(단, 100개는 모두 다른 정수)
어떻게 해야 되죠??
즉 1-100 까지의 범위 내에서 랜덤 정수 100개를 중복 없이 구해야 하는데 방법을 모르겠에요...
간단히 예를들면 1-5까지의 경우..
3 2 5 1 4 또는 2 5 1 4 3 등등 범위 내에서 전부 다른값이 나와야 된다는 겁니다.--;
고수님들 답변좀 부탁드립니다.--;
var
Form1: TForm1;
RandArray: array[1..MaxRand]of Char;
implementation
{$R *.DFM}
function RandNum: Integer;
var c: Integer;
begin
for c:= 1 to MaxRand do
if RandArray[c] = #0 then Break;
if c > MaxRand then
Result:= 0 // 최대 랜덤갯수를 초과 하면 0을 리턴한다.
else begin
repeat
Result:= Random(MaxRand) + 1;
until RandArray[Result] = #0;
RandArray[Result]:= #1;
end;
end;
procedure ResetRand;
begin
FillChar(RandArray, SizeOf(RandArray), #0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var c: Integer;
begin
ResetRand; // 랜덤 초기화
for c:= 1 to MaxRand do
Memo1.Lines.Add(IntToStr(RandNum));
end;
// 전체 랜덤수를 간단하게 구하고 싶으면 아래와 같이 하면됩니다.
// 단 아래 소스는Max 랜덤갯수를 초과하면 무한루프에 빠집니다.
procedure TForm1.Button2Click(Sender: TObject);
const MaxCount = 10;
var c: Integer;
CheckRand: array[1..MaxCount]of Char;
FUNCTION RandValue: Integer;
begin
repeat
Result:= Random(MaxCount) + 1;
until CheckRand[Result] = #0;
CheckRand[Result]:= #1;
end;
begin
FillChar(CheckRand, SizeOf(CheckRand), #0);
for c:= 1 to MaxRand do
Memo1.Lines.Add(IntToStr(RandNum));
end;