ОСНОВНАЯ случайная функция, выдающая синтаксическую ошибку, не уверенная в чем проблема - PullRequest
2 голосов
/ 07 марта 2019

Там говорится, что ошибка только после 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 ]

1 голос
/ 12 марта 2019

Я предполагаю, что этот вопрос касается микроконтроллера PICAXE и его базового языка из-за тега [picaxe]. В опубликованном коде есть несколько вещей, которые не будут работать в PICAXE BASIC, поэтому я предполагаю, что вы знакомы с другим диалектом или пытаетесь взять некоторый код, написанный для другого диалекта, и использовать его на PICAXE. Если это не так, пожалуйста, сообщите нам.

Чтобы этот код работал на PICAXE, вам нужно исправить несколько вещей:

  • Вы не можете просто присвоить имя новой переменной; вам нужно использовать встроенные имена b0, b1, b2 и т. д. (байтовые переменные) или w0, w1, 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, вы также не можете одновременно использовать b0 или b1 и т. Д.

0 голосов
/ 08 марта 2019

Назначение двоичных значений на основе случайного значения с использованием функции двоичного преобразования:

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
0 голосов
/ 08 марта 2019

Назначение двоичных значений на основе случайного значения с использованием функции чтения двоичных данных из данных.

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
0 голосов
/ 08 марта 2019

Назначить двоичные значения на основе случайного значения:

Эта программа была написана на 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
...