论文部分内容阅读
一、随机函数Rand()的特性
VFP中的随机函数为Rand( ):格式:Rand(m),其中m为参数,它决定了函数返回的数值序列,可省略。功能:返回0到1间的随机数。特性:参数m的取值不同,Rand( )函数返回结果就不同。
上机验证:在VFP 命令窗口中重执行10次:?Rand(m)。不改变m值,重新启动VFP再重复执行10次(目的是检验随机数序列的变化),得到结果见表1。
由表1中产生的随机数情况可以看出:当m<0时,函数Rand(m)将使用系统时钟的种子值,产生不重复的随机数序列。当m>0时,函数Rand(m)将产生序列重复的固定值。当m=0时,函数Rand(0) 将产生序列不重复的变量值。当m省略时,函数Rand( ) 将产生序列重复的有一定规律的数值。值得注意的是参数m省略时,产生伪随机数。应用中要谨慎采用。m为负数时产生的随机数,类似VB中加Randomize语句产生的随机数,在此称真随机数,可广泛应用。
二、应用随机函数事例
设计一个用于歌手大奖赛产生评委的随机抽取程序。
1.程序设计思路。首先建立一个存放评委情况的初始表csb.dbf,并将评委基本情况输入表中。然后建立一个存放被选中评委的结果表(jgb.dbf结构同初始表)。建立显示结果的表单。在表单上添加一个命令按钮。编写命令按钮的单击事件。运用随机函数产生随机号,将初始表中对应的记录抽取出来,保存在结果表中,最后显示在表单上。
2.建立两个自由表、一个显示结果表单。
csb.dbf和jgb.dbf表结构:
建立一个表单form1,在表单上添加10个标签,Name属性分别为:label10、label11、label12、 label13、 label14、 label15 、label16 、label17、 label18、 label19 将每个标签的Backstyle属性设为:0—透明。添加一个命令按钮command1并将其Caption属性设为:“开始抽取”
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
&&產生随机数
dime a(10)
a=0
i=1
do while i<=10 &&在50位中抽取10位作为现场评委
ww=int(rand(-1)*50+1) &&初始表中假设有50位评委
if ww=0
loop
else
if ascan(a,ww)=0
a(i)=ww
i=i+1
endif
endif
enddo
ww=0
&&将被抽中的评委追加到结果表中
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.label&s..caption=姓名
u=u+1
endscan
close all
在csb.dbf表中添加50条记录,运行表单,计算机将自动随机抽取出10名评委。如果将rand(m)函数中的m省略,那么运行表单后,产生的评委在序列上有一定规律可循,也就是说产生的评委不具随机性,进而失去了计算机随机抽取的意义。实践中应该引起注意。
参考文献:
史济民 汤观全:Visual Foxpro及其应用系统开发[M].北京:清华大学出版社,2000
VFP中的随机函数为Rand( ):格式:Rand(m),其中m为参数,它决定了函数返回的数值序列,可省略。功能:返回0到1间的随机数。特性:参数m的取值不同,Rand( )函数返回结果就不同。
上机验证:在VFP 命令窗口中重执行10次:?Rand(m)。不改变m值,重新启动VFP再重复执行10次(目的是检验随机数序列的变化),得到结果见表1。
由表1中产生的随机数情况可以看出:当m<0时,函数Rand(m)将使用系统时钟的种子值,产生不重复的随机数序列。当m>0时,函数Rand(m)将产生序列重复的固定值。当m=0时,函数Rand(0) 将产生序列不重复的变量值。当m省略时,函数Rand( ) 将产生序列重复的有一定规律的数值。值得注意的是参数m省略时,产生伪随机数。应用中要谨慎采用。m为负数时产生的随机数,类似VB中加Randomize语句产生的随机数,在此称真随机数,可广泛应用。
二、应用随机函数事例
设计一个用于歌手大奖赛产生评委的随机抽取程序。
1.程序设计思路。首先建立一个存放评委情况的初始表csb.dbf,并将评委基本情况输入表中。然后建立一个存放被选中评委的结果表(jgb.dbf结构同初始表)。建立显示结果的表单。在表单上添加一个命令按钮。编写命令按钮的单击事件。运用随机函数产生随机号,将初始表中对应的记录抽取出来,保存在结果表中,最后显示在表单上。
2.建立两个自由表、一个显示结果表单。
csb.dbf和jgb.dbf表结构:
建立一个表单form1,在表单上添加10个标签,Name属性分别为:label10、label11、label12、 label13、 label14、 label15 、label16 、label17、 label18、 label19 将每个标签的Backstyle属性设为:0—透明。添加一个命令按钮command1并将其Caption属性设为:“开始抽取”
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
&&產生随机数
dime a(10)
a=0
i=1
do while i<=10 &&在50位中抽取10位作为现场评委
ww=int(rand(-1)*50+1) &&初始表中假设有50位评委
if ww=0
loop
else
if ascan(a,ww)=0
a(i)=ww
i=i+1
endif
endif
enddo
ww=0
&&将被抽中的评委追加到结果表中
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.label&s..caption=姓名
u=u+1
endscan
close all
在csb.dbf表中添加50条记录,运行表单,计算机将自动随机抽取出10名评委。如果将rand(m)函数中的m省略,那么运行表单后,产生的评委在序列上有一定规律可循,也就是说产生的评委不具随机性,进而失去了计算机随机抽取的意义。实践中应该引起注意。
参考文献:
史济民 汤观全:Visual Foxpro及其应用系统开发[M].北京:清华大学出版社,2000