| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 960 人关注过本帖
标题:回复下标超界怎么回事?
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
你的问题出在随机数生成的数据出现重复现象

坚守VFP最后的阵地
2013-07-11 16:08
jinanshui
Rank: 2
等 级:论坛游民
帖 子:295
专家分:67
注 册:2009-10-6
收藏
得分:0 
老师我的表述不清楚
1.我想从数组c(1),c(2),c(3)........c(a)......c(35)共35个整数中随机取5个不同整数,为保证不同,我不想采用一般的遍历法(相同的再重新取),而是想取一个随机整数a(介于1-35)对应从c(1),c(2),c(3)........c(a)......c(35)拿出c(a),
而原来的数组只余下c(1),c(2),c(3)........c(a-1),c(a+1),............c(35)(共34个数)仍保持原来顺序,
然后取一个随机整数b(介于1-34)对应从c(1),c(2),c(3)........c(a-1),c(a+1),............c(35)中拿出c(b)(在新顺序中第b个),
只余下c(1),c(2),c(3)........c(b-1),c(b+1),............c(35)(共33个数)仍保持原来顺序
以此类推得到数组d(5),其中d(1)=c(a),d(2)=c(b),d(3)=c(c),d(4)=c(d),d(5)=c(e),
2.将以上过程执行n次得到n个数组d(n,5)

综合以上考虑,想到用列表框。由于是个菜鸟,作乱了
老师,谢谢您,这样如果能实现,感觉到取随机数比较广泛一些。

[ 本帖最后由 jinanshui 于 2013-7-11 16:25 编辑 ]
2013-07-11 16:10
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:5 
程序代码:
*TIMER1.TIMER 事件代码
CREATE CURSOR TT (数据 C(2)) &&保存提取的数据
THISFORM.LIST1.CLEAR
DIMENSION C(277,5)
DIMENSION M(1,10)
M(1,1)=35
FOR I=1 TO 277
    FOR K=1 TO 35
        THISFORM.LIST1.ADDITEM(ALLTRIM(STR(K,2)))
    ENDFOR
    CSTR=[] && 保存生成的随机数
    FOR J=1 TO 5
        C(I,J)=INT(M(1,1)*RAND()+1)
        IF C(I,J)<=0 && 生成的随机数不能等于0 关键
           EXIT
        ENDIF
        IF NOT TRANSFORM(C(I,J))$CSTR && 生成的随机数不能重复 关键
           THISFORM.LIST1.REMOVELISTITEM(C(I,J))
        ENDIF
        SELECT * FROM TT WHERE ALLTRIM(数据)==ALLTRIM(THISFORM.LIST1.LIST(C(I,J))) INTO CURSOR TTT
        IF _TALLY=0 && 提取的数据不包括重复数据
           INSERT INTO TT VALUES (THISFORM.LIST1.LIST(C(I,J)))
        ENDIF
        CSTR=CSTR+TRANSFORM(C(I,J))+[,]
        M(1,1)=M(1,1)-1
    ENDFOR
    THISFORM.CAPTION=cstr
    THISFORM.LIST1.CLEAR
ENDFOR
THISFORM.TIMER1.ENABLED=.F.
SELECT TT
BROWSE TITLE [提取数据] && 显示提取的数据


[ 本帖最后由 sdta 于 2013-7-11 16:41 编辑 ]

坚守VFP最后的阵地
2013-07-11 16:40
jinanshui
Rank: 2
等 级:论坛游民
帖 子:295
专家分:67
注 册:2009-10-6
收藏
得分:0 
谢谢老师,我仔细学习。
2013-07-11 16:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
想取几个数据,在程序中加几行代码控制就行了

坚守VFP最后的阵地
2013-07-11 16:57
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:5 
回复 12楼 jinanshui
可以不用表单,直接写段代码,就能解决问题
程序代码:
N=5
LOCAL A[N]
STORE 0 TO A &&定义数组A的数据类型为N
M=35
CSTR=[]
FOR I=1 TO N
    FOR J=1 TO 35
        B=INT(M*RAND()+1)
        IF NOT TRANSFORM(B)$CSTR
           A[I]=B
           CSTR=CSTR+TRANSFORM(A[I])+[,]
           EXIT
        ENDIF
        M=M-1
    ENDFOR
ENDFOR
LIST MEMORY LIKE A && 显示提取的数据

坚守VFP最后的阵地
2013-07-11 17:45
jinanshui
Rank: 2
等 级:论坛游民
帖 子:295
专家分:67
注 册:2009-10-6
收藏
得分:0 
谢谢
2013-07-12 12:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
有时间,还是多看看VFP帮助文件

坚守VFP最后的阵地
2013-07-12 23:22
快速回复:回复下标超界怎么回事?
数据加载中...
 
   



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

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