标题Visual FoxPro 3.0中自编随机数函数
栏目软件大世界
作者闫东
发布1997-01-01
在测试程序、模拟程序中,常常要使用随机数,这就需要有一个产生随机数的函数。但在Visual FoxPro 3.0中却没有类似的函数,这无疑给编程带来很大的困难。为解决这一问题笔者自编了一个用于Visual FoxPro 3.0的随机函数──RND()。
为得到随机数,首先要有一个快速变化的数据源,笔者想到了Windows 95的API函数TimeGetTime,此函数返回Windows 95启动开始已逝去的毫秒数,其值以毫秒级发生变化,这个条件显然是满足的;其次,要求随机数的每一位数的变化都要很快,至少是前几位数的变化要快,但用TimeGetTime得到的随机数正好相反(最后一位以毫秒级变化,前几位却几秒甚至几十秒才变化一次),于是笔者以使用Visual FoxPro 3.0的STR()和LEFT()函数将TimeGetTime的返回值调个头,如此一来便可以满足随机数的要求了。
程序设计中使用FoxTools.FLL库中的RegFn()函数和CallFn()函数来调用TimeGetTime函数。下面的一段程序可产生100个1到100之间的随机数:
Set Talk Off
For I=1 To 100
?Int(Rnd()*100)+1
EndFor
Function RND
Set Decimals To 8
Set Library To C:\VFP\FOXTOOLS.FLL
SysTime=Regfn("TimeGetTime","","I","MMSYSTEM")
Ss=Callfn(SysTime)
RndS=Val("0."+Right(Str(Abs(Ss)),1)+
Left(Right(Str(Abs(Ss)),2),1)+
Left(Right(Str(Abs(Ss)),3),1)+
Left(Right(Str(Abs(Ss)),4),1)+
Left(Right(Str(Abs(Ss)),5),1))
Return(Rnds)
以上程序在Windows 95和Visual FoxPro 3.0中运行通过。