天天看點

VB 任意随機數(N-M)的通用函數(單取、多取存入數組、排序等功能) 内附随機數介紹

如果對于随機數了解沒有什麼問題,請跳過思路,直接看函數,如果對有函數有疑問或是改進意思,歡迎來信[email protected]

' 思路

Randomize   ' 初始化随機數生成器

Print   Int ( Rnd ()  *   2 )   ' 生成随機數範圍是0-1

' 如果要生成1-10之間的随機數:

' 可以看作随機數的的起始數是:1,範圍是1+(0~9)

' Int(Rnd() * 10) 生成0-9之間的數,再加上起始數1,是以

Print   Int ( Rnd ()  *   10 )  + 1

' 如果要生成10-30之間的随機數:

' 可以看作随機數的起始數是:10,範圍是10+(0~20)

' int(Rnd() * 21)生成0-20之間的随機數,再加上起始數10,是以

Print   Int ( Rnd ()  *   20 + 1 )  + 10

' 如果要生成N-M之間的随機數

' 可以看作随機數的起始數是:N,範圍是10+(0~M-N)

' int(Rnd() * (M-N+1))生成0-(M-N)之間的随機數,再加上起始數N,是以

Print   Int ( Rnd ()  *  (M - N + 1 ))  + N

函數正文:

' --------------------------------------------------------------------------------------

' 任意随機數(N-M)的函數(單取、多取存入數組、排序等功能)

' ----------------------------------------------2008-4-11

' -----------------------------------by 鞠勇鴻

' 對于本函數有改進意見,如果您友善請發郵件緻:[email protected]

' --------------------------------------------------------------------------------------

Function  getRnd(N, M  As   Integer )  As   Integer   ' 取N-M之間的随機數,M>=N

  getRnd  =   Int ( Rnd ()  *  (M  -  N  +   1 ))  +  N

End Function

Function  getArrRndNR(Counter  As   Integer , N, M  As   Integer )  As   Integer ()  ' 取Counter個N-M之間的随機數(不重複)

   If  (Counter  >  (M  -  N  +   1 ))  Then

     MsgBox   " 随機數設定不正确 "

     Exit Function

   End   If

   ReDim  arr( 1   To  Counter)  As   Integer

  i  =   0

   Do   While  i  <  Counter

    arr(i  +   1 )  =  getRnd(N, M)

    found  =   False

     For  X  =   1   To  i

       If  arr(X)  =  arr(i  +   1 )  Then

        found  =   True

         Exit   For

       End   If

     Next

     If   Not  found  Then

      i  =  i  +   1

     End   If

   Loop

  getArrRndNR  =  arr

End Function

Function  getArrRnd(Counter  As   Integer , N, M  As   Integer )  As   Integer ()  ' 取Counter個N-M之間的随機數(可重複)

   If  (Counter  >  (M  -  N  +   1 ))  Then

     MsgBox   " 随機數設定不正确 "

     Exit Function

   End   If

   ReDim  arr( 1   To  Counter)  As   Integer

   For  i  =   1   To  Counter

    arr(i)  =  getRnd(N, M)

   Next

  getArrRnd  =  arr

End Function

Sub  OrderNumberD(arr)  ' 從大到小排序

   For  i  =   LBound (arr)  To   UBound (arr)

     For  j  =   LBound (arr)  To   UBound (arr)

       If  arr(i)  >  arr(j)  Then

        X  =  arr(i)

        arr(i)  =  arr(j)

        arr(j)  =  X

       End   If

     Next

   Next

End Sub

Sub  OrderNumberA(arr)  ' 從小到大排序

   For  i  =   LBound (arr)  To   UBound (arr)

     For  j  =   LBound (arr)  To   UBound (arr)

       If  arr(i)  <  arr(j)  Then

        X  =  arr(i)

        arr(i)  =  arr(j)

        arr(j)  =  X

       End   If

     Next

   Next

End Sub

' --------------------------------------------------------------------------------------

' ---------------------------------------函數結束---------------------------------------

' --------------------------------------------------------------------------------------

測試:

' 測試

Private   Sub  Command1_Click()

Randomize   ' 一定要初始化随機數,否則每次打開程式取出的數都一樣的。

MsgBox  getRnd( 1 ,  12 ), vbOKOnly,  " 1-12之間任取一數 "

arr  =  getArrRndNR( 10 ,  11 ,  33 )  ' 取10個11-33之間不重複的随機數,存入數組arr,取重複的可以用getArrRnd函數

OrderNumberA arr  ' 升序排列數組arr ,降序排列為OrderNumberD

For  i  =   1   To   UBound (arr)  ' 顯示

Print  arr(i)

Next

End Sub