使用Rand( )函数随机选取记录

Author: 袁志新 Date: 1999年 第26期 13版

  在数据库管理软件中,VFP较以往的DBASE增加了许多函数,Rand()便是其中之一,这为我们处理一些随机问题带来了极大方便。随机函数Rand()的格式功能如下:
    格式:Rand(x)
    其中参数x为种子数值,它决定了函数返回的数值序列,可省略。
    功能:产生一个(0,1)区间的随机数。
    说明:使用Rand()时,若参数是负数,则将使用系统时钟的种子值,若要获得不重复的随机数序列,可以先使用负数作为参数,然后再使用不带参数的Rand()。本人在搞题库设计时,有这样一个问题:在含有n个记录的题库中,随机先取m条记录作为试题,其中n>=m>1,在抽取试题时,必须保证试题不重复。其方法是:利用Rand()将库中的n个记录号随机先取m个记录号放于数组B中,且保证选取的记录号不能相同,为此,编写一个如下的小程序段:
    :&&统计库中记录个数n
    :&&确定选取的记录个数m
    Dime b(m)
    B(1)=int(n*Rand(-1)+1) &&保证产生的随机数为整数并且在[1,n]区间内
    i=2
    do while i<=m
    t=1 &&为检验产生的记录号是否重复的标志
    a=int(n*Rand()+1)
    j=1
    do while j<=i-1 &&检验新产生的记录号是否与前i-1个记录号重复
    if a=b(j)
    t=-1
    exit
    else
    j=j+1
    endif
    enddo
    if t=-1 &&若重复,重新产生
    loop
    else
    B(i)=a &&不重复,第i个记录号产生
    i=i+1
    enddo
    通过以上程序段,即可保证试题的随机选取,并且编程者本身事先也不知道选择哪m条记录,除非n条记录全选。