Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

9/7/11

Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau

Giả định bạn cần phân ra n nhóm. Ta xếp record cho hết nhóm này, tới nhóm khác, khi đủ thì xoay lại từ đầu cho tới khi hết.
N: số nhóm.
M=1, nhóm hiện đang xem xét



Bước 1: Chọn ra các record chưa xếp vào nhóm nào.
Bước 2:Lấy về số RecordCount.
if RecordCount>0 then
Bước 3: Nhảy về record đầu tiên.

lấy 1 số ngẫu nhiên r trong khoảng 0-RecordCount
Nhảy tới record thứ r. Gán cho nó vào nhóm m.
Nếu m=n thì gán m=1, ngược lại thì cho m=m+1
Quay lại bước 1
end if

Sub sChiaNhom(m As Integer)
Dim rec1 As Recordset
Dim r, k As Integer ' r :so ngau nhien, k so record, n- tong so nhom, m- so nhom hien hanh
Set rec1 = CurrentDb().OpenRecordset("SELECT Chianhom2, chon FROM danhsach2 WHERE chon=no")
k = rec1.RecordCount
If k <> 0 Then
rec1.MoveFirst
Randomize
r = Int((k * Rnd())) ' lay mot so ngau nhien trong cac record con lai
rec1.Move r ' nhay toi record r
rec1.Edit
rec1!Chianhom2 = m
rec1!chon = True
rec1.Update
rec1.Close
If m = n Then
m = 1
Else
m = m + 1
End If
sChiaNhom m ' quay lai buoc 1

Else
MsgBox " da chia nhom xong, hay click form duoi va xem ket qua"
End If

End Sub
Khi đó, ta tạo 1 nút nhấn:
Dim n As Integer ' tong so nhom

Private Sub Command0_Click()
Dim m As Integer
m = 1 ' so bat dau cua m
n = 6 ' thay so nhom ban muon chia vao day
sChiaNhom m

End Sub
Lưu ý, dữ liệu bạn sẽ bị tranh chấp trong quá trình tính toán nếu bạn đang mở nó ở 1 form khác. Vì vậy, bạn phải tạo 1 form để run riêng, 1 form để hiển thị riêng.
Mời bạn xem demo.

Không có nhận xét nào:

Đăng nhận xét

» Hãy để lại tên, email của bạn khi bạn post comment, để mình có thể dễ dàng trả lời comment của bạn khi cần.
» Có thể sử dụng các thẻ < b>,< i>,< a>. Và các icon thông dụng trên YM