ОСНОВНАЯ случайная функция, выдающая синтаксическую ошибку, не уверенная в чем проблема
Он говорит, что ошибка только после 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 ответа
Я предполагаю, что этот вопрос о микроконтроллере PICAXE и его языке BASIC из-за [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
в то же время и так далее.
Назначьте двоичные значения на основе случайного значения, используя двоичную функцию преобразования, считывающую значения из данных.
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
Назначьте двоичные значения на основе случайного значения:
Эта программа была написана на 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
Назначьте двоичные значения на основе случайного значения, используя двоичную функцию преобразования:
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