2

它说错误就在 11 之后,但我无法弄清楚请帮忙

11 * RND(1) + 1;a

if a = 1 then let pinsb = 01110111  
if a = 2 then let pinsb = 00010100  
if a = 3 then let pinsb = 10110011  
if a = 4 then let pinsb = 10110110
if a = 5 then let pinsb = 11010100  
if a = 6 then let pinsb = 11100110
if a= 7 then let pinsb = 11100111   
if a = 8 then let pinsb = 00110100  
if a = 9 then let pinsb = 11110111  
if a = 10 then let pinsb = 11110100
4

4 回答 4

1

由于标签,我假设这个问题是关于PICAXE 微控制器及其 BASIC 语言的。[picaxe]发布的代码中有几件事在 PICAXE BASIC 中不起作用,所以我猜您熟悉不同的方言,或者正在尝试获取一些为不同方言编写的代码并在 PICAXE 上使用它。如果不是这种情况,请告诉我们。

要使此代码在 PICAXE 上工作,您需要修复一些问题:

  • 你不能只分配一个新的变量名;您需要使用内置名称b0, b1, b2etc (字节变量)或w0, w1, etc (单词变量),除非您使用关键字w2为其定义了另一个名称。symbol
  • 要生成随机数,请使用为random您指定的单词变量分配随机值的关键字。
  • 您只能将单行if … then命令与goto,gosub或一起使用exit。否则,您需要使用if … then … endif结构,但您可以将其写在一行上,:用于分隔命令。
  • 最后,要指定二进制值,请在其前面加上一个%字符。

所以我认为你想要做的是:

symbol a = w0             ; use the name 'a' for word variable w0
random a                  ; assign a random value of 0...65535 to a
a = a // 10 + 1           ; // is modulo i.e. remainder of a / 10, so result is in range 1 - 10

if a = 1 then : pinsB = %01110111 : endif 
if a = 2 then : pinsB = %00010100 : endif
if a = 3 then : pinsB = %10110011 : endif
if a = 4 then : pinsB = %10110110 : endif
if a = 5 then : pinsB = %11010100 : endif 
if a = 6 then : pinsB = %11100110 : endif
if a = 7 then : pinsB = %11100111 : endif
if a = 8 then : pinsB = %00110100 : endif
if a = 9 then : pinsB = %11110111 : endif
if a = 10 then : pinsB = %11110100 : endif

永远记住,每个单词变量都是由两个字节变量组成的,所以如果你用过w0你就不能同时使用b0or b1,以此类推。

于 2019-03-12T13:40:59.157 回答
0

基于随机值分配二进制值:

该程序是用支持 &B 前缀的 QB64 编写的,而 QB45 不支持。

REM assign binary values based on a random value
a = INT(RND * 10 + 1)

IF a = 1 THEN LET pinsb = &B1110111
IF a = 2 THEN LET pinsb = &B10100
IF a = 3 THEN LET pinsb = &B10110011
IF a = 4 THEN LET pinsb = &B10110110
IF a = 5 THEN LET pinsb = &B11010100
IF a = 6 THEN LET pinsb = &B11100110
IF a = 7 THEN LET pinsb = &B11100111
IF a = 8 THEN LET pinsb = &B110100
IF a = 9 THEN LET pinsb = &B11110111
IF a = 10 THEN LET pinsb = &B11110100
于 2019-03-08T04:57:22.080 回答
0

使用二进制转换函数基于随机值分配二进制值:

REM assign binary values based on a random value using a binary convert function
A = INT(RND * 10 + 1)
IF A = 1 THEN pinsb = GetBinary("1110111")
IF A = 2 THEN pinsb = GetBinary("10100")
IF A = 3 THEN pinsb = GetBinary("10110011")
IF A = 4 THEN pinsb = GetBinary("10110110")
IF A = 5 THEN pinsb = GetBinary("11010100")
IF A = 6 THEN pinsb = GetBinary("11100110")
IF A = 7 THEN pinsb = GetBinary("11100111")
IF A = 8 THEN pinsb = GetBinary("110100")
IF A = 9 THEN pinsb = GetBinary("11110111")
IF A = 10 THEN pinsb = GetBinary("11110100")
END
FUNCTION GetBinary (B$)
    FOR V = LEN(B$) TO 1 STEP -1
        IF MID$(B$, V, 1) = "1" THEN
            X# = X# + 2 ^ (V - 1)
        END IF
    NEXT
    GetBinary = X#
END FUNCTION
于 2019-03-08T05:42:39.107 回答
0

使用从数据中读取值的二进制转换函数基于随机值分配二进制值。

REM assign binary values based on a random value using a binary
REM convert function reading values from data.
RANDOMIZE TIMER ' reseed rnd
A = INT(RND * 10 + 1)
RESTORE
FOR X = 1 TO A
    READ X$
NEXT
pinsb = GetBinary(X$)
PRINT "pinsb="; pinsb
END
DATA "1110111","10100","10110011","10110110","11010100"
DATA "11100110","11100111","110100","11110111","11110100"
FUNCTION GetBinary (B$)
    FOR V = LEN(B$) TO 1 STEP -1
        IF MID$(B$, V, 1) = "1" THEN
            X# = X# + 2 ^ (V - 1)
        END IF
    NEXT
    GetBinary = X#
END FUNCTION
于 2019-03-08T06:35:29.117 回答