您的位置:资讯频道 > 技术文档 > 控件开发基础

VB 任意随机数(N-M)的通用函数(单取、多取存入数组、排序等功能) 内附随机数介绍

来源:博客 作者:jyh_jack 时间:2008-04-11 点击:437 次
'思路

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 鞠勇鸿
'对于本函数有改进意见,如果您方便请发邮件致:jyh_jack@163.com
'--------------------------------------------------------------------------------------
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

资讯搜索

 

推荐产品

VARCHART XGantt
全球知名的甘特图控件,能够实现如 Microsoft Project 般强大的项目管理功能。
TurboDemo 中文版
TurboDemo - 抓取屏幕截图并通过动态演示示例及手册解释软件、个人电脑应用程序、网站与产品。
BCGControlBar Library .NET Edition
该组件包含大量可自定义程度高、可设计性好的组件,使用户可创建精致美观的图形用户界面。