一你所在班級人員為基礎,撰寫一個課堂隨機點名程式,要求不能重復點名,點名結果要寫入檔案保存
uj5u.com熱心網友回復:
step1:一個班級的人員名單,需要有一個欄位一一對應班級里的人,這個欄位可以是學號;
step2:
呼叫隨機函式,產生的范圍就在這個學號的范圍之間,當然不重復;
step3:
隨機點名程式開啟,產生一個編號寫入檔案
uj5u.com熱心網友回復:
1.將姓名都裝入一個陣列2.記錄下課隨機的數量a,默認為陣列長度
3.隨機產生0~a的一個整數i
4.將陣列arr(i)寫入檔案,同時將arr(i)和arr(a)交換,并且a--
5.重復執行3
uj5u.com熱心網友回復:
Option Explicit
Dim arr
Dim a As Integer
'初始化
Private Sub Form_Load()
arr = Split("A001,A002,A003,A004,A005,A006", ",")
a = UBound(arr)
End Sub
'點一次,隨機一個出來
Private Sub Command1_Click()
Dim i As Integer, intRnd As Integer, strTmp As String
If a = -1 Then
MsgBox "所有成員都隨機過一次了!", vbExclamation
Exit Sub
End If
Randomize
intRnd = Int(Rnd * a)
Me.Print "索引:" & intRnd, arr(intRnd), "提取前:" & Join(arr, ",") & " 參與隨機" & a + 1 & "個", '輸出并寫入檔案
Open "結果.txt" For Append As #1
Print #1, arr(intRnd)
Close #1
strTmp = arr(intRnd)
arr(intRnd) = arr(a)
arr(a) = strTmp
a = a - 1
Me.Print "提取后:" & Join(arr, ",") & " 剩余" & a + 1 & "個"
End Sub
uj5u.com熱心網友回復:
換一個思路,把學生名字寫在一副撲克牌上,然后洗牌洗亂。老師拿著這疊撲克牌一張一張掀開念名字,是不是就達到了你隨機加不重復的的要求了?
接下來就看怎樣洗牌能夠盡量“隨機”
推薦簡單高效且有數學證明的knuth洗牌演算法
以下為例程,但不包含你的記錄點名結果部分。
一個表單一個按鈕拷貝以下代碼
Option Explicit
Dim arr() As String
'初始化
Private Sub Form_Load()
arr = Split("A001,A002,A003,A004,A005,A006", ",")
End Sub
Private Sub Command1_Click()
'knuth洗牌演算法將順序打亂
Dim i As Integer
For i = UBound(arr) To LBound(arr) Step -1
Dim strtmp As String, irnd As Integer
irnd = Rnd(Now()) * i
strtmp = arr(i)
arr(i) = arr(irnd)
arr(irnd) = strtmp
Next
'輸出點名順序
For i = LBound(arr) To UBound(arr)
Me.Print arr(i),
Next
Me.Print
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/10447.html
標籤:VB基礎類
下一篇:數字影像處理
