Q&A

  • 2차배열을사용 랜덤번호 생성하기...
사용 목적
배열값에 랜덤으로 번호를 생성을한다.
대신 조건이 있다.

예를 들어서..
Game_Round[0,7] : 12, 32, 8, 20, 19, 32, 41
Game_Round[1,7] : 42, 19, 9, 35, 49, 32, 9
Game_Round[2,7] : 11, 14, 10, 5, 15, 35, 11
.
.
이런식으로...Game_Round[0,7]값들중 같은 값이 들어가지 않도록 while돌려서 체크한다.
또한 숫자가 작은순으로 정렬할수 있도록 구현하려합니다.
짱구를 굴려서 해보려했는데 ㅡ.,ㅡ 힘드네영!

//배열선언
Game_Round : Array[0..4, 0..6] of String;

function TForm1.Number_Create : Boolean;
var
  Round, Number : Integer;
begin
  Randomize; // 초기화
  for Round := 0 to 4 do begin
    for Number := 0 to 6 do begin
      Game_Round[Round, Number] := IntToStr(RANDOM(49)+1);
    end;
  end;
  Result := TRUE;
end;
1  COMMENTS
  • Profile
    착한천사 2005.01.21 02:21
    착한천사 김경록입니다..
    흠.. 별로 어려워 보이지는 않는데..
    그냥, 함수별로 기능을 분리해서 만들어봤습니다..
    아래에 소스 뿌립니다..

    procedure TForm1.BitBtn1Click(Sender: TObject);
        //배열중 유일한값 검색 및 확정
        Function FindUnique(var ar_Array: Array of Integer; Value:Integer): Integer;
        Var
            I: Integer;
        Begin
            I := Low(ar_Array);
            While I <= High(ar_Array) Do
            Begin
                If ar_Array[I] = Value Then
                Begin
                    I     := Low(ar_Array)-1;
                    Value := Random(49)+1;
                End;
                I := I + 1;
            End;

            Result := Value;
        End;

        //난수값을 입력할 배열 위치 검색
        Function FindIndex(var ar_Array: Array of Integer; Value:Integer): Integer;
        Var
            I: Integer;
        Begin
            For I := Low(ar_Array) To High(ar_Array) Do
                If Value < ar_Array[I] Then
                Begin
                    Result := I;
                    Exit;
                End;
        End;

        //정렬
        Procedure MoveData(var ar_Array: Array of Integer; Y, Index:Integer);
        Var
            I: Integer;
        Begin
            For I := High(ar_Array)-1 DownTo Index Do
            Begin
                ar_Array[I+1] := ar_Array[I];
                StringGrid1.Cells[I+1, Y] := IntToStr(ar_Array[I]);
                Application.ProcessMessages;
            End;
        End;

    Var
        ll_X, ll_Y, ll_Value, ll_Idx: Integer;
        l_Array: Array[0..4,0..6] Of Integer;
    begin
        For ll_Y := 0 To 4 Do
            For ll_X := 0 To 6 Do
            Begin
                l_Array[ll_Y,ll_X] := ((ll_Y+1)*100) + (ll_X+1);
                StringGrid1.Cells[ll_X, ll_Y] := IntToStr(l_Array[ll_Y,ll_X]);
            End;


        Randomize;
        For ll_Y := 0 To 4 Do
            For ll_X := 0 To 6 Do
            Begin
                ll_Value := FindUnique(l_Array[ll_Y], Random(49)+1);
                ll_Idx   := FindIndex(l_Array[ll_Y], ll_Value);
                MoveData(l_Array[ll_Y], ll_Y, ll_Idx);
                l_Array[ll_Y, ll_Idx] := ll_Value;
            End;

        For ll_Y := 0 To 4 Do
            For ll_X := 0 To 6 Do
                StringGrid1.Cells[ll_X, ll_Y] := IntToStr(l_Array[ll_Y, ll_X]);
    end;