BASIC随机函数给出语法错误,不确定是什么问题

时间:2019-03-07 14:34:36

标签: random basic picaxe

是说错误仅在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 个答案:

答案 0 :(得分:1)

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

要使此代码在PICAXE上运行,您需要修复以下问题:

  • 您不能只分配一个新的变量名;您需要使用内置名称b0b1b2等(字节变量)或w0w1w2等(单词变量),除非您使用symbol关键字为其定义另一个名称。
  • 要生成随机数,请使用random关键字,该关键字将随机值分配给您指定的word变量。
  • 您只能对if … thengotogosub使用单行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,则不能同时使用b0b1,等等。

答案 1 :(得分:0)

根据随机值分配二进制值:

此程序是用QB64编写的,它支持&B前缀,而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

答案 2 :(得分: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

答案 3 :(得分:0)

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

Canvas.SetLeft(ellipse, Convert.ToDouble(Seasonallist[i].X.Ticks));