| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2395 人关注过本帖, 1 人收藏
标题:求助:用随机函数编排考室、考号
只看楼主 加入收藏
glygly06
Rank: 1
来 自:雁城
等 级:新手上路
威 望:1
帖 子:120
专家分:0
注 册:2008-10-1
结帖率:50%
收藏(1)
 问题点数:0 回复次数:8 
求助:用随机函数编排考室、考号
表:ksap.dbf
字段:xh(学号)
      xm(姓名)
      ksh(考室号)
      zwh(座位号)

要求先用随机函数每40人编排成一个考室(1,2……),再用随机函数生成每个考室考生的座位号(1-40)

请问怎样编程实现?
搜索更多相关主题的帖子: 随机函数 编排 
2008-10-24 18:25
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
提供一个思路:
用考室建立外循环,用座位建立内循环,随机抽取尚未安排的学号(考室号或座位号为零),将当前的考室号和座位号保存,然后再抽取下一个学号,直到完成所有安排。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2008-10-25 17:13
glygly06
Rank: 1
来 自:雁城
等 级:新手上路
威 望:1
帖 子:120
专家分:0
注 册:2008-10-1
收藏
得分:0 
版主SZY345在QQ群上也给我提供了这个思路并写了示例代码,但是还有一个问题没有解决,因为总人数zrs%40<>0,假设178人,分作4个考室还余18人,这18个人安排到第5个考室,这18个人从1-18号怎样随机编排。
我用了一个很蛮的方法,把这18个人从原表删除并拷到另一个表中,对这个新表进行进行随机编号,但我发现用以下语句编号时总是有部分人员没有进行编排:
sele bb01
zrs=recc()
for i=1 to zrs
go int(rand()*(zrs)+1)
if ksh=''
repl ksh with '3',zwh with allt(str(i))
else
i=i-1
endif
2008-10-25 17:59
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
我觉得部分人员没有进行编排的原因可能是当只剩少数人没有编排时,随机数会很难“选中”没有编排的人员,尤其是剩最后几个人时,甚至可能循环数百次都不能“命中”。
可以考虑当剩下最后几个或者十几个人时,就按顺序安排座位(当然这些学号连续的可能性很小)。

经过跟踪程序,发现没有编排的原因主要是fsh=''这句,改成isblank(fsh)就不会有漏排现象了。

[[it] 本帖最后由 hu9jj 于 2008-10-26 09:44 编辑 [/it]]

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2008-10-25 19:48
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
下面的程序经过测试,完全可以满足楼主的需要。
sele bb01
zrs=recc()
for i=0 to zrs-1
    go int(rand()*(zrs)+1)
    if ISBLANK(ksh)
        repl ksh with alltri(str(int(i/40)+1)),zwh with allt(str(mod(i,40)+1))
    else
        i=i-1
    endif
endfor

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2008-10-26 09:41
glygly06
Rank: 1
来 自:雁城
等 级:新手上路
威 望:1
帖 子:120
专家分:0
注 册:2008-10-1
收藏
得分:0 
衷心感谢!我马上去试试
2008-10-26 10:28
glygly06
Rank: 1
来 自:雁城
等 级:新手上路
威 望:1
帖 子:120
专家分:0
注 册:2008-10-1
收藏
得分:0 
OK了。我得好好琢磨一下。
2008-10-26 10:31
潇洒人间一剑仙
Rank: 2
等 级:论坛游民
威 望:1
帖 子:140
专家分:48
注 册:2008-9-19
收藏
得分:0 
这个就是"洗牌"问题
如果用随机数去点兵点将,剩下几个人时,虽然经过N次循环最终能够"命中",但是从程序上来说是不完美的.
每选中一个数,应该将空白删除,新的记录表比原记录少一.用随机数再选记录号,随机数的上限当然也随之减一,这样每一个随机数都100%地可以得到一个选择,没有"点空"的情况.
2008-10-26 12:05
glygly06
Rank: 1
来 自:雁城
等 级:新手上路
威 望:1
帖 子:120
专家分:0
注 册:2008-10-1
收藏
得分:0 
思路有点像 抽奖 示例程序。 在程序中要设置 set dele on 。但抽奖程序没有用到循环,我这个程序要用到的循环条件,我还得好好想一想。
2008-10-26 14:38
快速回复:求助:用随机函数编排考室、考号
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045631 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved