回 帖 发 新 帖 刷新版面

主题:[讨论]求救!随机生成100位0、1的随机数

生成100位0、1的随机数,例如100101011001010……并在生成的过程中,与text中的内容进行匹配

sjs=RAND()
do case
   case sjs<0.5
    a=0
  otherwise
     a=1
endcase

就是现在没有办法把所生成的0和1连接起来









求高手指点,或加小女QQ,450939941

回复列表 (共17个回复)

11 楼

程序很棒!谢谢指导!~

如果我有一个表单,如下


我自己输入2-4个长度自定义的二进制数,能否做出以上的结果!~~~

请各位前辈指点指点~~~谢谢

[img]http://b38.photo.store.qq.com/http_imgload.cgi?/rurl4_b=7033ea6feb3b6653a5a7853c7200d842937d1cefdb4bd523245a85f40aa22c35de4c0a8526461361e36d6133307d82269ae1396ebf5476098d83f863411be701f2de144b78ad91d4fbffac56511619ecb75ab18e&a=39&b=38[/img]

12 楼

欢迎加入C语言爱好者QQ群106487563!这里没有菜鸟,因为在C的海洋面前我们都是新手,刚刚上路!

13 楼

换成这段:

    **** 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 楼

继续求助!~~~~

我现在有一个表单,上面有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 楼


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 楼

程序很棒,就是当中加一句,thisform.label&ii..visible=.t.,否则label里的都不显示了,哈哈~~~

还有两个个小问题,
第一个就是当只有三个设备时,我把您给的一段不为空的程序屏蔽掉之后,发现运行时,一开始匹配胜利的就是那台没有识别码的机子,怎么才能控制,在他不参与的时候,不发生匹配呢?

第二就是,第二次匹配时,是从上一次匹配的结束开始,您这个程序每次都是从头开始,能否帮忙改一下?

例如:text1:0100,text2:1001,text3:101,text4:1100,当随机码发出随机01序列00100101100……当出现到第5位时发生匹配,0100胜出之后,第二次匹配是从101100……开始,就是说把前面发生过匹配的随机码不再进行匹配,从第6位开始进行匹配

拜托老师帮忙一下~~麻烦您了~~

17 楼

第二个问题不存在,你应该好好理解程序
第一个更改如下:
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 


另外,这些问题你应该自己解决——即无难度又无技术含量的

我来回复

您尚未登录,请登录后再回复。点此登录或注册