小弟现在做一考试系统,请问哪位大哥在随机抽题方面有好的算法请贴出来供小弟参考一下,非常感激

解决方案 »

  1.   

    就用RandomRange就可以了
    begin
       Randomize;
       Title:=RandomRange(1,1000); //比如你有1000题,给每题一个编号1..1000,然后在这1000随时抽出题号来就可以了
    end;
      

  2.   

    我本来准备用random函数实现。
    先得到系统时间,得到时、分、秒、毫秒的值,再相加得到一变量time,
    再得到题库中最大题数maxid,通过
    while  i<总题数 do
    begin
    select * from 题库 where id=random(time mod maxid);//每个人每次抽的题都随机
    i++;
    end;
    但这样的话,某个人在某次考试中会可能抽到两道一样的题。
    不知大家有什么好办法
      

  3.   

    table1.open;
    memo1.clear;
    i:=1;
    randomize;
    while i<n do  begin//n用于记录需要抽题的数目
                   t:=random(table1.recordcount)+1;
                   flag:=true;
                   for j:= 1 to i do if t=check[j] then flag:=false;
                   if flag=true then 
                       begin
                            check[i]:=t;
                            table1.recno:=t;
                             i:=i+1;
                             memo1.lines.add(talbe1.fields[x].asstring);//显示题目的内容
                        end;
          end;
      

  4.   

    上述flag用于记录是否抽到了相同的题号,check数组用于记录以前抽过的题号!
    table1.recordcount是题目的总数,table1.recno是库中的第几条记录!
      

  5.   

    To  hch_45(んこん):
      那样的话,第二个人抽出的每道题都跟第一个人一样。我试过不行。
      比如,第一个人通过random得到题库中题号为2,6,32,24这几道题的话,第二个人通过random也会是2,6,32,24这几道题
      

  6.   

    To dongyexue(东野雪):
       同上面一样,你的代码只实现了某一个人抽的题是随机的,但在一个考试系统中,同时在线考试的人有很多,你的代码不能保证每个人之间抽的题不同。
      random函数在重复执行时每次随机的几个数都是相同的,不信你们试一试。
      

  7.   

    begin
       Randomize;
       Title:=RandomRange(1,1000); 
    end;
    我想重复了也没有关系吧.我想的这样就可以了.
      

  8.   

    两个人会抽到同样的题目?我真是不能理解呢,如果是那样的话,我也想到一个办法:
    用dongyexue写的那个过程,第一个人抽10道题,循环10次,第二个人也抽10道,就循环20次,取11~20的题目,更好的办法我就没想到了.
    还想到一个办法就是,now(),然后定义一些规则,转换成你规定范围内的数字,然后来取数,应该就不会重复了,具体代码我就不写了!:)