关于VB编程的问题

2025-02-26 18:52:17
推荐回答(5个)
回答1:

这程序简单不了的..
---------------
标准模块中
'*********************************
'产生互不相同的一组随机数
' n 个数
' Lower 下限
' Upper 上限
' NotSameRnd 返回一个Long数组
'*********************************
Public Function NotSameRnd(ByVal n As Long, ByVal Lower As Long, ByVal Upper As Long) As Long()
Dim tmp() As Long
If Upper - Lower < n - 1 Then MsgBox "范围太小": Exit Function
ReDim tmp(n - 1)
Randomize
For i = LBound(tmp) To UBound(tmp)
tmp(i) = Int((Upper - Lower + 1) * Rnd + Lower)
Do Until (j = i) Or (i = LBound(tmp))
For j = LBound(tmp) To i - 1
If tmp(j) = tmp(i) Then
tmp(i) = Int((Upper - Lower + 1) * Rnd + Lower)
Exit For
End If
Next j
Loop
Next i
NotSameRnd = tmp
End Function

'选择排序法
Public Sub SelectSort(Xarray() As Long)
Dim i&, j&, k&, t&, Start&, Finish&
Start = LBound(Xarray)
Finish = UBound(Xarray)

For i = Start To Finish - 1
k = i
For j = i + 1 To Finish
If Xarray(j) < Xarray(k) Then k = j
Next j
If k <> i Then
t = Xarray(i)
Xarray(i) = Xarray(k)
Xarray(k) = t
End If
Next i
End Sub
-----------------------------
窗体中,建立一按钮
Private Sub Command1_Click()
Dim a() As Long, x
a = NotSameRnd(10, 0, 9) '调用产生10个0-9的数
SelectSort a '排序
For Each x In a '输出
Print x
Next x
End Sub

回答2:

Option Explicit

Private Sub Command1_Click()
Dim s() As Double
s = getOrderNoSameRnd(10)

Dim i As Long
For i = 0 To UBound(s)
Debug.Print s(i)
Next

End Sub

Private Function getOrderNoSameRnd(ByVal num As Long) As Double()
'产生不重复的排序随机数 产生num个
Dim i As Long
Dim s() As Double
ReDim s(num)
Dim j As Long
Dim v As Double
For i = 1 To num
Dim newValue As Boolean
newValue = False
While Not newValue
'没有产生新值,就继续造
v = Rnd
For j = 1 To i - 1
If s(j) = v Then
'说明有重复
Exit For
End If
Next
If j >= i Then
'说明找到不重复的数
s(i - 1) = v
newValue = True
End If
Wend
Next
'己产生了随机数据,排序即可
'排序算法不写了。。。。。。。

getOrderNoSameRnd = s

End Function

回答3:

Function getRnd(i As Integer) As Integer
Randomize
getRnd = Int(Rnd() * i + 1)
End Function

Function getAllRnd(Counter As Integer, jishu As Integer) As Integer()
If (Counter > jishu) Then
MsgBox "数字个数不能大于基数"
Exit Function
End If
ReDim arr(Counter) As Integer
i = 0
Do While i < Counter
arr(i + 1) = getRnd(jishu)
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

getAllRnd = arr
End Function

Sub OrderNumber(arr)
For i = 1 To UBound(arr)
For j = i + 1 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()
arr = getAllRnd(5, 10) '取5个1-10之间的随机数
OrderNumber arr '排序
For i = 1 To UBound(arr)
Print arr(i)
Next
End Sub

回答4:

//以生成10个[0,10]的整数为例
//在窗体上设置一个按钮和一个标签
Dim i, a, j, t As Integer, b(9) As Integer, tag As Boolean
//数字的生成算法
Randomize()
For i = 0 To 9
a = Int(Rnd() * 10)
tag = True
For j = 0 To i - 1
If b(j) = a Then
tag = False
Exit For
End If
Next
If tag = True Then
b(i) = a
Else
i = i - 1
End If
Next
//数字的排序算法(冒泡法)
For i = 1 To 9
For j = 1 To 10 - i
If b(j) < b(j - 1) Then
t = b(j) : b(j) = b(j - 1) : b(j - 1) = t
End If
Next
Next
//在标签内输出结果
For i = 0 To 9
Label1.Text &= b(i) & " "
Next

回答5:

好像也不是很长哈:) 已测试

Dim a(1000) As Double
Const n = 10'随机数的个数
Const d = 1'随机数的范围: d<随机数Const u = 100

Private Function pan(ByVal t, ByVal s) As Boolean

pan = True
For i = 1 To t - 1
pan = pan And (a(i) <> s)
Next
End Function
Private Sub Command1_Click()

For i = 1 To n
Loop1:
Randomize
s = Int(Rnd() * (u - d + 1) + d)
If pan(i, s) Then
a(i) = s
Else
GoTo Loop1
End If
Next

For i = 1 To n - 1
For j = i + 1 To n
If a(i) > a(j) Then
temp = a(i)
a(i) = a(j)
a(j) = temp
End If
Next
Next

For i = 1 To n
Print a(i)
Next
End Sub