|
Приложение С (часть 2) - язык программирования BASIC.
|
ПРИЛОЖЕНИЕ С (ЧАСТЬ 2)
ЯЗЫК ПРОГРАММИРОВАНИЯ BASIC
СПРАВОЧНОЕ ПОСОБИЕ
Все числа в системе могут иметь точность 9 или 10 знаков. Наибольшее число 10**38, а наименьшее положительное число 4*10**(-39). Числа имеют внутреннее представление как числа с плавающей (двоичной) точкой, с выде- лением одного байта на показатель степени "Е" (экспоненты) в интервале от 1 до 255, и четырёх байтов на мантиссу "М" в интервале от 0.5 до 1 (0.5 М1). Это представляется числом М * 2 ** (Е-128).
Поскольку 1/2 М<1, старший значащий бит мантиссы всегда 1. Следо- вательно, мы можем заменять его на бит, обозначающий знак:
0 - для положительного числа и
1 - для отрицательного числа.
Наименьшее целое имеет специальное представление, в котором пер- вый байт 0, второй байт знака (0 и FF Н), а^третий и четвёртый - само число в дополнительном коде (младшие значащие цифры в первом байте).
Числовые переменные имеют имя произвольной длины, начинающееся с буквы и продолжающееся буквами или цифрами. Пробелы и символы уп- равления цветом игнорируются и все буквы преобразуются к минимально упакованному виду.
Управляющие переменные для FOR-NEXT циклов имеют имена длиной в одну букву.
Числовые массивы имеют имена длиной в одну букву, которая может быть такой же, как имя скалярной переменной. Эти массивы могут иметь произвольное количество измерений и произвольный размер. Начальный индекс Всегда 1.
Строки символов более гибкие в своей длине. Имя строковой перемен- ной в отличии от простой переменной заканчивается символом доллара ($).
Строковые массивы также могут иметь произвольное количество изме- рений и размер. Их имена представляют собой одну букву и следующий за ней символ $, но не могут совпадать с именем простой строки символов.
Все строки в массивах имеют фиксированную длину, которая определя- ется числом, задающим последнюю размерность в операторе DIM. Началь- ный индекс 1.
Подстрока от строки может быть получена как сечение. Сечение может
быть:
а) пустым;
б) числовым выражением;
в) некоторым "числовым выражением" ТО. другим "числовым выражением" и использоваться в:
*) строковых выражениях (сечениях) ; ••) строковых массивах переменных
(индекс 1,индекс 2,...индекс N,сечение) или, что тоже самое,
(индекс 1,индекс 2,...индекс N) (сечение).
В случае *) строка выражения имеет значение S$. Если сечение массива пусто, то SS считается подстрокой от самой себя.
Если сечение представляется числовым выражением со значением "М", то результатом будет М-й символ от SS (подстрока длиной 1).
Если сечение представлено в форме в) и первое числовое выражение имеет значение М (умалчиваемое значение 1), а второе N (умалчиваемое значение SS), и если 1<= М <= N <= ,чем длина строки SS, то результатом будет подстрока от SS с М-м начальным символом и N-ым конечным.
Если 0 <- N < М, то результатом будет пустая строка. В любом другом случае выдаётся сообщение оо ошибке "3 ...
Сечение выполняется перед функцией или операцией, которая осущест- вляется, если скобками не предписано иначе.
Подстрока может назначаться (смотри оператор LET). Если часть строки записывается в строковый литерал, она должна удваиваться.
ФУНКЦИИ
имя
функции |
ТИП аргумента |
ДЕЙСТВИЕ (возвращаемое значение) |
1 |
2 |
3 |
ABS |
число |
абсолютное значение |
ASC |
число |
арккосинус в радианах. Выдаёт сообщение об ошибке "А ... * если X не лежит в интервале от -1 до 1. |
AND |
логическая опе- рация. Правый операнд всегда число. Слева мо- жет быть: -число,
тогда - строка,
тогда |
1 А , если В <> 0; A AND В-{
0 , если В - 0.
• А$, если В <> 0; А$AND В -{
" если В - 0. |
ASN |
число |
арксинус в радианах. Выдаёт сообщение "А..., если X не лежит в интервале от -1 до 1. |
ATN |
число |
арктангенс в радианах. |
ATTR |
два числовых ар- гумента X и Y, заключаемые в скобки |
число, двоичный код которого, представляет собой атрибуты Y-ой позиции Х-ой строки экрана. Бит 7 (старший ) равен 1 для мерцающего поля, и 0 для не мерцающего. Биты с 5 по 3 - цвет фона. Биты с 2 по 0 - цвет тона. Выдаёт сообщение "В ... * если не соблю- дается условие 0 <- X <- 23 и 0 <- Y <- 31. |
BIN |
|
это не двоичная функция. За BIN записывается пос- ледовательность нулей и единиц, представляющая со- бой двоичное представление числа, которое записыва- ется в память. |
1 |
2 |
3 |
CHR$ |
число |
символ, чей код представим числом X. округленным к ближайшему целому. |
CODE |
строка символов |
код первого символа в строке Х$ ( или 0. если Х$'- пустая строка). |
1 COS |
число в радианах |
косинус X. |
EXP |
число |
Е в степени X |
FN |
|
FN с последующим именем, определённым пользова- телем функции ( см. DEF ). Аргументы должны за- ключаться в скобки. Даже если нет аргументов, скобки всё равно должны записываться. |
IN |
число |
осуществляет ввод на уровне микропроцессора из порта X ( 0 <■ X <■ FFFF Н ). Загружается пара регистров ВС и выполняется команда ассемблера IN А(С). |
INKEYS |
нет |
чтение с клавиатуры. Возвращает символ . введенный с клавиатуры ( в режиме [Lj или [С] ). если было действительное нажатие клавиши, или пустую строку в противном случае. |
INT |
число |
округление к ближайшему меньшему целому. |
LEN |
строка символов |
длина строки. |
LN |
число |
натуральный логарифм- Выдаёт сообщение "А ... если X <» 0. |
NOT |
число |
0, если X <> 0 и 1, если X - 0. Операция имеет четвёртый приоритет. |
OR |
логическая опе- рация. Оба опе- ранда - числа |
. « , 1. если В <>0: A OR В » {
А, если В - 0. |
PEEK |
число |
значение байта в памяти по адресу X, округленному к ближайшему целому. Выдаётся сообщение "В ... если X < 0 и X > 65535 |
PI |
нет |
число Pi (3.14159265... ) |
POINT |
два числовых ар- гумента X и Y, заключённых в скобки |
1, если точка экрана с координатами ( X. Y ) закраше- на. 0, если эта точка имеет цвет фона. Выдаёт, сооб- щение "В ... "если не выполняются условия 0 <- X <- 255 и 0 <- Y<- 175. |
RND |
нет |
очередное псевдослучайное число из последователь- ности, получаемой возведением в 75 степень модуля числа 65537, вычитанием 1 и делением на 65536. Число лежит в интервале 0 <- Y <- 1. |
1 |
2 |
3 |
SCREENS |
два числовых ар- гумента X и Y, заключённых в скобки |
символ (обычный или инверсный), который появляет- ся на экране в строке X, позиции Y. Даёт пустую стро- ку, если символ не опознан. |
SGN |
число в радианах |
-1, если X < 0;
0, если X - 0;
1, если X > 0. |
SQR |
число |
корень квадратный. Выдаёт сообщение "А ... если Х<0. |
STR$ |
число |
строка символов, которая должна быть отображена, если X выводится. |
USR |
число |
вызывает подпрограмму в машинных кодах, началь- ный адрес которой X. При возврате результатом бу- дет содержимое регистровой пары ВС. |
USR |
строка символов |
адрес группы байтов, задающих определённый поль- зователем символ для закрепления его за X. |
VAL |
строка символов |
вычисление X, как числового выражения. Выдаёт со- общение "С ... если X содержит синтаксические ошибки или даё¥ строковое (не числовое) значение Возможны и другие ошибки. |
VAL$ |
строка символов |
вычисляет X, как строковое выражение. Выдаёт сооб- щение "С ... **, если X содержит синтаксическую ошибку или даёт нестроковое (числовое) значение. |
ОПЕРАЦИИ
Префиксные:
- число отрицательное значение. Инфиксные (двухоперандовые):
+ сложение для чисел, конкатенация для строк;
вычитание; * умножение; / деление;
** возведение в степень (стрелка вверх).Сообщение " В ...
если левый операнд отрицательный;
- равенство;
> больше; Оба операнда должны быть одного типа.
< меньше; Результат равен 1, если сравнение
>- больше или равно; истинно и равен 0, если нет. <= меньше или равно; <> не равно.
Функции и операции имеют следующие приоритеты:
индексация и сечения - 12
все функции за исключением: NOT и префиксного минуса - 11
возведение в степень - 10
префиксный минус - 9
*, / - 8
+, - (вычитание) - 6
>, <, >«, <=, о - 5
NOT - 4
AND - 3
OR - 2
ОПЕРАТОРЫ
Принятые обозначения:
А - одна буква;
V - переменная;
X, Y, Z - числовые выражения;
М, N - числовые выражения, которые округляются к
ближайшему целому; Е - некоторое выражение;
F - выражение, имеющее строковое значение;
S - последовательность операторов, разделённых
двоеточием;
С - последовательность символов управления цветом.
Каждый заканчивается запятой или точкой с запя- той. Цветовой символ имеет форму операндов: PAPER, INK, FLASH, BRIGHT, INVERSE или OVER.
Текст произвольного выражения может располагаться в любом месте строки (за исключением номера строки, который должен размещаться в нача- ле строки).
Все операторы, кроме INPUT, DEF и DATA могут использоваться и как команды, и в программах.
Команда или строка программы может содержать несколько операто- ров, разделённых двоеточием (*:w).
Нет ограничений на положение оператора в строке, хотя есть некоторые ограничения в IF и REM.
Все операторы языка сведены в следующую таблицу:
Оператор |
Действие оператора |
1 |
2 |
ВЕЕР X,Y |
Воспроизводится звук длительностью X сек. и высотой Y полутонов вверх от основного тона ДО (или вниз, если Y отрицательное). |
1 |
2 |
BORDER N |
Устанавливает цвет рамки (бордюра) экрана, выдаёт сооб- щение об ошибке "К ... ", если не соблюдается 0 <- N <- 7. |
BRIGHT N |
Устанавливает яркость выводимого символа:
0 - для обычной яркости;
1 - для повышеной яркости;
8 - сохраняет существующую яркость. |
CAT |
Без MICRODRIVE не работает. |
CIRCLE X,Y,Z |
Изображает дугу или окружность с центром в точке с ко- ординатами (X.Y) и радиусом Z. |
CLEAR |
Уничтожает все переменные и очищает занимаемую ими память. Выполняет RESTORE и CLS, устанавливает PLOT позицию в нижнюю левую точку экрана и очищает GO SUB СТЕК. |
CLEAR M |
Подобно CLEAR, но дополнительно изменяет системную переменную RAMTOP на 'N' и задает новый GO CUB СТЕК. |
CLOSE # |
Без MICRODRIVE не работает. |
CLS |
(CLear Screen) очищает файл экрана. |
CONTINUE |
Продолжает выполнение программы, начатой ранее и оста- новленной с сообщением, отличным от "0...Если было со- общение "9 ... " или "L ...", то выполнение продолжается со следующего оператора, в других случаях — с того операто- ра, где случилось прерывание. Если сообщение возникло в командной строке, то CONTINUE вызовет попытку пов- торить командную строку и перейдёт в цикл, если было со- общение "0:1", даёт сообщение "0", если было "0:2", или даёт сообщение "N если было "0:3" или более. В качестве CONTINUE используется ключевое слово CONT на клавиатуре. |
COPY |
Пересылает копию 22-х строк экрана на принтер, если он подключен. Помните, что по COPY нельзя распечатать на- ходящийся на экране автоматический листинг. Выдаёт со- общение "D ...", если нажать клавишу BREAK. |
DATA E1,E2,E3,... |
Часть списка данных. Должна располагаться в программе. |
DEF FN A(A1,A2,A3,...)«E |
Определяемая пользователем функция. Должна распола- гаться в программе. А1.А2,АЗ и т.д. единственные буквы или буквы и $ для строковых аргументов, значений. Использует- ся форма DEF FN А(), если нет аргументов. |
DELETE F |
Без MICRODRIVE не работает. |
1 |
2 |
DIM A(Ni,N2,...NK) |
Уничтожает массив с именем А и устанавливает числовой массив А с К-измерениями и присваивает всем его элемен- там значение |
DIM A$(N1,N2,...NK) |
Уничтожает массив или строку с именем А и устанавливает символьный массив А с К-измерениями и присваивает всем его элементам значение " ". Массив может быть представлен как массив строк фиксированной длины NK, с К-1 размер- ностью. Сообщение "4..." выдаётся, если недостаточно мес- та для размещения массива. Массив не определён до его описания в операторе DIM. |
DRAW X,Y |
То же самое, что и DRAW X,Y,0. Чертит прямую линию. |
DRAW X,Y,Z |
Изображает линию от текущей графической позиции в точ- ку с приращениями X.Y по дуге в Z радиан. Выдаёт сооб- щение "В ..." при выходе за пределы экрана. |
ERASE |
Без MICRODRIVE не работает. |
FLASH N |
Определяет, будет ли символ мерцающим или постоянно светящимся: N -0 для постоянного свечения; N - 1 для мерцания;
N - 8 для сохранения предыдущего состояния. |
FOR. A-X TO Y |
То же самое, что и FOR A-X ТО Y STEP 1. |
FOR A-X TOY STEP Z |
Уничтожает скалярную переменную А и устанавливает уп- равляющую переменную X, предел Y, шаг приращения Z и зацикливает адрес, указанный в утверждении после FOR оператора. Проверяет, если начальное значение больше (если STEP 0) или меньше (если STEP 0), чем предел, то происходит переход к утверждению NEXT А или выдача со- общения "1 ..Л если нет (см. NEXT). Сообщение "4 ..." вы- даётся, если недостаточно места для размещения управляю- щей переменной. |
FORMAT F |
Без MICRODRIVE не работает. |
GO SUB N |
Проталкивает строку с оператором GO SUB в СТЕК для использования затем как GO ТО N. Выдаёт сообщение "4если не все подпрограммы завершились с RETURN. |
GO TON |
Продолжает выполнение программы со строки N. Если N опущено, то с первой строки после этой. |
IF X THEN S |
Если X истинно (не равно 0), то выполняется S. S включает все операторы до конца строки. Форма IF X THEN N (где N - номер строки) недопустима. |
I |
2 |
INK N |
Устанавливает цвет закрашивания (т.е. цвет, которым бу- дут изображаться символы на цвете фона): N в интервале от 0 до 7 указывает цвет; N■8- оставить цвет без изменения; N-9 - увеличение контраста. Выдаёт сообщение "К если N не лежит в интервале от 0 до 9. |
INPUT... |
Где ... есть последовательность вводимых символов, разде- ляемых, как в операторе PRINT, запятыми, точками с запя- той или апострофами. Вводимыми символами могут быть:
а) некоторый PR1 NT-символ, начинающийся не с буквы;
б) имя переменной;
в) строка имён переменных строкового типа. PRlNT-символы в случае а) представляются так же, как и в операторе PRINT, за исключением того, что они все выво- дятся в нижнюю часть экрана. В случае б) компьютер оста- навливается и ждёт ввода некоторого выражения с клавиатуры, значение которого будет присвоено перемен- ной. Ввод осуществляется обычным образом, а синтаксические ошибки выдаются мерцающим [?]. Дла строкового выражения вводной буфер устанавливается дла размещения двух таких строк (который при необходимости может быть увеличен). Если первый вводимый символ STOP, то программа останавливаетя с сообщением "Н Случай в) подобен случаю б) с той лишь разницей, что вводимая информация представляет собой строковый лите- рал неограниченной длины, и STOP в этом случае ие срабо- тает. Для останова Вы должны нажать клавишу "курсор вниз". |
INVERSE N |
Символ управления инверсией выводимого символа. Если N-0, символ выводится в обычном виде с прорисовкой цве- та закрашивания (INK) на цвете фона (PAPER). Если N -1, то цветовое решение изображения символа меняется на обратное. Смотри приложение В. Выдаёт сообщение "К ec.iHN не 0 или 1. |
1 |
2 |
LET V-E |
Присваивает значение "E" переменной "V". Ключевое слово LET не может быть опущено. Скалярная переменная не определена, пока не встретится в операторах LET, READ или INPUT. Если "V" индексируемая строковая переменная или сечение строкового массива (подстрока), то присваивание осуществляется с усечением справа или до- полнением пробелами до фиксированной длины. |
LIST |
То же, что и LIST 0. |
LIST N |
Записывает текст программы в верхнюю часть экрана, начиная с первой строки, большей, чем "N", и делает "N" те- кущей строкой. |
LLIST |
То же, что и LLIST 0. |
LLIST N |
Подобно LIST N, но вывод осуществляется на принтер. |
LOAD F |
Загружает программу и переменные. |
LOAD F DATA () |
Загружает числовой массив. |
LOAD F DATA $() |
Загружает строковый массив. |
LOAD F CODE M,N |
Загружает старшие "N" байтов, начиная с адреса "М". |
LOAD F CODE M |
Загружает байты, начиная с адреса " М |
LOAD F CODE |
Загружает байты по тому же адресу, с которого они были записаны. |
LOAD F SCREEN$ |
Аналогично LOAD CODE 16384,6912. Очищает файл экрана й загружает его с кассетного магнитофона. Смотри главу 20. |
LPRINT |
Подобно PRINT, но использует принтер. |
MERGEF |
Подобно LOAD F, но не затирает всю старую программу в памяти, а заменяет только те строки и переменные, у кото- рых совпадают номера или имена с такими же на ленте. |
MOVE F1,F2 |
Без MICRODRIVE не работает. |
NEW |
Запускает по новой систему программирования BASIC, уничтожая старую программу и переменные, и используе- мую память, включая и байт адреса в системной переменной RAMBOT, но сохраняет системные переменные UDG, Р RAMT, RASP и PIP. |
NEXT A |
а) находит управляющую переменную "А";
б) прибавляет к ней значение STEP;
в) если STEP 0, а значение "А" не стало больше значения "предел", или STEP 0, а значение "А" не стало меньше зна- |
|
2 |
|
чения "предел", то происходит переход к оператору цикла. Сообщение "2 ..." выдаётся, если не найдена переменная "А". Сообщение "1..." выдаётся, если "А" не является управ- ляющей переменной цикла. |
OPEN # |
Без MICRODRIVE не работает. |
OUT M.N |
Выводит байт "N" в порт "М". Операция выполняется на уровне микропроцессора (загружаете регистровую пару ВС адрес "М", а в регистр А - "N" и выполняет команду ассемб- лера OUT (С),А). 0 <- М <- 65535, -255 <- N <« 255, иначе выдаётся сообщение "В...". |
OVERN |
Управляющий символ надпечатывания по выведенной стро- ке. Если N - 0, то выводимый символ затирает существу- ющий в данной позиции. Если N - I, то новый символ со- единяется со старым, образуя закрашивающий цвет, при ус- ловии, что старый символ имел указание цвета, отличное от старого, или цвет фона, если оба указывают на один и тот же цвет (либо фона, либо закрашивания. Сложение по мо- дулю 2). Смотри приложение В. |
PAPER N |
Подобен INK, но управляет цветом фона. |
PAUSE N |
Останавливает выполнение программы и задерживает изоб- ражение на экране на N кадров (50 кадров в секунду - часто- та кадровой развёртки телевизора) или до нажатия любой клавиши. 0 <» N <- 65535, иначе выдаётся сообщение "В...". При N - 0 время задержки не учитывается и пауза продол- жается до первого нажатия клавиши. |
PLOT C;M,N |
Выводит точку закрашивающего цвета (обработанная OVER и INVERSE) с координатами (ABS (М), ABS (N)) смещает графическую PLOT-позицию. Если цветовой символ С не специфицирован иначе, то цвет закрашивания в позиции, где расположена эта точка, изменится на текущий сплошной закрашивающий цвет, и другие указания (цвет фона, мерцание, яркость) остаются без изменения. 0 <- ABS ( М ) 255, 0 <« ABS ( N ) <- 175 иначе выдаётся сообщение "В...". |
1 |
2 |
POKE M,N |
Записывает значение N в байт памяти по адресу М. 0 <« М <» 65535, ( 16384 <- М <- 65535 ),-255 <- N <- 255, иначе выдаётся сообщение "В |
PRINT... |
Где - последовательность PRINT-символов, раз- делённых запятыми, точками с запятой или апострофами, которые выводятся на экранный файл для отображения на экране телевизора. Точка с запятой сама действия не вызы- вает, а используется для разграничения символов. Запятая порождает управляющий символ "запятая", и апостроф порождает символ ENTER.
В конце оператора PRINT, если он не заканчивается точкой с запятой, запятой или апострофом, автоматически вы- водится символ ENTER. PRINT-символ может быть:
а) пустая строка (т.е. ничего);
б) числовое выражение.
Если значение выражения отрицательно, то выводится знак минус.
Если X <« 10 ** (-5) или X >- 10 ** 13, вывод осуществля- ется в показательной форме. Мантисса представляется 8 - мью цифрами (с нормализацией) и десятичной точкой (отсутствует только тогда, когда в мантиссе одна цифра) после первой цифры. Показатель степени записывается после буквы "Е" с последующим знаком и двумя цифрами порядка. Иначе X выводится как обычное десятичное число с 8-мью значащими цифрами;
в) строковое выражение.
В строке возможны пробелы до и после символов. Управ- ляющие символы вызывают определяемое ими действие. Не отражаемые на экране символы выводятся как "?";
г) AT M,N
Вывод в строку М в позицию N;
д) TAB N
Вывод управляющего символа TAB с последующими дву- мя байтами N (первый байт старший). Вызывает ТАВ-оста- нов;
е) цветовой символ в форме PAPER, INK, FLASH, BRIGHT, INVERSE или OVER оператора. |
|
RANDOMIZE |
To же, что и RANDOMIZE 0. |
1 |
2 |
RANDOMIZE N |
Устанавливает системную переменную SEED, используе- мую для вычисления очередного значения функции RND. Если N <> 0. то SEED принимает значение N. ЕС ли N - 0, то SEED принимает значение другой системной переменной FRAMES, подсчитывающей кадры, отображаемые на экра- не. что обеспечивает вполне случайное число.
Оператор допускает сокращение RAND (смотри клавишу). Выдаётся сообщение МВ если N не лежит в интервале от 0 до 65535. |
READ V1,V2,...VK |
Присваивает переменным одной за другой значения, после- довательно представленные в списке DATA. |
REM... |
Не выполняется. - может быть последовательностью символов (исключая ENTER). Может включать двоеточие CY*) для указания отсутствия оператора в строке с REM. |
RESTORE |
То же самое, что и RESTORE 0. |
RESTORE N |
Перезаписывает указатель данных в первый оператор DATA в строке, меньшей, чем N. Следующий оператор READ начнёт считывание отсюда. |
RETURN |
Ссылается на оператор GO SUB в стеке и передаёт управ- ление на строку после него. Выдаётся сообщение "7 ...", если нет указываемого оператора в стеке.
Характерная ошибка, когда операторы GO SUB не сба- лансированы операторами RETURN. |
RUN |
То же самое, что и RUN 0. |
RUN N |
Выполняет CLEAR, и затем GO ТО N. |
SAVE F |
Записывает на ленту программу и переменные. |
SAVEF LINEN |
Записывает на ленту программу и переменные таким обра- зом, что при загрузке программа автоматически выполняет - ся со строки N. |
SAVE F DATA () |
Запись на ленту числового массива. |
SAVE F DATA $() |
Запись на ленту строкового массива $. |
SAVE F CODE M,N |
Записывает на ленту N байтов, начиная с адреса М. |
SAVE F SCREENS |
Аналогично SAVE CODE I63S4.6912. Выдаётся сообщение **F если F пустая строка или имеет длину более 10 символов. Смотри главу 20. |
STOP |
Останавливает выполнение' программы с* выдачей сооб- щения м 9
CONTINUE (продолжение) будет осуществляться со следу- ющего оператора. |
VERIFY |
То же, что и LOAD, за исключением того, что данные не за- гружаются в ОЗУ, а сравниваются с находящимися там. Выдаётся сообщение МВ если обнаружен хотя бы один несовпадающий байт. |
|
|