основы

 

ПЕРЕМЕННЫЕ

Есть два вида переменных в smart BASIC: числовые и строковые. Строковые переменные имеют символ "$" на конце.

Числовые переменные могут хранить действительные и комплексные числа.

Точность числовой переменной соответствует типу double, который представляет из себя 64-бит в виде 1-11-52 для знака-степени-мантиссы.


Числовые переменные с действительными числами:

A = 10

B = 0.5E2


Числовые переменные с комплексными числами:

C = 2 - 3i

D = 1i


Строковая переменная:

T$ = "Name"


Команда LET, используемая в стандартном BASIC, может быть пропущена, то есть:

LET X = 1

будет аналогично:

X = 1


Строка может содержать символ кавычки ", если использовать двойные кавычки "". Например:

N$ = """This is a quoted text"""


МАССИВЫ

Массивы могут быть числовыми или строковыми, одно-, двух- или трехмерными. Массив должен быть определен перед первым использованием, если его размер больше, чем 10.

Команда OPTION BASE влияет на использование массивов.

Для индексов массивов используется только действительная компонента числа.


DIM T$(20), B(50,50,50)


ВЫРАЖЕНИЯ

Числовые математические операции: +, -, *, /, %, ^.

Операция % - это остаток от деления, операция ^ - это возведение в степень.

A = (2 ^ 3 + 1) * 2


Операция соединения строк: &

T$ = "Result is " & M$


Конвертация между строковыми и числовыми переменными производится автоматически:

A = B$ + 5

B$ = A


Операцию присваивания вида:

A = A + B

можно записывать сокращенно:

A += B

для любой числовой математической операции или для строковой операции соединения. Таким образом, запись:

C *= D + E

A$ &= "Text"

будет эквивалентна записи:

C = C * (D + E)

A$ = A$ & "Text"


Математические операции могут использовать как действительные, так и комплексные аргументы. Smart BASIC одинаково легко понимает комплексные и действительные числа и должным образом вычисляет их.

Комплексные числа записываются как действительная часть плюс (минус) мнимая часть с буквой 'i' на конце:

A = 2 + 3i


Без мнимой части это будет обычное действительное число:

A = 2


Если действительная часть комплексного числа равна нулю, то в этом случае вы можете записать только мнимую часть, например:

A = 3i


В smart BASIC вполне можно записать так:

A = B + 2 - 4 * 3i + 10 - 2i ^ 2


циклы и переходы

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


Переходы на метку:

10 Y = X / 2

GOTO 10

LABEL: A = B + 1

GOTO LABEL


Все метки локальны, то есть каждая определенная пользователем функция имеет свои собственные метки.


Циклы "FOR/NEXT":

FOR K = 0 TO 10 STEP 2

...

NEXT K


Если параметр STEP не указан, то он принимается равным 1.


Циклы "WHILE/END WHILE":

WHILE K < 10

...

END WHILE


Циклы "DO/UNTIL":

DO

...

UNTIL K < 10


Команда BREAK прерывает циклы WHILE/ENDWILE, DO/UNTIL и ближайший цикл FOR/NEXT:

DO

...

IF K = 5 THEN BREAK

...

UNTIL K < 10


Команда BREAK [x] прерывает цикл FOR/NEXT по переменной [x]:

FOR K = 0 TO 10

...

IF K = 5 THEN BREAK K

...

NEXT K


Команда CONTINUE переводит на новый виток циклы WHILE/ENDWILE, DO/UNTIL и ближайший цикл FOR/NEXT:

DO

...

IF K = 5 THEN CONTINUE

...

UNTIL K < 10


Команда CONTINUE [x] переводит на новый виток цикл FOR/NEXT по переменной [x]:

FOR K = 0 TO 10

...

IF K = 5 THEN CONTINUE K

...

NEXT K


Переходы "ON":

ON x GOTO 10, 20, 30

если [x] = 1, то переходит на 10, если [x] = 2, то переходит на 20 и так далее.


ON x GOSUB 10, 20, 30

Работает так же, как ON GOTO, но вызывает подпрограммы вместо переходов.


ПОДПРОГРАММЫ

Вызовы подпрограмм:

GOSUB 100

GOSUB MY_SUB


Возвращение из подпрограммы:

RETURN


КОММЕНТАРИИ

Комментарии в программе можно оставлять разными способами. Закомментировать одну строку или ее часть можно с помощью команды REM или с помощью символа ', например:

REM comment

A = B + 1 REM comment

'comment

A = B + 1 'comment


Закомментировать блок текста можно, заключив его между символами /* и */, например:

/* comment begin

comment end */


ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ

Определение в одну строку:

DEF F (X,Y) = SQR (X^2 + Y^2)


Определение в несколько строк:

DEF F (X,Y)

F = SQR (X^2 + Y^2)

END DEF


Пример массивов, переданных в функции в качестве параметров:

DIM M (100), N(20,20)

DEF FUNC1 (X())

...

END DEF

DEF FUNC2 (Y(,))

...

END DEF

CALL FUNC1 (M)

CALL FUNC2 (N)


Выполнение функции можно прервать командой RETURN. Также команда RETURN может возвращать результат функции. Функцию пользователя, не имеющую параметров, можно определять и вызывать как со скобками "()", так и без.

Все переменные, определенные внутри функции, являются локальными и статичными.

Массивы, переданные в функцию в качестве параметров, являются ссылками, то есть это один и тот же массив и в функции, и в общем коде.


СРАВНЕНИЯ

Операторы сравнения это: =, <, >, <=, >=, <>

Логические операторы это: AND, OR, NOT

Сравнение возможно для чисел и для строк. Для комплексных чисел возможны операторы сравнения: =, <>.


Условия "IF":

В одну строку:

IF A = 0 THEN GOTO 10 ELSE GOTO 20


Сокращенная версия:

IF A = 0 THEN 10 ELSE 20


В несколько строк:

IF X < 0 OR Y > 0 THEN

A = 0

B = 0

ELSE

A = 1

B = 1

END IF


ЗОНАЛЬНЫЕ ПЕРЕМЕННЫЕ

Хотя все переменные локальны, smart BASIC дает возможность использовать любую переменную из любой функции внутри любой другой функции. Для этого используется зональная запись переменной в виде "зона.имя", где "зона" - это зона определения переменной, а "имя" - это имя переменной. Например, если у вас в программе определена функция F:

DEF F(X)

X2 = X^2

X3 = X^3

F = X2 + X3

END DEF

то вы можете получить доступ к ее внутренним переменным X2 и X3 извне этой функции следующим образом:

X = F(2)

PRINT X; F.X2; F.X3


Зональная запись переменных дает возможность непосредственным образом передавать параметры в функцию, а также получать любое необходимое количество результатов из функции.


Так называемые "глобальные" переменные, когда из функции требуется получить доступ к переменным внешней программы, в зональной записи выглядят аналогично, только вместо зоны ничего не пишется:

DEF F

F = .X^2

END DEF


X = 2

PRINT F