一、隨機(jī)函數(shù)Rand()的特性
VFP中的隨機(jī)函數(shù)為Rand( ):格式:Rand(m),其中m為參數(shù),它決定了函數(shù)返回的數(shù)值序列,可省略。功能:返回0到1間的隨機(jī)數(shù)。特性:參數(shù)m的取值不同,Rand( )函數(shù)返回結(jié)果就不同。
上機(jī)驗證:在VFP 命令窗口中重執(zhí)行10次:?Rand(m)。不改變m值,重新啟動VFP再重復(fù)執(zhí)行10次(目的是檢驗隨機(jī)數(shù)序列的變化),得到結(jié)果見表1。
由表1中產(chǎn)生的隨機(jī)數(shù)情況可以看出:當(dāng)m<0時,函數(shù)Rand(m)將使用系統(tǒng)時鐘的種子值,產(chǎn)生不重復(fù)的隨機(jī)數(shù)序列。當(dāng)m>0時,函數(shù)Rand(m)將產(chǎn)生序列重復(fù)的固定值。當(dāng)m=0時,函數(shù)Rand(0) 將產(chǎn)生序列不重復(fù)的變量值。當(dāng)m省略時,函數(shù)Rand( ) 將產(chǎn)生序列重復(fù)的有一定規(guī)律的數(shù)值。值得注意的是參數(shù)m省略時,產(chǎn)生偽隨機(jī)數(shù)。應(yīng)用中要謹(jǐn)慎采用。m為負(fù)數(shù)時產(chǎn)生的隨機(jī)數(shù),類似VB中加Randomize語句產(chǎn)生的隨機(jī)數(shù),在此稱真隨機(jī)數(shù),可廣泛應(yīng)用。
二、應(yīng)用隨機(jī)函數(shù)事例
設(shè)計一個用于歌手大獎賽產(chǎn)生評委的隨機(jī)抽取程序。
1.程序設(shè)計思路。首先建立一個存放評委情況的初始表csb.dbf,并將評委基本情況輸入表中。然后建立一個存放被選中評委的結(jié)果表(jgb.dbf結(jié)構(gòu)同初始表)。建立顯示結(jié)果的表單。在表單上添加一個命令按鈕。編寫命令按鈕的單擊事件。運用隨機(jī)函數(shù)產(chǎn)生隨機(jī)號,將初始表中對應(yīng)的記錄抽取出來,保存在結(jié)果表中,最后顯示在表單上。
2.建立兩個自由表、一個顯示結(jié)果表單。
csb.dbf和jgb.dbf表結(jié)構(gòu):
建立一個表單form1,在表單上添加10個標(biāo)簽,Name屬性分別為:label10、label11、label12、 label13、 label14、 label15 、label16 、label17、 label18、 label19 將每個標(biāo)簽的Backstyle屬性設(shè)為:0—透明。添加一個命令按鈕command1并將其Caption屬性設(shè)為:“開始抽取”
3.編寫命令按鈕單擊事件中的小程序
close all
set excl on
set exac on
set safe off
release all
sele 2
use csb exclusive
sele 1
use jgb exclusive
zap
產(chǎn)生隨機(jī)數(shù)
dime a(10)
a=0
i=1
do while i<=10 在50位中抽取10位作為現(xiàn)場評委
ww=int(rand(-1)*50+1) 初始表中假設(shè)有50位評委
if ww=0
loop
else
if ascan(a,ww)=0
a(i)=ww
i=i+1
endif
endif
enddo
ww=0
將被抽中的評委追加到結(jié)果表中
for j=1 to 10
appe from csb for alltrim(編號)=alltrim(str(a(j),4))
next
j=1
顯示成員
repl all 編號 with str(recno(),4)
go top
u=10
scan for not eof()
s=str(u,2)
thisform.labels..caption=姓名
u=u+1
endscan
close all
在csb.dbf表中添加50條記錄,運行表單,計算機(jī)將自動隨機(jī)抽取出10名評委。如果將rand(m)函數(shù)中的m省略,那么運行表單后,產(chǎn)生的評委在序列上有一定規(guī)律可循,也就是說產(chǎn)生的評委不具隨機(jī)性,進(jìn)而失去了計算機(jī)隨機(jī)抽取的意義。實踐中應(yīng)該引起注意。
參考文獻(xiàn):
史濟(jì)民 湯觀全:Visual Foxpro及其應(yīng)用系統(tǒng)開發(fā)[M].北京:清華大學(xué)出版社,2000