主题:[讨论]求救!随机生成100位0、1的随机数
lilian_1208
[专家分:0] 发布于 2010-03-12 22:56:00
生成100位0、1的随机数,例如100101011001010……并在生成的过程中,与text中的内容进行匹配
sjs=RAND()
do case
case sjs<0.5
a=0
otherwise
a=1
endcase
就是现在没有办法把所生成的0和1连接起来
求高手指点,或加小女QQ,450939941
最后更新于:2010-03-13 00:28:00
回复列表 (共17个回复)
11 楼
lilian_1208 [专家分:0] 发布于 2010-03-17 21:14:00
程序很棒!谢谢指导!~
如果我有一个表单,如下
我自己输入2-4个长度自定义的二进制数,能否做出以上的结果!~~~
请各位前辈指点指点~~~谢谢
[img]http://b38.photo.store.qq.com/http_imgload.cgi?/rurl4_b=7033ea6feb3b6653a5a7853c7200d842937d1cefdb4bd523245a85f40aa22c35de4c0a8526461361e36d6133307d82269ae1396ebf5476098d83f863411be701f2de144b78ad91d4fbffac56511619ecb75ab18e&a=39&b=38[/img]
12 楼
德哥的诗 [专家分:0] 发布于 2010-03-18 12:39:00
欢迎加入C语言爱好者QQ群106487563!这里没有菜鸟,因为在C的海洋面前我们都是新手,刚刚上路!
13 楼
狐说八道 [专家分:860] 发布于 2010-03-19 08:23:00
换成这段:
**** zlen = ROUND(RAND()*3, 0)+1
b = alltrim(thisform.text1.value)
bmin = num
bmax = 0
a = alltrim(thisform.text2.value)
if a = b then
? '两数相等,请重输!'
endif
amin = num
amax = 0
另,用到的自定义函数可作成方法来引用,或直接加到c=。。。这句来生成c
14 楼
lilian_1208 [专家分:0] 发布于 2010-03-24 20:19:00
继续求助!~~~~
我现在有一个表单,上面有4个text文本跟4个label,一一对应,再有一个run的按钮。
首先在4个text输入4个不相等的二进制识别码,点击按钮,系统自动生成一串大概100位01序列二进制序列与那四个识别码进行匹配,一边生成,一边匹配,一旦发现,即在该识别码对应的label里显示“胜出”,并弹出对话框,“是否继续”,是的话,就继续生成二进制码,与另外三台匹配,直到最后一台胜出为止~~~
我现在做出的程序只能做到对2位二进制码进行匹配,而且运行的结果老是会有错误,望老师们给予指点~~
程序如下:
start=1
num=1
b=alltrim(thisform.text1.value)
c=alltrim(thisform.text2.value)
d=alltrim(thisform.text3.value)
e=alltrim(thisform.text4.value)
if b=c or b=d or b=e or c=d or c=e or d=e then
x=messagebox("两数相等,请重输!",0+48+0 ,"提示")
endif
a = ''
= RAND(-1)
for i = 1 to 10
a = a + iif(RAND()<0.5, '0', '1')
next
thisform.label5.visible=.t.
thisform.label5.caption=a
site=1
do while site<11
do case
case substr(a,start,num)=b
thisform.label1.visible=.t.
thisform.label1.caption="胜出"
thisform.text1.enabled=.f.
x=messagebox("是否继续?",4+32+0 ,"询问")
if x=6
start=start+num
num=1
endif
case substr(a,start,num)=c
thisform.label2.visible=.t.
thisform.label2.caption="胜出"
thisform.text2.enabled=.f.
x=messagebox("是否继续?",4+32+0 ,"询问")
if x=6
start=start+num
num=1
endif
case substr(a,start,num)=d
thisform.label3.visible=.t.
thisform.label3.caption="胜出"
thisform.text3.enabled=.f.
x=messagebox("是否继续?",4+32+0, "询问")
if x=6
start=start+num
num=1
endif
case substr(a,start,num)=e
thisform.label4.visible=.t.
thisform.label4.caption="胜出"
thisform.text4.enabled=.f.
x=messagebox("是否继续?",4+32+0, "询问")
if x=6
start=start+num
num=1
endif
otherwise
num=num+1
endcase
if num=3
start=start+1
num=1
endif
site=site+1
enddo
15 楼
狐说八道 [专家分:860] 发布于 2010-03-25 08:51:00
try:
LOCAL num, i, j, a, c, ii
num = 4
LOCAL ARRAY b(num)
FOR i = 1 TO num
ii = STR(i, 1)
b[i] = alltrim(thisform.text&ii..value)
NEXT
FOR i = 1 TO num-1
IF EMPTY(b[i]) THEN
=MESSAGEBOX("不能为空!",0+48+0 ,"提示")
RETURN
ENDIF
FOR j = i+1 TO num
IF b[i]=b[j] THEN
=MESSAGEBOX("两数相等,请重输!",0+48+0 ,"提示") && 可以输出i,j
RETURN
ENDIF
NEXT
NEXT
a = '' && 0\1串
continues = .t.
thisform.label5.visible=.t.
c = 0
= RAND(-1)
DO WHILE LEN(a)<=100 OR continues
a = a + iif(RAND()<0.5, '0', '1')
thisform.label5.caption=a
FOR i = 1 TO num
IF b[i]<>'9' THEN
IF RIGHT(a, LEN(b[i]))=b[i] THEN
ii = STR(i, 1)
b[i] = '9'
c = c+1
thisform.label&ii..caption= '第'+STR(c, 1)+"胜出"
IF c>=num THEN
RETURN
ENDIF
x=messagebox("是否继续?",4+32+0 ,"询问")
IF x<>6 THEN
RETURN
ENDIF
ENDIF
ENDIF
NEXT
ENDDO
IF continues AND LEN(a)>=100 THEN
=MESSAGEBOX("0\1序列超过100!",0+48+0 ,"提示")
ENDIF
16 楼
lilian_1208 [专家分:0] 发布于 2010-03-25 10:33:00
程序很棒,就是当中加一句,thisform.label&ii..visible=.t.,否则label里的都不显示了,哈哈~~~
还有两个个小问题,
第一个就是当只有三个设备时,我把您给的一段不为空的程序屏蔽掉之后,发现运行时,一开始匹配胜利的就是那台没有识别码的机子,怎么才能控制,在他不参与的时候,不发生匹配呢?
第二就是,第二次匹配时,是从上一次匹配的结束开始,您这个程序每次都是从头开始,能否帮忙改一下?
例如:text1:0100,text2:1001,text3:101,text4:1100,当随机码发出随机01序列00100101100……当出现到第5位时发生匹配,0100胜出之后,第二次匹配是从101100……开始,就是说把前面发生过匹配的随机码不再进行匹配,从第6位开始进行匹配
拜托老师帮忙一下~~麻烦您了~~
17 楼
狐说八道 [专家分:860] 发布于 2010-03-26 08:52:00
第二个问题不存在,你应该好好理解程序
第一个更改如下:
LOCAL maxnum, realnum, i, j, a, c, ii
maxnum = 4
LOCAL ARRAY b(maxnum, 2)
realnum = 0
FOR i = 1 TO maxnum
ii = STR(i, 1)
c = alltrim(thisform.text&ii..value)
IF ! EMPTY(c) THEN
realnum = realnum + 1
b[realnum, 1] = c
b[realnum, 2] = ii
ENDIF
NEXT
FOR i = 1 TO realnum-1
FOR j = i+1 TO realnum
IF b[i, 1]=b[j, 1] THEN
=MESSAGEBOX("两数相等,请重输!",0+48+0 ,"提示") && 可以输出i,j
RETURN
ENDIF
NEXT
NEXT
a = '' && 0\1串
thisform.label5.visible=.t.
c = 0
= RAND(-1)
DO WHILE LEN(a)<=100
a = a + iif(RAND()<0.5, '0', '1')
thisform.label5.caption=a
FOR i = 1 TO realnum
IF b[i, 1]<>'9' THEN
IF RIGHT(a, LEN(b[i, 1]))=b[i, 1] THEN
ii = b[i, 2]
b[i, 1] = '9'
c = c+1
thisform.label&ii..visible=.t.
thisform.label&ii..caption= '第'+STR(c, 1)+"胜出"
IF c>=realnum THEN
RETURN
ENDIF
IF messagebox("是否继续?",4+32+0 ,"询问")<>6 THEN
RETURN
ENDIF
EXIT
ENDIF
ENDIF
NEXT
ENDDO
IF LEN(a)>=100 THEN
=MESSAGEBOX("0\1序列超过100!",0+48+0 ,"提示")
ENDIF
另外,这些问题你应该自己解决——即无难度又无技术含量的
我来回复