БЕЙСИК
ОПИСАНИЕ ЯЗЫКА
1. ОБЩИЕ СВЕДЕНИЯ И СПОСОБ ОПИСАНИЯ ЯЗЫКА
1.1. Назначение языка
Язык БЕЙСИК является одним из простых в изучении языков программирования.
Программа на языке БЕЙСИК представляет собой набор операторов, объединённых в логические блоки.
Диалоговый режим интерпретатора БЕЙСИК облегчает отладку программ, обмен память - внешнее устройство (и наоборот).
1.2. Условные обозначения
В данном документе используются следующие условные обозначения:
1) |
[ ] - квадратные скобки |
Элементы внутри скобок необязательны; |
2) |
Элементы из прописных латинских букв и специальных символов |
Ключевые слова. Должны указываться точно такими, какие они есть в формате. Пример: LET |
3) |
Элементы из набора латинских букв |
Следуют за ключевым словом. Необходимо заменить данные элементы согласно описанию, даваемому в тексте. |
В табл. 1 приведены элементы из набора латинских букв, часто встречающихся в описании формата операторов.
Мнемоника |
Обозначение |
Смысловая нагрузка |
---|---|---|
N, NUM |
Номера строк |
Номера строк |
ЕХР |
Выражение |
Допустимое в БЕЙСИК выражение. Может быть числовым или строковым |
STR |
Строка |
Строковое выражение |
LIST |
Список элементов |
Элементы из констант, переменных, массивов |
VAR |
Переменная |
Вещественная, целая или строковая переменная |
CONST |
Константа |
Вещественная, целая или строковая константа |
2. ЭЛЕМЕНТЫ И ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА
2.1. Набор символов языка БЕЙСИК
Все используемые символы рассматриваются как алфавит языка БЕЙСИК. Алфавит включает:
- прописные (латинские) буквы от A до Z;
- буквы кириллицы от A до Я;
- цифры от 0 до 9;
- специальные символы:
Пробел
"
Кавычки
#
Номер
¤
Знак денежной единицы
%
Процент
&
Коммерческое "И"
/
Апостроф
(
Круглая скобка левая
)
Круглая скобка правая
+
Плюс
,
Запятая
.
Точка
/
Дробная черта
;
Точка с запятой
<
Меньше
=
Равно
>
Больше
?
Вопросительный знак
@
Коммерческое "ЭТ"
\
Обратная дробная черта
^
Стрелка вверх
- непечатаемые символы.
Буквы кириллицы могут использоваться как часть текстовой константы или буквенно-цифрового литерала. В комментариях допускается использование любых печатных символов.
2.2. Номера строк
Каждая строка программы на языке БЕЙСИК должна начинаться номером. Номера строк необходимы для:
- указания интерпретатору БЕЙСИК порядка выполнения программы;
- изменения обычного порядка выполнения операторов для обеспечения ссылок при условной и безусловной передаче управления;
- модификации отдельных строк и отладки программ. Номер - положительное целое число в диапазоне от 1 до 32767.
Рекомендуется использовать номера строк с шагом 10. Это позволяет вставлять дополнительные операторы между строками.
Пример:
10 A=5 20 B=10 30 C=A+B 40 END
В примере присваиваются значения переменным "A" и "B", они суммируются, результат помещается в "C".
2.3. Операторы
Оператор языка БЕЙСИК в программе следует за номером строки. Оператор указывает интерпретатору, что должно быть выполнено, и как следует воспринимать данные (если они есть), следующие за этим оператором.
Операторы делятся на две группы:
- выполняемые операторы - определяют действия программы, указывая интерпретатору БЕЙСИК, какую операцию нужно выполнить (PRINT, GOTO, READ);
- невыполняемые операторы - описывают характер и упорядочение данных, позволяют вводить в программу примечания и сообщения описательного характера (DATA, REM).
В строку можно записать несколько операторов, каждый из которых (за исключением последнего) отделяется от последующего с помощью обратной дробной черты. При этом номер строки ставится только перед первым оператором. Запись заканчивается нажатием клавиши <ВК>.
Пример:
10 LET A=B*C/D \ PRINT A
2.4. Пробелы и табуляция
В языке БЕЙСИК разрешается использование пробелов и знаков табуляции для удобства чтения программ.
Пример:
Использование пробелов.
Запись |
10 LET A=B*2+1 |
читается лучше, чем |
|
10LETA=B*2+1 |
или |
|
10 L E T A = B * 2 + 1 |
|
Пример:
Использование табуляции.
10 FOR N=1 TO 3 20 FOR I=1 TO 5 30 FOR J=1 TO 10 40 A(I,J)=N/(I+J-1)+A(I,J) 50 NEXT J 60 NEXT I 70 NEXT N
2.5. Выполнение операторов в программном и непосредственном режимах
БЕЙСИК выполняет операторы в двух режимах; программном и непосредственном. В программном режиме каждой строке предшествует номер, указывающий последовательность её выполнения в программе. В непосредственном режиме номер строки отсутствует; оператор выполняется сразу же после нажатия клавиши <ВК>.
Сообщение READY указывает на готовность системы принять информацию в непосредственном режиме. Строки можно набирать в любом порядке. БЕЙСИК размещает их в порядке возрастания номеров строк.
Для замены строки следует набрать новую строку под тем же номером.
Пример:
Старая строка |
Новая строка |
---|---|
30 A=B+C |
30 A=B*C |
Для удаления строки следует набрать её номер и нажать клавишу <ВК>. Удаление набираемого символа производится клавишей <ЗБ>. Отказ от набираемой строки производится нажатием СУ/U (описание приведено в п. 7.3.5).
Операторы БЕЙСИК, используемые в непосредственном режиме как команды, набираются без номера строки и называются операторами непосредственного режима.
Пример:
Строку подпрограммы 10 PRINT 4+5 БЕЙСИК поместит в память для более позднего выполнения. Но если набрать её без номера, БЕЙСИК выполнит строку и выдаст сообщение READY.
PRINT 4+5 9 READY
Разрешается запись нескольких операторов непосредственного режима в одной строке. Операторы разделяются символом "\".
Пример:
A=5\B=20\C=.3729\PRINT A*B, SIN(C) 100 .364318 READY
Непосредственный режим обычно используется при отладке программ.
Например, оператор PRINT в непосредственном режиме позволяет узнать текущее значение переменных в программе.
3. ЭЛЕМЕНТЫ ДАННЫХ ЯЗЫКА
3.1. Константы
В языке БЕЙСИК используются три типа констант:
- вещественные константы;
- целые константы;
- строковые константы.
3.1.1. Вещественная константа.
Вещественная константа - это набор из одной или нескольких десятичных цифр. Константа может принимать как положительные, так и отрицательные значения.
Отсутствие точки в константе предполагает наличие её за последней цифрой справа.
Пример:
184 равносильно 184.
Пример:
Допустимые вещественные константы.
5 |
42861 |
74 |
-125 |
.95 |
БЕЙСИК разрешает оперировать с вещественными константами в диапазоне от 10^(-38) до 10^(+38).
Использование в программе констант вне указанного диапазона вызывает сообщение о неустранимой ошибке.
При работе с очень большими и очень малыми числами БЕЙСИК разрешает использование экспоненциального представления, то есть число (в диапазоне от 1 до 10), умноженное на десять в степени:
[-] X.ХХХХХЕ [-] NN |
||
где |
(-) |
- знак числа; |
|
X |
- цифра от 0 до 9; |
|
. |
- десятичная точка; |
|
Е |
- используемый формат; |
|
NN |
- порядок. |
Числовые константы могут иметь вид:
.73012E-02 9.99 -1 -8.3067
Числа с плавающей запятой занимают в памяти либо два, либо четыре 16-разрядных слова. Значение, вычисленное с одинарной точностью, занимает два слова (8 десятичных цифр), а вычисленное с двойной точностью (15 десятичных цифр) - четыре слова.
При вычислениях с двойной точностью необходимо учитывать:
- константы, переменные и массивы требуют вдвое больше памяти, чем те же элементы с одинарной точностью;
- арифметические операции и функции с числами двойной точности выполняются медленнее, чем те же операции над числами с одинарной точностью.
Оба формата позволяют представлять числа в диапазоне от 10^(-38) до 10^(+38).
БЕЙСИК выполняет вывод результатов при вычислениях с плавающей запятой:
- с помощью оператора PRINT (печатается шесть цифр);
- с помощью оператора PRINT USING и функции STR¤ (печатаются числа в заданном формате).
3.1.2. Целая константа.
Целая константа - это набор десятичных цифр, оканчивающихся знаком процента "%".
Диапазон использования целых констант от -32768% до + 32767%. Операции с целыми константами вне этого диапазона вызывают сообщение о неустранимой ошибке.
3.1.3. Строковая константа (литерал).
Строковая константа (литерал) - это набор буквенно-цифровых и/или специальных символов. Строковые константы ограничиваются с двух сторон одиночными или двойными кавычками.
БЕЙСИК печатает каждый символ внутри кавычек точно так, как он представлен в исходной программе.
Начальный и конечный ограничители должны быть одного типа. Возможна комбинация двойных и одинарных кавычек.
Пример:
PRINT 'пункт "строковые константы"'
Результат работы оператора:
пункт "строковые константы"
3.2. Переменные
Переменная - это величина, значение которой может изменяться в процессе выполнения программы.
БЕЙСИК допускает три типа переменных:
- вещественные переменные;
- целые переменные;
- строковые переменные.
3.2.1. Вещественные переменные
Вещественная переменная обозначается одной буквой или буквой, за которой следует одна цифра.
В начале программы, написанной на языке БЕЙСИК, необходимо присвоить всем переменным нулевое значение.
Целочисленное значение, присвоенное вещественной переменной, БЕЙСИК печатает как целое, но во внутреннем представлении рассматривает его как число с плавающей запятой.
3.2.2. Целые переменные
Идентификатор целой переменной состоит из одной буквы или из одной буквы и одной цифры и заканчивается знаком процента "%".
Пример:
Целые переменные:
A% |
C8% |
B1% |
D% |
Значение целых переменных должно находиться в диапазоне от -32768 до +32767.
Если вещественная константа присваивается целой переменной, то БЕЙСИК отбрасывает дробную часть значения.
3.2.3. Строковые переменные
Идентификатор строковой переменной - это буква, за которой может следовать одна цифра. Знак "¤" должен быть последним символом в идентификаторе строковой переменной.
Пример:
Допустимые имена |
Недопустимые имена |
---|---|
B1¤ |
B1 |
A¤ |
A |
S2¤ |
2S¤ |
I¤ |
¤I |
C6¤ |
C6 |
Длина символьной строки, соответствующей строковой переменной, может изменяться от 0 (пустая строка) до 255.
ПРИМЕЧАНИЕ. Вещественная переменная, целая переменная и строковая переменная, имена которых начинаются с одних и тех же буквенно-цифровых символов, представляют три различных переменных.
Пример:
A5 |
- вещественная переменная. |
A5% |
- целая переменная. |
A5¤ |
- строковая переменная. |
3.3. Массивы
Имя массива БЕЙСИК - переменная, за которой следуют один или два индекса (в диапазоне от 0 до 32767), заключённые в скобки.
Пример:
одномерный массив A(I) из шести элементов и его распределение в памяти:
A(0) A(1) A(2) A(3) A(4) A(5)
Пример:
двухмерный массив M1(I,J) из 9 элементов и его распределение в памяти:
M1(0,0) |
хранится в ячейке |
L |
M1(0,1) |
хранится в ячейке |
L + 1 |
M1(0,2) |
хранится в ячейке |
L + 2 |
M1(1,0) |
хранится в ячейке |
L + 3 |
M1(1,1) |
хранится в ячейке |
L + 4 |
|
. |
|
M1(2,2) |
хранится в ячейке |
L+8 |
Если пользователь не зарезервировал память для массива (оператором DIM), БЕЙСИК выделяет место в памяти для одномерного массива из 11 элементов, для двухмерного массива из 121 элемента.
В программе можно использовать переменную и массив с одним и тем же именем.
Пример:
A - переменная,
A(5) - массив.
Недопустимо использование одного и того же имени для одномерного и двухмерного массивов одновременно. Использование массива взамен большого числа переменных приводит к экономии памяти.
Пример:
Программа с массивом | Программа с отдельными переменными |
---|---|
5 DIM A(8) 10 FOR I = 0 TO 8 20 LET A(I)=I 30 NEXT I |
5 A0=0 10 A1=1 15 A2=2 20 A3=3 25 A4=4 30 A5=5 35 A6=6 40 A7=7 45 A8=8 |
4. ВЫРАЖЕНИЯ
Выражение - это константы, переменные, индексные переменные, функции или любые комбинации их, образованные а помощью:
- арифметических операций;
- операций отношения;
- операций над строками.
4.1. Арифметические выражения
Для образования арифметических выражений используются следующие арифметические операции:
^ |
- возведение в степень; |
* |
- умножение; |
/ |
- деление; |
+ |
- сложение; |
- |
- вычитание. |
Выполнение арифметических операций над арифметическими выражениями одного типа даёт результат того же типа. Пример:
A%+B% |
= целому выражению. |
C1*D |
= вещественному выражению. |
Сочетание целой величины с вещественной даёт вещественный результат.
Пример:
A*B% |
= вещественному выражению. |
8.8*8% |
= 70.4 |
Два знака арифметических операций нельзя располагать рядом. Исключение составляет унарный минус.
Пример:
A*-B - правильно,
A*(-B) - правильно.
БЕЙСИК вычисляет значение выражения согласно приоритету операций:
- возведение в степень (^) - наивысший;
- унарный минус (-);
- умножение, деление (*, /);
- сложение, вычитание (+, -) - низший.
При использовании скобок БЕЙСИК вычисляет первым самое внутреннее выражение, затем внешнее по отношению к предыдущему и так далее.
Пример:
B=(20*(16+(8^2)))
БЕЙСИК вычисляет первым (8^2), затем (16+64) и, наконец, (20*80).
БЕЙСИК вычисляет выражение в скобках в первую очередь, даже если операция в скобках имеет более низкий приоритет, чем операция вне скобок.
Операции, размещённые в одной строке и имеющие равный приоритет, выполняются последовательно слева направо.
Пример:
A^B^C соответствует (A^B)^C.
4.2. Строковые выражения.
Строковые выражения состоят из строковых констант, строковых переменных, строковых функций и/или любой возможной комбинации, разделяемой знаками операций.
В качестве знаков операций над строковыми выражениями БЕЙСИК использует знак "+" (плюс) и знак "&" (амперсанд). Знаки операций служат для объединения строк.
A¤ + B¤ и A¤ & B¤
означают присоединение строки B¤ к концу строки A¤. Результирующая строка не должна превышать 255 символов.
Пример:
10 D¤ ="ПРИ"&"СОЕДИНЕНИЕ" 20 PRINT D¤ 30 END
Результат, выводимый на терминал:
ПРИСОЕДИНЕНИЕ
4.3. Операции отношения.
Операции отношения служат для установления отношений между двумя величинами или двумя строками. Сравнение и передача управления осуществляется, в основном, операторами IF THEN (IF GOTO). Допустимо сравнение целого и вещественного выражений. Знаки операций отношения приведены в табл. 2.
Операция |
Пример |
Комментарии |
---|---|---|
= |
A=B |
A равно B |
A¤=B¤ |
Строки A¤ и B¤ равны |
|
< |
A<B |
A меньше B |
A¤<B¤ |
Символьная строка A¤ меньше символьной строки B¤ |
|
> |
A>B |
A больше B |
A¤>B¤ |
Символьная строка A¤ больше символьной строки B¤ |
|
<=, =< |
A<=B |
A меньше или равно B |
A¤<=B¤ |
Символьная строка A¤ либо эквивалентна символьной строке B¤, либо меньше |
|
>=, => |
A>=B |
A больше или равно B |
A¤>=B¤ |
Символьная строка A¤ либо эквивалентна символьной строке B¤, либо больше |
|
<>,>< |
A<>B |
A не равно B |
A¤<>B¤ |
Символьные строки A¤ и B¤ не эквивалентны друг другу |
Сравнение строк проводится посимвольно слева направо, в порядке расположения символов в таблице кодов КОИ-7. Пример:
10 A¤="ABCD" 20 B¤="ABCF" 30 IF A¤<B¤ GOTO 50 40 PRINT B¤\GOTO 60 50 PRINT A¤ 60 END
В строке 30 происходит сравнение символьных строк A¤ и B¤ и передача управления строке 50, если условие выполняется. В противном случае, выполнение программы продолжится со строки 40.
Сравнивая символьные строки разной длины, БЕЙСИК дополняет короткую строку пробелами.
5. ОПЕРАТОРЫ И ФУНКЦИИ ЯЗЫКА БЕЙСИК
5.1. Операторы
5.1.1. Оператор REM.
Оператор REMARK используется для ввода примечаний и комментариев в программу пользователя.
Формат оператора REM:
[N] REM COMMENT |
||
где |
N |
- номер строки; |
|
COMMENT |
- текст примечаний и комментариев. |
Примечания и комментарии печатаются при получении листинга программы пользователя и не влияют на выполнение программы.
Необходимо учитывать при написании больших программ, что оператор REM (с текстом) занимает место в памяти.
5.1.2. Оператор DIM.
Оператор DIM служит для резервирования места в памяти для числовых или строковых массивов.
Формат оператора DIM:
[N] DIM LIST |
||
где |
N |
- номер строки; |
|
LIST |
- список массивов, разделённых запятыми. |
Пример:
10 DIM A(36), B (4,6), C% (8,18), D¤ (20)
Двумерный массив размещается в памяти по строкам, то есть второй индекс изменяется быстрее первого.
Пример:
Оператор DIM(3,4) определяет следующее размещение массива в памяти:
0.0 0.1 0.2 0.3 0.4 1.0 1.1 1.2 ... 3.3 3.4 |
||||
Это соответствует матрице: |
||||
0.0 |
0.1 |
0.2 |
0.3 |
0.4 |
1.0 |
1.1 |
1.2 |
1.3 |
1.4 |
2.0 |
2.1 |
2.2 |
2.3 |
2.4 |
3.0 |
3.1 |
3.2 |
3.3 |
3.4 |
Пример:
Определение размерности строковых массивов.
10 DIM T¤(4) 20 FOR I=0 TO 4 30 INPUT T¤(I) 40 NEXT I 50 END
Указывая в операторе DIM максимальное значение индексов, не обязательно заполнять значениями всё поле отведённой памяти.
Оператор DIM является невыполняемым оператором. Его можно поместить в любом месте программы и в любой части многооператорной строки.
5.1.3. Оператор LET.
Оператор LET присваивает значение переменной.
Формат оператора LET:
[N] [LET] VAR = ЕХР |
||
где |
N |
- номер строки; |
|
LET |
- необязательное имя оператора; |
|
VAR |
- переменная, принимающая новое значение; |
|
ЕХР |
- выражение, определяющее новое значение. |
Переменная и выражение должны быть оба числовыми или оба строковыми.
Пример:
10 LET A = 482.5 или 10 A = 482.5
БЕЙСИК вычисляет значение любой формулы.
Пример:
10 B(I) = (A(0)+A(I))/2
Оператор LET можно поместить в любой части многооператорной строки.
Пример:
10 DIM A(7)\I=40\PRINT I
5.1.4. Оператор INPUT.
Оператор INPUT позволяет вводить и анализировать данные в процессе выполнения программы.
Формат оператора INPUT:
[N] INPUT VAR1[,VAR2,VAR3,...] |
||
где |
N |
- номер строки; |
|
VAR1,VAR2,VAR3,... |
- элементы данных, которым присваиваются вводимые значения. |
Встретив оператор INPUT, БЕЙСИК печатает знак "?" и ждёт ввода значений для каждой переменной. Значения разделяются запятыми. При нажатии клавиши <ВК> производится ввод данных и анализ их на соответствие типа переменных вводимым значениям. БЕЙСИК вводит значения слева направо до ограничителя строки <ВК>.
Пример:
10 INPUT C1,C¤ RUNNH ?50 ?ЛЕТ READY
Число вводимых данных должно соответствовать числу переменных в операторе INPUT. Если введено недостаточное количество данных, БЕЙСИК печатает знак "?". Избыток вводимых значений вызовет предупреждение об ошибке. Лишние значения игнорируются.
Строковую переменную (или массив) допускается вводить без ограничивающих кавычек. Однако, если в тексте имеется символ "запятая", то наличие кавычек обязательно. В этом случае игнорируются начальные и конечные пробелы.
С оператором INPUT используется оператор PRINT для информации о количестве переменных и их типе (числовая или строковая).
Пример:
10 PRINT "введите 3 целых числа A,B,C и одну символьную строку J" 20 INPUT A%,B%,C%,J¤ 30 END
Дополнительная информация об операторах INPUT и LINPUT приведена в пункте 6.3.1.
5.1.5. Оператор LINPUT.
Оператор LINPUT соответствует оператору INPUT. Но оператор LINPUT используется только для строковых данных.
Формат оператора LINPUT:
[N] LINPUT STR-VAR1 [,STR-VAR2,... ] |
||
где |
N |
- номер строки; |
|
STR-VAR1,STR-VAR2,... |
- строковые переменные. |
Оператор LINPUT принимает строку входной информации (с терминала), включая начальные, конечные, промежуточные пробелы, символы пунктуации и кавычки. Если разделитель "," встречается внутри текста вводимой переменной, то текст ограничивается разделителями " или '.
5.1.6. Операторы READ, DATA, RESTORE.
Операторы READ и DATA используются для организации блока данных, который считывается интерпретатором БЕЙСИК но время выполнения программы.
Формат оператора READ:
[N] READ VAR1 [,VAR2,VAR3,...] |
||
где |
N |
- номер строки; |
|
VAR1,VAR2,VAR3,... |
- переменные, которым присваиваются значения из списка оператора DATA. |
Пример:
10 READ A,B%,C¤,D(5)
Формат оператора DATA:
[N] DATA CONST1 [,CONST2,CONST3,... ] |
||
где |
N |
- номер строки; |
|
CONST1,CONST2,CONST3,... |
- вещественная, целая или строковая (в кавычках или без) константа. |
Перед выполнением программы БЕЙСИК просматривает все операторы DATA в порядке их появления и создаёт блок данных. Каждый раз, когда в программе встречается оператор READ, блок данных выдаёт последовательно соответствующее значение для переменных этого оператора в том порядке, в котором они заданы в блоке данных.
После выполнения оператора READ положение последних считанных данных запоминается (с помощью указателя). Следующий оператор READ начинает выбирать данные с той позиции, которая была установлена предыдущим оператором: READ.
Пример:
Использование операторов READ и DATA:
10 READ A,B%,C¤,C1¤ 20 DATA 3.5, -6, "режим", работы
БЕЙСИК присваивает значения в следующем порядке:
A=3.5 B%=-6 C¤=режим C1¤=работы
Оператор READ допускается помещать в любом месте многооператорной строки.
Оператор DATA должен быть либо единственным, либо последним оператором строки.
БЕЙСИК допускает чтение числовой константы в строковую переменную.
Пример:
10 READ A¤ 20 DATA 15.15
Попытка считать строковую константу в числовую переменную вызовет сообщение об ошибке.
При выполнении оператора READ указатель считывания данных перемещается. БЕЙСИК осуществляет повторное считывание одних и тех же данных с помощью оператора RESTORE.
Формат оператора RESTORE:
[N] RESTORE |
||
где |
N |
- номер строки. |
Пример:
10 READ A,B,C 20 RESTORE 30 READ D,E,F 40 DATA 2,4.5,6,8,10 50 END
Оператор READ в строке 10 читает первые три значения из оператора DATA в строке 40.
A=2 B=4.5 C=6
Затем оператор RESTORE (строка 20) перемещает указатель данных в начало строки 40 так, что второй оператор READ в строке 30 читает первые три значения.
D=2 E=4.5 F=6
5.1.7. Оператор PRINT.
Оператор PRINT выводит данные на терминал в процессе выполнения программы.
Формат оператора PRINT:
[N] PRINT [LIST] |
||
где |
N |
- номер строки; |
|
LIST |
- список элементов, представленных в виде констант, переменных, строковых или числовых выражений, или функцией TAB и разделяемых запятой или точкой с запятой. |
Оператор PRINT без списка аргументов выводит строку пробелов.
Если элементом списка является выражение, БЕЙСИК вычисляет его и печатает результат.
Пример:
10 A1=25\A2=35 20 PRINT "A1+A2=";A1+A2
Результат, выводимый на терминал:
A1+A2=60
В строке 20 строковая константа отделяется от выражения точкой с запятой. Это позволяет печатать результат рядом с символьной строкой.
БЕЙСИК выполняет операцию возврата каретки и перевода строки после каждого оператора PRINT.
Строка символов, выводимая на терминал, состоит из 5 зон по 14 позиций в каждой зоне.
Когда элементы в списке оператора PRINT разделены запятыми, каждый последующий элемент печатается в следующей свободной зоне.
Если последняя зона в строке заполнена, БЕЙСИК продолжает печать с первой зоны следующей строки.
Наличие в списке оператора PRINT двух рядом стоящих запятых вызывает пропуск одной зоны.
Точка с запятой в качестве разделителя элементов списка оператора PRINT запрещает продвижение печатаемого символа.
5.1.7.1. Формат вывода чисел и символьных строк
БЕЙСИК печатает числа и строки по определённому формату.
Строки печатаются в том виде, в каком представлено строковое выражение в операторе PRINT (ограничивающие кавычки не печатаются, если строковое выражение не заключено в кавычки, то начальные и конечные пробелы не печатаются).
Пример:
PRINT 'ответ "Да" или "Нет"'
Результат работы оператора PRINT:
ответ "Да" или "Нет"
Перед отрицательным числом ставится знак минус, а перед положительным - пробел.
При печати целых чисел знак процента "%" не печатается.
Пример:
10 PRINT -4 20 PRINT 15;;;30%
Сообщение, выводимое на терминал:
-4 15 30
БЕЙСИК печатает результаты вычислений в виде десятичного числа (целого или с плавающей запятой), если эти результаты находятся в интервале (0.01;999999). В остальных случаях БЕЙСИК использует экспоненциальное представление.
Пример:
Вводимое значение |
Значение, печатаемое БЕЙСИК |
---|---|
.000789 |
7.8900E-04 |
.03 |
.03 |
888889 |
888889 |
1000000 |
1.00000E + 06 |
5.1.7.2. Функция TAB
Формат функции TAB:
[N] PRINT TAB(ЕХР) |
||
где |
N |
- номер строки; |
|
ЕХР |
- задаваемый номер позиции печати. Принимает значения от нуля до номера самой правой позиции строки терминала. |
Функция TAB позиционирует положение символа строки при печати. Оператор PRINT начинает печать с позиции, указанной аргументом функции TAB. Если указана позиция, находящаяся левее текущей, БЕЙСИК игнорирует требование функции TAB.
Пример:
10 A=123\B=45\C=6 20 PRINT TAB(5);A,TAB(15);B;TAB(23);C
Числа располагаются следующим образом:
123 45 6
БЕЙСИК игнорирует TAB (10), так как запятая требует печати в зоне, которая находится за позицией, указанной в TAB.
5.1.8. Оператор GOTO.
Оператор GOTO вызывает непосредственный переход к указанной строке с нарушением естественного порядка выполнения операторов программы.
Формат оператора GOTO:
[N] GOTO LINE NUMBER |
||
где |
N |
- номер строки; |
|
LINE NUMBER |
- номер строки, к которой осуществляется переход. |
Пример:
10 A=9\GOTO 30 20 A=A*2 30 PRINT A,A*A 40 END
Операторы выполняются в следующей последовательности:
- Присвоение переменной "A" значения 9 и переход к строке 30 (строка 10);
- Выполняется оператор PRINT (строка 30);
- Завершение программы в строке 40.
Строка 20 не выполняется.
Оператор GOTO должен быть либо единственным оператором строки, либо последним оператором многооператорной строки.
5.1.9. Оператор ON GOTO (ON THEN).
Оператор ON GOTO (ON THEN) позволяет осуществлять переход к одной из указанных строк в зависимости от значения числового выражения.
Формат оператора ON GOTO (ON THEN):
[N] ON ЕХР GOTO LINE NUM1 [,LINE NUM2,... ] |
||
[N] ON ЕХР THEN LINE NUM1 [,LINE NUM2,... ] |
||
где |
N |
- номер строки; |
|
ЕХР |
- любое допустимое арифметическое выражение; |
|
LINE NUM1,LINE NUM2,... |
- номера строк перехода. Ключевые слова GOTO и THEN взаимозаменяемы. |
При выполнении оператора ON GOTO (ON THEN) вычисляется прежде всего значение числового выражения. Целая часть его используется в качестве указателя на один из перечисленных номеров строк в списке. Если результирующее значение равно 1, передаётся управление строке, номер которой расположен первым в списке. Если значение равно 2, управление передаётся строке, номер которой записан вторым в списке и т.д. Если значение выражения меньше 1 или больше количества номеров строк в списке, БЕЙСИК печатает сообщение об ошибке.
Пример:
200 ON A GOTO 50,20,100,300
A=1 - переход к строке 50,
A=2 - переход к строке 20,
A=3 - переход к строке 100,
A=4 - переход к строке 300,
A<1 или A>4 - печатается сообщение об ошибке.
5.1.10. Операторы IF THEN и IF GOTO.
Операторы IF THEN и IF GOTO передают управление в зависимости от истинности (или ложности) выражения отношения.
Формат оператора IF THEN:
|
[N] IF REL-ЕХР THEN LINE NUMBER |
|
или |
[N] IF REL-ЕХР THEN STATEMENT |
|
где |
N |
- номер строки; |
|
REL-ЕХР |
- проверяемое условие; выражение отношения может быть как арифметическим, так и строковым; |
|
LINE NUMBER |
- номер строки, выполняемой в случае истинности условия; |
|
STATEMENT |
- оператор, подлежащий выполнению. Может быть оператор IF THEN; |
Формат оператора IF GOTO:
[N] IF REL-ЕХР GOTO LINE NUMBER |
||
где |
N |
- номер строки; |
|
REL-ЕХР |
- проверяемое условие; выражение отношения может быть как арифметическим, так и строковым; |
|
LINE NUMBER |
- номер строки, выполняемой в случае истинности условия. |
Если в операторе IF THEN (IF GOTO) после ключевого слова THEN (GOTO) следует номер строки и условие истинно, управление передаётся этой строке.
Пример:
10 INPUT C 20 IF C=0 THEN 30\PRINT C\GOTO 40 30 PRINT "C= ";C 40 END
Если в операторе IF THEN после ключевого слова THEN следует оператор и условие истинно, то выполняется оператор, следующий за THEN, и операторы, следующие за оператором IF THEN в этой строке (если они есть). Если условие ложно, то управление передаётся строке, следующей за строкой с оператором IF THEN.
Пример:
10 INPUT N 20 IF N=0 THEN PRINT "Истина";\PRINT N\GOTO 40 30 PRINT "N=";N\GOTO 50 40 PRINT "Ветка N=0" 50 END
Пример:
10 INPUT A1,A2,A3 20 IF A1>A2 THEN IF A2<A3 THEN PRINT A2;\GOTO 40 30 PRINT "Сравнения нет" 40 END
В последнем примере строка 30 выполняется, если A1 меньше или равно A2, или A2 больше или равно A3.
5.1.11. Оператор FOR и NEXT.
Операторы FOR и NEXT позволяют организовать цикл так, что БЕЙСИК автоматически проверяет условие при каждом проходе.
Формат оператора FOR:
[N] FOR VAR=EXP1 TO EXP2 [ STEP EXP3] |
||
где |
N |
- номер строки; |
|
VAR |
- управляющая переменная (индекс цикла); |
|
EXP1 |
- начальное значение индекса, любое числовое выражение; |
|
EXP2 |
- конечное значение индекса, любое числовое выражение; |
|
EXP3 |
- приращение величины индекса (шаг), может быть положительное или отрицательное числовое выражение (по умолчанию равен 1). |
Операторы FOR и NEXT используются только в паре. Оператор FOR определяет начало цикла, оператор NEXT - конец цикла.
Формат оператора NEXT:
[N] NEXT VAR |
||
где |
N |
- номер строки; |
|
VAR |
- переменная, должна совпадать с индексом цикла, указанным в операторе FOR. |
Пример:
20 FOR I = 3 TO 30 STEP 3 30 A(I) = I\PRINT A(I) 40 NEXT I
Заданное начальное значение I равно 3, и БЕЙСИК производит проверку: превосходит ли значение I конечное значение 30 или нет. Цикл выполняется, если I по значению меньше или равно 30.
Рекомендации по работе с операторами FOR и NEXT:
- если начальное значение индексной переменной больше конечного значения (при положительном шаге), цикл не выполняется;
- передавать управление внутрь цикла недопустимо.
Пример:
10 J = 5 20 FOR J = 1 TO J*4 30 NEXT J
БЕЙСИК вычисляет в строке 20 величину J*4 до присвоения переменной J значения 1. Во избежание ошибок рекомендуется использовать последовательность:
20 FOR J = 1 TO 5*4 30 NEXT J
- для строгого соблюдения количества циклов рекомендуется использовать
целые значения индексов. Это связано с двоичным представлением чисел.
БЕЙСИК допускает и такое использование:
10 FOR I = 1.5 TO 7.7 STEP 1.32
- циклы, задаваемые с помощью оператора FOR, допускается вкладывать друг в друга. Перекрытие циклов недопустимо. Вложенный цикл должен иметь собственные операторы FOR и NEXT. Внутренний цикл должен заканчиваться до окончания внешнего.
Пример:
Построение вложенных циклов |
|
Допустимое | Недопустимое |
---|---|
10 FOR I% = 1% TO 5% 20 FOR J = 0 TO 4 30 NEXT J 40 NEXT I% 5 FOR A% = 1% TO 5% 10 FOR B = 1 TO 10 15 NEXT B 20 FOR C% = 1% TO 5% 30 FOR D = 5 TO 50 STEP 5 40 NEXT D 50 NEXT C% 60 NEXT A% |
10 FOR I = 1 TO 10 20 FOR J = 2 TO 11 30 NEXT I 40 NEXT J |
5.1.12. Операторы END и STOP.
Операторы STOP и END используются для останова и завершения выполнения программы.
Формат оператора END:
[N] END |
||
где |
N |
- номер строки. |
Оператор END является последним в программе. При отсутствии операторов END и STOP оператор, выполняемый последним, завершает работу программы и закрывает все файлы.
Формат оператора STOP:
[N] STOP |
||
где |
N |
- номер строки. |
Оператор вызывает останов программы и вывод сообщения:
STOP AT LINE N (останов на строке N) READY
где N - номер строки с оператором STOP.
БЕЙСИК переходит в режим редактирования. Останов программы позволяет пользователю распечатать значения переменных, изменить их значения, то есть оператор STOP является удобным средством для отладки программ. Место и количество используемых операторов STOP в программе на языке БЕЙСИК не ограничено. Продолжить выполнение программы можно с помощью оператора GOTO в диалоговом режиме, указав номер строки, с которой необходимо продолжить программу.
Оператор STOP приостанавливает выполнение программы, но не закрывает файлы.
5.1.13. Операторы GOSUB и RETURN.
Операторы GOSUB и RETURN осуществляют связь программы с подпрограммой.
Формат оператора GOSUB:
[N] GOSUB LINE NUMBER |
||
где |
N |
- необязательный номер строки; |
|
LINE NUMBER |
- номер строки, точка входа в подпрограмму. |
Встретив в программе оператор GOSUB, БЕЙСИК передаёт управление строке подпрограммы, заданной в операторе GOSUB. Оператор выполняет подпрограмму (с заданной строки) пока не встретится оператор выхода из подпрограммы (оператор RETURN).
Формат оператора RETURN:
[N] RETURN |
||
где |
N |
- номер строки. |
БЕЙСИК организует таблицу адресов возврата. Всякий раз, когда выполняется GOSUB, БЕЙСИК помещает в таблицу адрес строки, следующий за оператором GOSUB. Таблица вмещает не более 20 адресов строк.
Пример:
Использование операторов GOSUB и RETURN.
10 PRINT "Введите коэффициенты. Сначала A, потом B,C" 20 PRINT "При A=0 программа идёт на END" 30 INPUT A 40 IF A=0 THEN 32767 50 INPUT B,C 60 IF A<>1 THEN 350 70 GOSUB 200 80 GOTO 10 200 PRINT "Уравнение вида X^2 + B*X + C=0" 210 D1 = (B/2)^2-C 220 IF D1<>0 THEN 250 230 PRINT "Имеет одно решение X= ";-B/2 240 RETURN 250 IF D1<0 THEN 280 260 PRINT "Имеет два решения X1= ";-B/2 + SQR(D1); 265 PRINT "X2= ";-B/2-SQR(D1) 270 RETURN 280 PRINT "Имеет мнимые корни X1= "; 285 PRINT -B/2;"+";SQR(-D1); "*I; "; 290 PRINT " X2= ";-B/2;"-";SQR (-D1) ;"*I" 300 RETURN 350 GOSUB 400 360 GOTO 10 400 PRINT "Уравнение вида A*X^2 + B*X + C=0" 410 D = B*B-4*A*C 420 IF D<>0 THEN 450 430 PRINT "Имеет одно решение X= ";-B/(2*A) 440 RETURN 450 IF D<0 THEN 490 460 PRINT "Имеет два решения X1 = ";(-B + SQR(D))/(2*A); 470 PRINT "; X2= ";(-B-SQR(D))/(2*A) 480 RETURN 490 PRINT "Имеет мнимые корни Х1 = "; 500 PRINT -B/(2*A);"+";SQR(-D)/(2*A);"*I"; 510 PRINT " X2= ";-B/(2*A);"-";SQR(-D)/(2*A) ;"*I" 520 RETURN 32767 END
5.1.14. Оператор ON GOSUB.
Оператор ON GOSUB используется для условной передачи управления одной из нескольких подпрограмм или к одной из нескольких входных точек подпрограмм.
Формат оператора ON GOSUB:
[N] ON ЕХР GOSUB LINE NUM1[,LINE NUM2,...] |
||
где |
ЕХР |
- любое выражение, допустимое в БЕЙСИК (кроме выражения отношения); |
|
LINE NUM1, LINE NUM2,... |
- список номеров строк перехода. |
Оператор ON GOSUB аналогичен оператору ON GOTO (см. пункт 5.1.9.).
Пример:
50 ON A + B GOSUB 200,100,20
A + B=1 - управление передаётся строке 200,
A + B=2 - управление передаётся строке 100,
A + B = 3 - управление передаётся строке 20,
A + B<1 или A + B>3 - БЕЙСИК печатает сообщение об ошибке.
Оператор ON GOSUB позволяет передавать управление в любую точку подпрограммы.
5.2. Функции
5.2.1. Допустимые типы функций
БЕЙСИК содержит набор математических (приведены в табл. 3) и строковых функций (включая функции текущей даты и времени) и позволяет пользователю создавать собственные функции.
Для обращения к функции необходимо набрать имя функции и список аргументов, заключённые в скобки (ЕХР). Количество и тип аргументов указывается в описании. Функция используется в выражениях так же, как константы и переменные.
Функция вычисляет результат и возвращает его значение. Интерпретатор продолжает вычислять значение выражения, как если бы вместо функции указали результат её действия.
В тригонометрических функциях аргумент (ЕХР) задаётся в радианах. Пользователю предлагается использовать следующую формулу преобразования:
Значение в радианах = |
Значение в градусах * PI |
180 |
Для арктангенса значение угла находится e интервале (-PI/2;PI/2).
Функция |
Значение |
---|---|
SGN(ЕХР) |
Функция знака. Результат функции: если ЕХР - положительный аргумент, то (+1); если ЕХР - отрицательный аргумент, то (-1); если ЕХР - нулевой аргумент, то 0. |
ABS(ЕХР) |
Функция "абсолютная величина". Определяет абсолютное значение аргумента ЕХР. |
INT(ЕХР) |
Целочисленная функция. Определяет целую часть ЕХР, округляя результат. |
SIN(ЕХР) |
Функция синуса. Вычисляет синус аргумента ЕХР. |
COS(ЕХР) |
Функция косинуса. Вычисляет косинус аргумента ЕХР. |
ATN(ЕХР) |
Функция арктангенса. Вычисляет арктангенс аргумента ЕХР. |
SQR(ЕХР) |
Функция квадратного корня. Вычисляет квадратный корень положительного аргумента ЕХР. |
ЕХР(ЕХР) |
Экспоненциальная функция. Вычисляет показательную функцию (E^X, где E=2,71828 ..., X<= 87). |
LOG(ЕХР) |
Функция натурального логарифма. Вычисляет натуральный логарифм аргумента ЕХР (аргумент должен быть положительным). |
LOG10(ЕХР) |
Функция десятичного логарифма. Вычисляет десятичный логарифм аргумента ЕХР (аргумент должен быть положительным). |
PI |
Возвращает постоянное значение, равное 3,1415927. Может использоваться как числовая константа. |
RND(ЕХР) |
Функция случайных чисел. Генерирует псевдослучайное число или совокупность чисел в интервале (0;1). Значение аргумента ЕХР игнорируется. Функция генерирует один и тот же список чисел при многократном выполнении. |
Пример:
Функция нахождения целой части числа.
Функцию INT можно использовать для округления до любого заданного десятичного разряда.
10 INPUT M 20 IF M= -9999 THEN 100 30 INPUT P 40 A=INT(M*10^P + 0.5)/(10^P) 50 PRINT M,P,A 100 END
В строке 10 вводится искомое число. В строке 30 вводится необходимая точность (количество знаков после запятой). В строке 40 вычисляется точность округления (P) дробной части числа.
Пример:
Тригонометрические функции.
Программа преобразует значение угла в градусах в значение угла в радианах (строка 30). Затем вычисляет и печатает (строка 60) синус, косинус и тангенс угла. А также печатает значение арктангенса величины, полученной в строке 50.
10 INPUT G 20 IF G=-9999 THEN 100 30 R=G*PI/180 40 IF ABS(COS(R))<.01 THEN 100 50 T=SIN(R)/COS(R) 60 PRINT R,SIN(R),COS(R),T,ATN(T) 100 END
Анализ программы на число -9999 (строка 20) позволяет закончить или продолжить работу программы. В строке 40 косинус аргумента проверяется на ноль, так как при вычислении тангенса деление на машинный ноль вызовет сообщение об ошибке.
Пример:
Функция натурального логарифма.
Программа вычисляет и печатает логарифмы (строка 40) по любому основанию.
10 INPUT B 20 INPUT X 30 IF X=-9999 THEN 100 40 PRINT B,X,LOG(X),LOG (X)/LOG(B) 50 GOTO 10 100 END
5.2.2. Оператор RANDOMIZE
Формат оператора RANDOMIZE:
[N] RANDOMIZE |
||
где |
N |
- номер строки. |
Оператор RANDOMIZE помещается перед первым использованием функции случайных чисел (функция RND) в программе. При выполнении функции RND оператор RANDOMIZE изменяет начальное значение случайного числа таким образом, что та же самая программа, выполняемая второй раз, даёт другие результаты. Пример:
Использование функции RND.
1) Без оператора RANDOMIZE.
10 PRINT RND,RND,RND
Результаты, выводимые на терминал, после неоднократного выполнения строки 10:
.0407319 |
.528293 |
.0803172 |
.0407319 |
.528293 |
.0803172 |
. |
. |
. |
. |
. |
. |
. |
. |
. |
2) С оператором RANDOMIZE.
5 RANDOMIZE 10 PRINT RND,RND,RND
Результаты, выводимые на терминал, после неоднократного выполнения строк 5,10:
.219321 |
.0640597 |
.410471 |
.44509 |
.741367 |
.442393 |
.668662 |
.412022 |
.454539 |
. |
. |
. |
. |
. |
. |
. |
. |
. |
Для генерации случайных чисел, находящихся в открытом интервале (A,B), используется следующее выражение:
(B-A)*RND+A
где A и B - числа задаваемого интервала.
Пример:
10 FOR I=1 TO 5 20 PRINT (7-5)*RND + 5 30 NEXT I
Результаты, выводимые на терминал:
5.08146 6.05659 6.60634 5.12878 5.31561
Оператор RANDOMIZE не рекомендуется использовать при тестировании и отладке программы.
5.2.3. Строковые функции.
Строковые функции - это функции, которые обрабатывают строковый или числовой аргумент.
Если имя функции оканчивается символом (¤), то в результате её вызова создаётся строка. Если символ (¤) отсутствует в имени функции, результатом будет целое десятичное значение.
5.2.3.1. Функция LEN.
Функция LEN определяет длину строки, то есть выдаёт количество символов в символьной строке.
Формат функции LEN:
LEN(STR) |
||
где |
STR |
- строковая константа. |
Пример:
10 A¤="ABCDEFGS" 20 PRINT LEN(A¤)
Результат, выводимый на терминал:
8
5.2.3.2. Функция TRM¤.
Функция TRM¤ возвращает заданную строку, исключая конечные пробелы.
Формат функции TRM¤:
TRM¤(STR) |
||
где |
STR |
- символьная строка. |
Пример:
10 A¤="ФУНК " 20 B¤="ЦИЯ" 30 PRINT TRM¤(A¤)+B¤
Результат, выводимый на терминал:
ФУНКЦИЯ
5.2.3.3. Функция POS.
Функция осуществляет поиск подстроки в строке.
Формат функции POS:
POS(STR1,STR2,ЕХР) |
||
где |
STR1 |
- строка, в которой осуществляется поиск; |
|
STR2 |
- подстрока; |
|
ЕХР |
- позиция символа (десятичное число), с которого начинается поиск. |
Обнаружив подстроку в строке, POS возвращает позицию первого символа подстроки, и возвращает значение, равное 0, если подстроки в строке нет.
Пример:
10 W¤="пндвтрсрдчтвптнсбтвск" 20 PRINT "введите день недели:пнд,втр,срд,чтв,"; 21 PRINT "птн,сбт,вск" 25 PRINT "при D¤='END' программа выходит на конец" 30 INPUT D¤ 40 IF D¤="END" THEN 1000 50 IF LEN(D¤)<>3 THEN 100 60 D=(POS(W¤, D¤,1)+2) /3 70 IF D<>INT(D) THEN 100 80 PRINT D¤;;D;"-й день недели" 90 GOTO 20 100 PRINT "введите ещё раз"/GOTO 30 1000 END
В этой программе функция POS используется для установления соответствия наименования дня недели его порядковому номеру.
Предполагаемые ситуации при использовании функции POS:
- подстрока (STR2) пустая, а строка (STR1) не пустая, функция возвращает длину строки плюс 1, если в ЕХР номер позиции больший, чем исходная строка; и возвращает значение выражения ЕХР, если ЕХР меньше, чем количество символов в искомой строке;
- строка (STR1) пустая, а подстрока (STR2) не пустая, функция возвращает 0;
- значение выражения (ЕХР) меньше 1, функция начинает поиск с первого символа;
- значение выражения (ЕХР) больше длины строки (STR1), а подстрока (STR2) не пустая, функция возвращает 0.
5.2.3.4. Функция SEG¤.
Функция выделяет подстроку в пределах символьной строки.
Формат функции SEG¤:
SEG¤(STR,EXP1,EXP2) |
||
где |
STR |
- строка символов; |
|
EXP1 |
- позиция первого копируемого символа; |
|
EXP2 |
- позиция последнего копируемого символа. |
Пример:
10 PRINT SEG¤("ПОДСТРОКА",4,9)
Результат, выводимый на терминал:
СТРОКА
Предполагаемые ситуации при работе с функцией SEG¤: Задаваемое значение EXP1 меньше 1, БЕЙСИК считает его равным 1;
EXP1 больше EXP2 или длины строки, функция возвращает нуль-строку (пустая строка);
EXP2 больше длины строки, функция возвращает всю строку;
EXP1 равно EXP2, функция возвращает один символ.
5.2.3.5. Функции даты (DAT¤) и времени (CLK¤).
Функция даты DAT¤ возвращает текущую дату в виде:
NN-МММ-YY |
||
где |
NN |
- две цифры месяца; |
|
МММ |
- три буквы месяца; |
|
YY |
- две последние цифры года. |
Функция даты имеет вид: DAT¤
Функция времени CLK¤ возвращает текущее время в виде:
TT-MM-SS |
||
где |
ТТ |
- часы; |
|
ММ |
- минуты; |
|
SS |
- секунды. |
Функция времени имеет вид: CLK¤
5.2.3.6. Функции преобразования
БЕЙСИК содержит набор строковых функций (приведены в табл. 4) преобразования символов в соответствующий код КОИ-7 и наоборот.
Функция |
Значение |
---|---|
ASC(STR) |
Возвращает значение символа в коде КОИ-7. Строка STR должна содержать один символ и не должна быть пустой. Пример: PRINT ASC("X") 88 |
CHR¤(ЕХР) |
Возвращает строку из одного символа. Значение ЕХР может иметь вид (N+128), где N - десятичное значение кода КОИ-7 в пределах от 0 до 127. Однако символы вида CHR¤(N) и CHR¤ (N+128), не эквивалентны, хотя и являются одним и тем же символом в таблице КОИ-7. |
VAL(STR) |
Возвращает числовое значение, заданное строкой. Строка должна иметь вид числовой константы. Пример: PRINT VAL("15.3E-2") 0.153 |
STR¤(ЕХР) |
Возвращает значение выражения в виде строки без промежуточных, начальных и конечных пробелов. Пример: PRINT STR¤(" 2 + 3 ") 5 |
BIN(STR) |
Возвращает целое десятичное значение двоичного числа, представленного строкой. STR может быть нулём, единицей и пробелом. Пробел игнорируется при вводе. Пример: 10 PRINT BIN('100 101 001') 297 |
OCT(STR) |
Возвращает целое десятичное значение восьмеричного числа, представленного строкой. STR содержит цифры 0-7 и пробел. Пробел игнорируется при вводе. Пример: 10 PRINT OCT("451") 297 |
5.2.4. Функции, определяемые пользователем.
Чтобы избежать неоднократного повторения одной и той же последовательности операторов или одних и тех же математических формул в различных точках программы, БЕЙСИК позволяет вводить функции, составленные на языке БЕЙСИК самим пользователем, и определять их.
Имена функций начинаются буквами FN. Третья буква - любая латинская, за которой следует знак "%" или знак "¤". Затем в круглых скобках следует список переменных (количество от 1 до 5) и через знак "=" располагается вычисляемое выражение.
Функции могут определяться в любом месте программы с помощью оператора DEF.
Формат оператора DEF:
% DEF FNL[¤](LIST)=ЕХР |
||
где |
L |
- любая латинская буква; |
|
% |
- функция возвращает целое значение; |
|
¤ |
- функция возвращает строку; |
|
LIST |
- список переменных, которые могут быть целыми, вещественными или строковыми; |
|
ЕХР |
- вычисляется при каждом использовании функции и может использовать переменные, которые не входят в LIST. |
Если знаки "%" и "¤" отсутствуют, функция возвращает вещественное значение.
Тип выражения должен соответствовать типу функции. Если ЕХР вещественное выражение, а имя функции целого типа (или наоборот), то БЕЙСИК приводит значение выражения к типу, заданному именем функции.
При обращении к функции интерпретатор вычисляет значение выражения в операторе DEF, заменяя фиктивные переменные функции в операторе DEF соответствующими значениями из списка выражений в обращении к функции.
Пример:
10 DEF FNA(X,Y)=X^2 + Y^2 20 INPUT A,B 30 PRINT FNA(A,B)
ПРИМЕЧАНИЯ:
- Тип и количество используемых переменных должны соответствовать переменным из LIST оператора DEF.
- Аргумент функции может отсутствовать.
Пример:
10 DEF FNA=X^2 20 R=FNA()
- Одна и та же функция определяется оператором DEF один раз.
- Оператор DEF используется только в программном режиме.
6. ВВОД - ВЫВОД ДАННЫХ
БЕЙСИК позволяет вести обработку файлов данных двух типов: с последовательным доступом и с прямым доступом.
Перед обращением к файлу данных его необходимо открыть, то есть связать файл с номером канала. Для этого используется оператор OPEN.
При завершении работы с файлом его необходимо закрыть, то есть отключить от канала. Для этого используется оператор CLOSE.
6.1. Оператор OPEN.
Оператор OPEN связывает номер канала ввода - вывода с именем определённого файла.
Формат оператора OPEN:
|
[N] OPEN STR FOR INPUT AS FILE [#]EXP1 |
|
или |
[N] OPEN STR FOR OUTPUT AS FILE [#]EXP1 |
|
где |
N |
- номер строки; |
|
STR |
- спецификация файла; |
|
EXP1 |
- номер канала ввода - вывода; константа в диапазоне (1-12). |
Оператор FOR INPUT открывает существующий файл для считывания информации в память.
Оператор FOR OUTPUT создаёт новый файл. Если на устройстве существует файл с тем же именем, он уничтожается.
К концу оператора могут добавляться следующие параметры:
[DOUBLE BUF] [,FILESIZE EXP1] |
||
где |
DOUBLE BUF |
- дополнительный оператор; определяет наличие места в памяти для организации второго буфера; |
|
FILESIZE EXP1 |
- определяет область в блоках для выходного файла на диске. |
6.2. Оператор CLOSE.
Оператор CLOSE закрывает определённый логический файл.
Формат оператора CLOSE:
CLOSE [[#]EXP1,[#]EXP2,[#]EXP3,... ] |
||
где |
EXP1,EXP2,... |
- логические номера, связанные с открываемыми файлами. |
Оператор CLOSE без определённой спецификации закрывает все открытые файлы. После закрытия выходные файлы становятся постоянными.
Операторы CHAIN, END или выполнение строки с наибольшим номером закрывает файл.
Пример:
10 B = 10 20 CLOSE #3, B-2, B + 1, B
При выполнении строки 20 закрываются файлы, связанные с логическими номерами 3, 8, 11, 10.
6.3. Файл с последовательным доступом.
Файл с последовательным доступом открыт либо для ввода, либо для вывода операторами OPEN FOR INPUT и OPEN FOR OUTPUT соответственно, но не одновременно. Если файл открыт для ввода, он считается оператором INPUT # и LINPUT #. Если он открыт для вывода, то будет считываться оператором PRINT #.
Оператор OPEN без FOR INPUT или FOR OUTPUT открывает файл для считывания из него, если файл существует, и для формирования нового, если он отсутствует.
6.3.1. Операторы INPUT # и LINPUT #.
Оператор INPUT # считывает файл, открытый оператором OPEN FOR INPUT.
Формат оператора INPUT #:
N INPUT # ЕХР,VAR1[,VAR2,VAR3,... ] |
||
где |
N |
- номер строки; |
|
ЕХР |
- номер канала, связанного с файлом; |
|
VAR1,VAR2,... |
- элементы данных, которым присваиваются вводимые значения. |
Оператор LINPUT # считывает символьную строку из файла.
Формат оператора LINPUT #:
N LINPUT # ЕХР,STR-VAR1 [,STR-VAR2,STR-VAR3,...] |
||
где |
N |
- номер строки; |
|
ЕХР |
-номер канала, связанного с файлом; |
|
STR-VAR1,STR-VAR2,... |
-строковые переменные. |
При считывании файла данных необходимо придерживаться тех же синтаксических правил, как если бы ввод выполнялся с терминала. Числовые данные должны быть разделены запятыми или управляющим символом <ВК>.
6.3.2. Оператор PRINT #.
Оператор PRINT # помещает данные в определённый файл.
Формат оператора PRINT #:
N PRINT # ЕХР[,LIST] |
||
где |
N |
- номер строки; |
|
ЕХР |
- номер канала, связанного с файлом; |
|
LIST |
- список элементов, представленных в виде числовых и строковых выражений, или функцией TAB, и разделяемых запятой или точкой с запятой. |
Оператор PRINT # без списка аргументов не помещает строку пробелов в файл.
ПРИМЕЧАНИЕ. В операторах INPUT #, LINPUT #, PRINT # значение ЕХР не должно быть равным нулю; после ЕХР в качестве разделителя можно ставить символ ":".
6.3.3. Оператор PRINT USING.
Оператор PRINT USING печатает результаты работы программы в установленном формате.
Формат оператора PRINT USING:
PRINT [#ЕХР,] USING STR,LIST |
||
где |
ЕХР |
- номер канала ввода - вывода, связанного с файлом; |
STR |
-строковая константа (формат); управляет печатью списка LIST; |
|
|
LIST |
- список выводимых элементов. |
В форматной строке STR могут быть обычные символы и символы управления форматом печати. Обычные символы печатаются в идентичной форме. Символы управления форматом печати определены двумя типами полей: числовыми и строковыми.
Пример:
40 PRINT USING "формат: ###.#", 15.1
Сообщение, выводимое на терминал:
Формат: 15.1
6.3.3.1. Числовые поля
Поле чисел указывается в форматной строке символом # и выравнивается по правому краю. Расположение десятичной точки определяется символом '.'. Производится округление (не усечение) чисел, если это необходимо.
Пример:
30 PRINT USING "###.##", 12.345 40 PRINT USING "##.###", 10.55 50 PRINT USING "#####", 142 60 PRINT USING ".###",0.444 70 PRINT USING "задание:##",2
Сообщение, выводимое на терминал:
12.35 10.550 142 .444 задание: 2
Если числовое поле в форматной строке меньше выводимого по этому формату элемента, БЕЙСИК печатает знак % и выводит значение элемента списка, не принимая во внимание поле формата. Если в поле числа указано больше знакомест, чем имеется в числе, после последней значащей цифры проставляются нули.
Пример:
40 PRINT USING "##", 100
Сообщение, выводимое на терминал:
% 100
Для более гибкого управления печатью чисел используются специальные символы:
1) символ "**".
Если числовое поле в форматной строке начинается со звёздочек **, любые неиспользованные знакоместа в поле формата заполняются звёздочками. Отрицательные числа не могут выводиться с помощью заполнения звёздочками, если знак не выводится после числа.
Пример:
10 A = 27.95 \ B = 107.50 \ C = 1007.50 20 PRINT USING "**##.##",A, B, C
Сообщение, выводимое на терминал:
**27.95 *107.50 1007.50
2) Символ возведения в степень "^".
Если число представляется в экспоненциальном формате, то за полем числа в форматной строке следует последовательность символов ^^^^ (четыре).
Пример:
10 PRINT USING "##.#^^^^",1 20 PRINT USING "##.#^^^^",300
Сообщение, выводимое на терминал:
10.0Е-01 30.0E+01
Символы "^^^^" нельзя использовать в поле числа с начальными символами ** и ¤¤ и с конечным знаком минус.
3) Конечный знак минус.
Если поле числа в форматной строке завершается знаком минус, знак выводимого числа печатается позади числа. Пример:
10 PRINT USING "###.#-",5 20 PRINT USING "###.#-", -10.5
Сообщение, выводимое на терминал:
5.0 10.5-
4) Символ "¤".
Если поле числа начинается с символов ¤¤, перед первой цифрой числа выводится символ ¤. Символы ¤¤ резервируют два знакоместа: первое - для символа ¤. Действие второго символа ¤ эквивалентно указанию дополнительного символа # в форматной строке. Отрицательные числа не могут выводиться с помощью плавающего символа ¤, если знак не выводится после числа.
Пример:
10 PRINT USING "¤¤##.#-",-5.35 20 PRINT USING "¤¤##.#", 305 30 PRINT USING "¤¤##.#", 10001.1
Сообщение, выводимое на терминал:
¤5.4- ¤305.0 % 1001.1
5) Символ ",".
Если в поле числа, слева от десятичной точки (в любой позиции), поместить символ ",", то запятая включается через каждые три цифры слева от десятичной точки. Символ "," справа от десятичной точки считается печатным символом.
Пример:
10 PRINT USING "#,###.#",5625.34 20 PRINT USING "###.#,#",46.375 30 PRINT USING "####,#",17580
Сообщение, выводимое на терминал:
5,625.3 46.4, 17,580
6.3.3.2. Строковые поля.
Строковые поля при печати могут быть выровнены слева или справа, или расположены по центру строкового поля форматной строки. Если символов в строке больше, чем резервируется позиций, строка усекается.
Символы управления печатью для строковых полей следующие:
1) Апостроф "'".
Резервирует место для одного символа; является признаком начала строкового поля, за которым следует одна из букв: L, R, C и E (употребление этих букв описано ниже).
Пример:
10 PRINT USING "'", "НЕТ"
Сообщение, выводимое на терминал:
Н
2) Символ "L".
Выравнивает строку влево, резервирует место для одного символа.
Пример:
10 PRINT USING "'LL","A" 20 PRINT USING "'LLLLL","ABCDEKLMN" 30 PRINT USING "'LLL","ДA"
Сообщение, выводимое на терминал:
A ABCDEK ДА
3) Символ "R".
Выравнивает строку вправо, резервирует место для одного символа.
Пример:
10 PRINT USING "'RRRRR","A" 20 PRINT USING "'RRRRR","ABCDEKLMN" 30 PRINT USING "'RRRRR","ДA"
Сообщение, выводимое на терминал:
A ABCDEK ДА
4) Символ "C".
Печатает строку по центру строкового поля форматной строки, резервирует место для одного символа.
Пример:
10 PRINT USING "'ССССС","A" 20 PRINT USING "'ССССС","АВ" 30 PRINT USING "'ССССС","АВС" 40 PRINT USING "'CCCCC","ABCD" 50 PRINT USING "'CCCCC","ABCDE"
Сообщение, выводимое на терминал:
A АВ АВС ABCD ABCDE
5) Символ "E".
Выравнивает строку влево, расширяет поле (если необходимо напечатать всю строку), резервирует место для 1 символа. Если в строковом поле зарезервировано меньше символов, чем в символьной строке, БЕЙСИК расширяет поле и печатает всю строку.
Пример:
Использование символов управления печатью для строковых полей.
40 READ A¤ 50 F¤ = "::'CCCC::'EEEE::'LLLL::'RRRR::" 60 IF A¤ = "" GOTO 100 70 PRINT USING F¤,A¤, A¤, A¤, A¤ 80 GOTO 40 90 DATA "ABCD","ABCDEFG","A" 95 DATA "AB","" 100 END
Сообщение, выводимое на терминал:
::ABCD ::ABCD ::ABCD :: ABCD:: ::ABCDE::ABCDEFG::ABCDE::ABCDE:: :: A ::A ::A ::A :: :: АВ ::АВ ::АВ ::АВ ::
6.3.3.3. Общий вид форматной строки
В форматной строке оператора PRINT USING может быть несколько полей (числовых и строковых) одновременно. Пример:
30 A% = 13\B% = 12\A¤ = "МАТЕМ." \ B¤ = "СТРОК." 40 F¤ = "ФУНКЦИЙ:### ’RRRRR AND ## 'RRRR" 50 PRINT USING F¤,A%,A¤,B%,B¤
Сообщение, выводимое на терминал:
ФУНКЦИЙ: 13 MATEM. И 12 СТРОК.
Пример:
40 OPEN "LP:" FOR OUTPUT AS FILE #1 50 A¤ = "АВС"\ B¤ = "12" 60 PRINT #1, USING "ИМЕЕТСЯ:'RRRR>'LL",A¤,B¤
В файл по каналу 1 печатается:
ИМЕЕТСЯ: ABC>12
6.3.3.4. Ошибки при работе с оператором PRINT USING
При работе с оператором PRINT USING могут возникнуть два вида ошибок: неустранимые и устранимые.
Фатальная ошибка прекращает работу оператора и БЕЙСИК выдаёт сообщение:
?PRINT USING ERROR(?PRU).
Условия возникновения неустранимой ошибки:
- недопустимый формат;
- неверное построение полей в форматной строке;
- несоответствие типа поля элементу списка;
- печать отрицательного числа в поле с начальными символами ** и ¤¤ в случае, когда конечный знак минус не задан;
- элементы списка разделены символами, отличными от запятой или точки с запятой.
При возникновении устранимой ошибки, работа оператора PRINT USING продолжается, но результат выполнения может оказаться неверным.
Условия возникновения устранимой ошибки:
- число знакомест элемента списка больше числа знакомест, указанного в поле формата;
- поле формата содержит недопустимую комбинацию символов;
- обычные символы представляют собой одно из допустимых полей форматной строки.
6.3.4. Оператор IF END #.
Оператор IF END # передаёт управление на строку с соответствующим номером либо оператору при обнаружении признака конца файла с последовательным доступом.
Формат оператора IF END # THEN:
|
N IF END [#]ЕХР THEN LINE NUMBER |
|
или |
N IF END [#]ЕХР THEN STATEMENT |
|
где |
N |
- номер строки; |
|
ЕХР |
- номер канала, связанного с файлом. |
|
LINE NUMBER |
- номер строки, выполняемой в случае истинности условия; |
|
STATEMENT |
- оператор, подлежащий выполнению. |
Формат оператора IF END # GOTO:
N IF END [#]ЕХР GOTO LINE NUMBER |
||
где |
N |
- номер строки; |
|
ЕХР |
- номер канала, связанного с файлом; |
|
LINE NUMBER |
- номер строки, выполняемой в случае истинности условия. |
Признак конца файла с последовательным доступом обнаруживается, если в файле больше нет данных.
6.3.5. Оператор RESTORE #.
Оператор RESTORE # устанавливает указатель считывания файла в начальную позицию.
Формат оператора RESTORE #:
N RESTORE #ЕХР |
||
где |
N |
- номер строки; |
|
ЕХР |
- номер канала, связанного с файлом. |
6.3.6. Использование файлов данных с последовательным доступом
Пример:
10 OPEN "FIL1" FOR OUTPUT AS FILE #1 20 READ A¤, B, C% 30 IF A¤ = "" THEN GOTO 60 40 PRINT #1, A¤;",";B;",";C% 50 GOTO 20 60 CLOSE #1 110 IF END #4 GOTO 160 120 INPUT #4,A¤,B,C% 130 PRINT A¤,B,C% 140 GOTO 110 160 PRINT "конец файла" 170 DATA "K1",5.2,5,"K2",6.2,6 180 DATA "K3",7.2,7,"K4",8.2,8 190 DATA "",0,0 200 CLOSE #4 210 END
6.4. Файлы с прямым доступом. Оператор DIM #
Оператор OPEN без FOR INPUT и FOR OUTPUT аналогичен оператору OPEN FOR INPUT.
Оператор DIM #, используемый с оператором OPEN, определяет файл данных как файл с прямым доступом.
Формат оператора DIM #:
N DIM #EXP1,VAR(EXP2[,EXP3]) [=EXP4] |
||
где |
N |
- номер строки; |
|
EXP1 |
- номер канала, связанного с файлом; |
|
VAR |
- переменная, определяющая массив; |
|
EXP2,EXP3 |
- индексы массива VAR; |
|
EXP4 |
- максимальная длина символьных строк строкового массива. |
Пример:
10 DIM #2%,AB¤(10) = 128 20 OPEN "NAME" FOR INPUT AS FILE #2
Пример:
10 DIM #1%,A(10,10) 20 OPEN "FILE" AS FILE #1
6.5. Оператор NAME TO.
Оператор NAME TO изменяет имя файла.
Формат оператора:
NAME STR1 TO STR2 |
||
где |
STR1 |
- спецификация файла, подлежащего изменению; |
|
STR2 |
- новая спецификация файла. |
Если в STR1 указано устройство, то в STR2 должно быть указано это же устройство.
6.6. Оператор KILL.
Оператор KILL удаляет определённый файл.
Формат оператора:
[N] KILL STR |
||
где |
N |
- номер строки; |
|
STR |
- спецификация удаляемого файла. |
Пример:
Использование файла с прямым доступом.
10 DIM #3%,V(20) 20 OPEN "RANDOM" AS FILE #3% 30 FOR I% = 0% TO 10% 40 PRINT V%(I%) 50 NEXT I% 60 CLOSE #3% 70 END
6.7. Файлы программ БЕЙСИК
6.7.1. Оператор CHAIN.
Оператор CHAIN сегментирует программу, сохранённую в файле на диске.
Формат оператора CHAIN:
[N] CHAIN STR [LINE ЕХР] |
||
где |
N |
- номер строки; |
|
STR |
- спецификация вызываемого файла (сегмента программы); |
|
ЕХР |
- номер строки, с которой начинается выполнение сегмента программы. |
При выполнении оператора CHAIN все открытые файлы закрываются, загружается новый сегмент программы и выполнение продолжается.
Переменные и массивы теряют свои значения, если они не указаны в списке оператора COMMON (описание оператора приведено ниже).
Если ЕХР равен нулю, выполнение начинается с оператора с наименьшим номером.
При работе оператора могут возникнуть следующие ошибки:
?FILE NOT FOUND (?FNF)
(файл не обнаружен);
?SYNTAX ERROR (?SYN)
(недопустимый номер строки, указанный в операторе CHAIN);
?UNDEFINED LINE NUMBER? (?ULN)
(несуществующий номер строки, указанный в операторе CHAIN);
6.7.2. Оператор COMMON.
Оператор COMMON передаёт данные в памяти между сегментами программ.
Формат оператора COMMON:
N COMMON LIST |
||
где |
N |
- номер строки; |
|
LIST |
- список переменных и массивов. |
Необходимо соблюдать следующие правила:
- последовательность списка в операторе COMMON должна быть одинакова у всех вызываемых сегментов программ;
- массивы, указанные в операторе COMMON, не должны определяться в операторе DIM;
- число элементов списка не должно превышать 255.
При работе оператора COMMON могут возникнуть следующие ошибки:
?ТОО MANY ITEMS IN COMMON (?TIC)
(число элементов списка превышает 255);
?ILLEGAL DIMENSION (?IDM)
(массив, указанный в списке COMMON, также определён в операторе DIM);
Пример:
Использование операторов CHAIN и COMMON.
Сегмент 1.
10 COMMON A(20) 20 FOR I = 1 TO 10 30 A(I) = I 40 NEXT I 50 CHAIN "SEG2"
Сегмент 2.
10 COMMON A(20) 20 FOR I = 1 TO 10 30 PRINT A(I) 40 NEXT I 50 END
6.7.3. Оператор OVERLAY.
Оператор OVERLAY объединяет программу в памяти с программой, хранимой в определённом файле на устройстве файловой структуры.
Формат оператора OVERLAY:
N OVERLAY STR [LINE ЕХР] |
||
где |
N |
- номер строки; |
|
STR |
- спецификация файла (сегмента программы); |
|
ЕХР |
- номер строки, с которой начинается выполнение программы. |
Характеристика оператора OVERLAY:
- строки вызываемой программы заменяют строки программы в памяти, если их номера совпадают;
- все массивы и переменные сохраняют свои значения;
- все открытые файлы остаются открытыми;
- программа продолжается с указанной строки (если используется оператор LINE) или со строки, следующей за той, которая вызвала оператор OVERLAY.
- вызываемая программа не должна содержать операторы DIM, DEF.
Пример:
Программа находится в памяти (головная программа).
10 DIM A(20) 12 T=5 15 OPEN "LP:" FOR OUTPUT AS FILE #1 20 FOR I = 1 TO 5 25 A(I) = I 30 T = T+A(I) 35 PRINT #1,T 40 NEXT I 50 CLOSE 90 OVERLAY "OVL" LINE 10 100 END
Сегмент "OVL".
10 PRINT #1\PRINT #1 20 FOR I = 1 TO 10 25 A(I)=I*I
6.7.4. Оператор CALL.
Оператор CALL вызывает программу, написанную на языке Ассемблер.
Формат оператора CALL:
[N] CALL NAME [(LIST)] |
||
где |
N |
- номер строки; |
|
NAME |
- имя вызываемой программы (строковая константа); |
|
LIST |
- список аргументов для вызываемой программы. |
БЕЙСИК возвращает результат выполнения оператора через аргументы, за исключением элементов файлов с прямым доступом.
Пример:
50 CALL "FIL1"(A%, A¤, C(9))
7. СРЕДСТВА ОТЛАДКИ. КОМАНДА ЗАПУСКА ПРОГРАММЫ
Интерпретатор БЕЙСИК работает с командами трёх типов:
- команды редактирования;
- команды работы с файлами программ;
- команды клавиатуры.
7.1. Команды редактирования
7.1.1. Команды LIST и LISTNH
Команда LIST распечатывает на терминал программу, находящуюся в памяти.
Формат команды LIST:
LIST [LIN.NUM][-LIN.NUM] |
||
где |
LIN.NUM-LIN.NUM |
- номера строк. |
Способы использования команды:
LIST |
- распечатка всей программы; |
LIST LIN.NUM |
- распечатка указанной строки; |
LIST-LIN.NUM |
- распечатка программы от начала до указанной строки; |
LIST LIN.NUM-LIN.NUM |
- распечатка программы между указанными строками; |
LIST LIN.NUM- |
- распечатка программы от указанной строки до конца программы. |
Команда LISTNH аналогична команде LIST, но при распечатке программы не выводится заголовок.
7.1.2. Команды RUN и RUNNH.
Запуск программ в памяти.
Команда RUN запускает программу для выполнения.
Формат команды RUN:
RUN [STR] |
||
где |
STR |
- спецификация файла. |
Если задана спецификация файла, то сначала производится чтение файла с внешнего носителя, а затем её запуск.
Если спецификация файла не задана, то загрузка с внешнего носителя не производится. В этом случае предполагается, что программа находится в оперативной памяти. По этой команде система выводит заголовок программы, который состоит из имени программы, текущей даты и времени системы.
Команда RUNNH аналогична команде RUN. Она отличается тем, что не выводит заголовка программы.
7.1.3. Команда DEL.
Команда DEL исключает одну или более строк текущей программы.
Формат команды DEL:
DEL [LIN.NUM][-LIN.NUM] |
||
где |
LIN.NUM-LIN.NUM |
- номера строк. |
Способы использования команды:
DEL |
- исключает всю программу; |
DEL LIN.NUM |
- исключает строку с указанным номером; |
DEL -LIN.NUM |
- исключает часть программы от начала программы до указанной строки; |
DEL LIN.NUM-LIN.NUM |
- исключает часть программы между указанными строками; |
DEL LIN.NUM- |
- исключает часть программы от указанной строки до конца программы. |
Для исключения одной строки следует набрать номер этой строки.
7.1.4. Команда NEW.
Команда NEW очищает содержимое памяти и присваивает имя программе, которая будет загружаться.
Формат команды NEW:
NEW [NAME] |
||
где |
NAME |
- имя новой программы. |
Если набрана команда NEW, БЕЙСИК печатает:
NEW FILE NAME --
Пользователь должен указать имя программы, загружаемой в память, или нажать клавишу <ВК>. В этом случае имя загружаемой программы будет NONAME.
7.1.5. Команда SCR.
Команда SCR очищает содержимое памяти и присваивает имя NONAME программе, которая будет загружаться.
Фермат команды SCR:
SCR
7.1.6. Команда CLEAR.
Команда очищает содержимое массивов и строковых буферов пользователя. Имя программы не изменяется.
Формат команды CLEAR:
CLEAR
7.2. Команды для работы с файлами программ
7.2.1. Команда SAVE.
Команда SAVE сохраняет программу, находящуюся в памяти, в коде КОИ-7.
Формат команды SAVE:
SAVE [STR] |
||
где |
STR |
- спецификация файла. |
Если спецификация файла отсутствует, команда сохраняет программу на диске с текущим именем.
Пример:
Получение листинга текущей программы.
SAVE LP:
Пример:
Вывод программы, находящейся в памяти, на перфоленту.
SAVE PC:
7.2.2. Команда REPLACE.
Команда REPLACE аналогична команде SAVE. Но команда REPLACE заменяет файл, ранее созданный командой SAVE на устройстве файловой структуры. Если файла, который заменяется, нет на устройстве файловой структуры, возникает ошибка.
Формат команды REPLACE:
REPLACE [STR] |
||
где |
STR |
- спецификация файла. |
7.2.3. Команда OLD.
Команда OLD загружает программу, сохранённую командой SAVE, в память.
Формат команды OLD:
OLD [STR] |
||
где |
STR |
- спецификация файла. |
Если спецификация файла отсутствует, БЕЙСИК выдаёт сообщение:
OLD FILE NAME--
Пользователь должен указать имя файла, вызываемого в память, или нажать клавишу <ВК>. В этом случае БЕЙСИК загружает программу с именем NONAME.
7.2.4. Команда APPEND.
Команда APPEND загружает программу, сохранённую командой SAVE, и объединяет её с текущей программой.
Формат команды APPEND:
APPEND [STR] |
||
где |
STR |
- спецификация файла. |
Если обе программы содержат идентичный номер строки, строка в памяти заменяется строкой добавленной программы.
При отсутствии спецификации файла, БЕЙСИК выдаёт сообщение:
OLD LINE NAME--
7.2.5. Команда RUN.
Запуск программы из файла на устройстве файловой структуры
Команда RUN загружает в память программу из указанного файла и выполняет её.
Формат команды RUN:
RUN STR |
||
где |
STR |
- спецификация файла. |
7.2.6. Команда UNSAVE.
Команда UNSAVE удаляет файл с внешнего запоминающего устройства.
Формат команды UNSAVE:
UNSAVE STR |
||
где |
STR |
- спецификация файла. |
7.2.7. Команда RENAME.
Команда RENAME изменяет имя программы, находящейся в памяти.
Формат команды RENAME:
RENAME [FILNAME] |
||
где |
FILNAME |
- имя файла. |
При отсутствии спецификации файла БЕЙСИК выдаёт сообщение:
NEW FILE NAME--
Пользователь должен указать имя файла или нажать клавишу <ВК>. В этом случае новое имя программы будет NONAME.
7.2.8. Команда COMPILE.
Команда COMPILE компилирует программу, находящуюся на устройстве файловой структуры, и сохраняет её на этом устройстве.
Формат команды COMPILE:
COMPILE STR |
||
где |
STR |
- спецификация исходного файла. |
Если спецификация файла отсутствует, команда COMPILE компилирует программу, находящуюся в памяти, и сохраняет её на системном устройстве файловой структуры.
7.2.9. Команда SUB.
Команда SUB редактирует строку текущей программы.
Формат команды SUB:
SUB LIN.NUMXSTR1XSTR2[X[N]] |
||
где |
LIN.NUM |
- номер строки для редактирования; |
|
X |
- символ-ограничитель; |
|
STR1 |
- последовательность заменяемых символов; |
|
STR2 |
- последовательность вновь вводимых в строку символов; |
|
N |
- число; N-ое появление STR1 в редактируемой строке. |
Ограничитель может быть любым символом (за исключением пробела, табуляции и цифр), допустимым в языке БЕЙСИК.
Ограничитель не должен встречаться в STR1 и STR2. Пример:
10 A = B\C¤ = 0 -редактируемая строка; SUB 10@0@O@2 <ВК> 10 A = B\C¤ = O -отредактированная строка.
Пример:
50 PRINT "неверный символ"; -редактируемая строка; SUB 50@Е@и@3 50 PRINT "неверный символ"; -строка отредактирована.
7.2.10. Команда RESEQ.
Команда RESEQ перенумеровывает строки программы, находящиеся в памяти.
Формат команды RESEQ:
RESEQ [LIN.NUM1],[LIN.NUM2][-LIN.NUM3][,ЕХР] |
||
где |
LIN.NUM1 |
- новый номер строки, взамен старого; |
|
LIN.NUM2-LIN.NUM3 |
- номера строк, с которых начинается перенумерация; |
|
ЕХР |
- шаг приращения номеров строк. |
Пример:
110 FOR I = 1 TO 5 120 INPUT C 130 A = A + C 140 IF C=0 THEN 160 145 PRINT A 150 NEXT I 160 END RESEQ 10,110-160,10 10 FOR I = 1 TO 5 20 INPUT C 30 A = A + C 40 IF C = 0 THEN 70 50 PRINT A 60 NEXT I 70 END
Способы использования команды RESEQ:
- если LIN.NUM1 отсутствует, он принимается
равным ближайшему номеру перед LIN.NUM2 плюс
приращение.
Пример:
10 INPUT A 110 PRINT A 120 END RESEQ 110-120,10 10 INPUT A 20 PRINT A 30 END
- если LIN.NUM2 отсутствует, нумерация строк производится с первой по LIN.NUM3;
- если LIN.NUM3 отсутствует, нумерация строк производится с LIN.NUM2 до конца программы;
- если ЕХР отсутствует, приращение считается равным 10.
7.2.11. Команда LENGTH.
Команда LENGTH позволяет пользователю определить длину программы, находящейся в памяти.
Формат команды LENGTH:
LENGTH
В ответ на набранную команду БЕЙСИК печатает:
ХХХХ WORDS USED,YYYY FREE |
||
где |
ХХХХ |
- количество слов, занимаемых программой; |
|
YYYY |
- количество свободных слов в буфере пользователя. |
7.3. Команды с клавиатуры (ключевые команды).
Ключевые команды вызываются при одновременном нажатии клавиши <СУ> и буквы, которая определяет действие, подлежащее выполнению.
7.3.1. Команда СУ/C.
Команда СУ/C вызывает прерывание выполнения команды или программы, БЕЙСИК печатает сообщение: STOP
Команда СУ/C отменяет действие команд СУ/O и СУ/S.
7.3.2. Команда СУ/O.
Команда СУ/O прекращает вывод данных на терминал, но не прерывает выполнение программы. Вывод данных на терминал возобновится, если команда СУ/O будет набрана повторно.
7.3.3. Команда СУ/S.
Команда СУ/S прекращает вывод данных на терминал и приостанавливает выполнение программы до тех пор, пока не будет набрана команда СУ/Q.
7.3.4. Команда СУ/Q.
Команда СУ/Q позволяет продолжать вывод данных на терминал после того, как он был прекращён по команде СУ/S.
7.3.5. Команда СУ/U.
Команда СУ/U удаляет набираемую строку на терминале. Строка удаляется в том случае, если не набран символ "ВК".
7.3.6. Команда RUBOUT.
Команда RUBOUT уничтожает последний печатаемый символ на терминале.
Пример:
Если предположить, что напечатано 15 FOR N = 7, а требуется напечатать: 15 FOR N = 1 TO 100, то после нажатия, клавиши RUBOUT строка будет иметь вид:
15 FOR N = 7\1 TO 100
ПРИЛОЖЕНИЕ 1
ТАБЛИЦА СИМВОЛЬНЫХ КОДОВ
КОИ-7
|
|
B |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
B |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
|
|
B |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
|
|
B |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
|
|
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
15 |
W |
W |
W |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
ПУС |
|
|
|
@ |
P |
` |
P |
ПУС |
|
SP |
0 |
@ |
P |
Ю |
П |
0 |
0 |
1 |
|
ПФ1 |
|
|
A |
Q |
А |
Я |
|
ПФ1 |
! |
1 |
A |
Q |
А |
Я |
0 |
1 |
0 |
|
ПФ2 |
|
|
B |
R |
Б |
P |
|
ПФ2 |
" |
2 |
B |
R |
Б |
P |
0 |
1 |
1 |
|
ПФЗ |
|
|
C |
S |
Ц |
С |
|
ПФЗ |
# |
3 |
C |
S |
Ц |
С |
1 |
0 |
0 |
|
ПФ4 |
|
|
D |
T |
Д |
Т |
|
ПФ4 |
¤ |
4 |
D |
T |
Д |
Т |
1 |
0 |
1 |
|
|
|
|
E |
U |
Е |
У |
|
|
% |
5 |
E |
U |
Е |
У |
1 |
1 |
0 |
|
|
|
|
F |
V |
Ф |
Ж |
|
|
& |
6 |
F |
V |
Ф |
Ж |
1 |
1 |
1 |
ЗВ |
|
|
|
G |
W |
Г |
В |
ЗВ |
|
' |
7 |
G |
W |
Г |
В |
0 |
0 |
0 |
ВШ |
АН |
|
|
H |
X |
X |
Ь |
ВШ |
АН |
( |
8 |
H |
X |
X |
Ь |
0 |
0 |
1 |
ГТ |
|
|
|
I |
Y |
И |
Ы |
ГТ |
|
) |
9 |
I |
Y |
И |
Ы |
0 |
1 |
0 |
ПС |
|
|
|
J |
Z |
Й |
З |
ПС |
|
* |
: |
J |
Z |
Й |
З |
0 |
1 |
1 |
BT |
AP2 |
|
|
K |
[ |
К |
Ш |
BT |
AP2 |
+ |
; |
K |
[ |
К |
Ш |
1 |
0 |
0 |
ПФ |
|
|
|
L |
\ |
Л |
Э |
ПФ |
|
, |
< |
L |
\ |
Л |
Э |
1 |
0 |
1 |
ВК |
|
|
|
M |
] |
M |
Щ |
ВК |
|
- |
= |
M |
] |
M |
Щ |
1 |
1 |
0 |
ВЫХ |
|
|
|
N |
^ |
Н |
Ч |
ВЫХ |
|
. |
> |
N |
^ |
Н |
Ч |
1 |
1 |
1 |
ВХ |
|
|
|
О |
_ |
О |
ЗБ |
ВХ |
|
/ |
? |
О |
_ |
О |
ЗБ |
ПРИЛОЖЕНИЕ 2
ОПЕРАТОРЫ ЯЗЫКА БЕЙСИК
CALL
|
вызывает программу, написанную на языке Ассемблера. |
CHAIN
|
сегментирует программу, сохранённую в файле на устройстве файловой структуры. |
CLOSE
|
закрывает определённый логический файл. |
COMMON
|
передаёт данные в памяти между сегментами программ. |
DATA
|
организует блок данных для считывания оператором READ. |
DEF
|
определяет функцию пользователя FNL. |
DIM
|
резервирует место в памяти для числовых или строковых данных. |
DIM #
|
определяет файл данных как файл с прямым доступом. |
END
|
определяет физический конец программы. |
FOR
|
указывает начало цикла и определяет его параметры. |
GOSUB
|
осуществляет переход к первому оператору подпрограммы. |
GOTO
|
осуществляет переход к указанной строке. |
IF THEN, |
передаёт управление в зависимости |
IF GOTO |
истинности или ложности выражения отношения. |
IF END # THEN, |
передаёт управление при обнаружении |
IF END # GOTO |
признака конца файла с последовательным доступом. |
INPUT
|
вводит данные с терминала в процессе выполнения программы. |
INPUT #
|
считывает файл, открытый оператором OPEN FOR INPUT. |
KILL
|
удаляет определённый логический файл. |
LINPUT
|
вводит строковые данные с терминала. |
LINPUT #
|
считывает строковые данные из файла, открытого оператором OPEN FOR INPUT. |
NAME TO |
изменяет имя файла. |
NEXT
|
указывает конец цикла, организованного оператором FOR. |
ON GOSUB |
передаёт управление одной из нескольких подпрограмм. |
ON GOTO, ON THEN |
передаёт управление одной из указанных строк в зависимости от значения числового выражения. |
OPEN
|
связывает номер канала ввода - вывода с именем определённого файла. |
OVERLAY
|
объединяет программу в памяти с программой, хранимой в определённом файле на устройстве файловой структуры. |
PRINT
|
выводит данные на терминал. |
PRINT #
|
помещает данные в определённый логический файл. |
PRINT[#]USING |
печатает результаты работы программы в установленном формате. |
RANDOMIZE
|
изменяет начальное значение случайного числа при выполнении функции RND. |
READ
|
считывает блок данных, организованных оператором DATA. |
REM
|
используется для ввода примечаний и комментариев в программу пользователя. |
RESET
|
эквивалентен оператору RESTORE. |
RESTORE
|
устанавливает указатель считывания данных, организованных оператором DATA, в начальную позицию. |
RESTORE #
|
устанавливает указатель считывания файла в начальную позицию. |
RETURN
|
возвращает управление оператору, следующему за последним выполненным оператором GOSUB. |
STOP
|
производит останов программы. Работа программы может быть продолжена оператором GOTO. |
ПРИЛОЖЕНИЕ 3
ФУНКЦИИ ЯЗЫКА БЕЙСИК
Математические функции |
|
---|---|
ABS(ЕХР) |
функция "Абсолютная величина". Определяет абсолютное значение аргумента ЕХР. |
ATN(ЕХР) |
функция арктангенса. Вычисляет арктангенс аргумента ЕХР. |
COS(ЕХР) |
функция косинуса. Вычисляет косинус аргумента ЕХР. |
ЕХР(ЕХР) |
экспоненциальная функция. Вычисляет показательную функцию (E^X, где E = 2.71828..., X <= 87). |
INT(ЕХР) |
целочисленная функция. Определяет целую часть ЕХР, округляя результат. |
LOG(ЕХР) |
функция натурального логарифма. Вычисляет натуральный логарифм аргумента ( ЕХР>0 ). |
LOG10(ЕХР) |
функция десятичного логарифма. Вычисляет десятичный логарифм аргумента ( ЕХР>0 ). |
PI
|
присваивает постоянное значение, равное 3.1415927. Может использоваться как числовая константа. |
RND(ЕХР) |
функция случайных чисел. Генерирует последовательность случайных чисел в интервале (0,1). |
SGN(ЕХР) |
функция знака. Результат выполнения функции: +1 - если ЕХР>0 0 - если ЕХР=0 |
SIN(ЕХР) |
функция синуса. Вычисляет синус аргумента ЕХР. |
SQR(ЕХР) |
функция квадратного корня. Вычисляет квадратный корень аргумента ЕХР (ЕХР>=0). |
TAB
|
функция табуляции. Организует выходной формат печати. |
Строковые функции |
|
ASC(STR) |
возвращает значение символа в коде КОИ-7. |
BIN(STR) |
возвращает целое десятичное значение двоичного числа, представленного строкой. |
CHR¤(ЕХР) |
возвращает строку из одного символа. |
CLK¤
|
возвращает текущее время. |
DAT¤
|
возвращает текущую дату. |
LEN(STR) |
возвращает количество символов в строке. |
OCT(STR) |
возвращает целое десятичное значение восьмеричного числа, представленного строкой. |
POS(STR1,STR2,ЕХР) |
осуществляет поиск подстроки в строке и возвращает позицию первого элемента подстроки. |
SEG¤(STR,EXP1,EXP2) |
выделяет подстроку в строке. |
STR¤(ЕХР) |
возвращает выражение в виде строки без промежуточных, начальных и конечных пробелов. |
TRM¤(STR) |
возвращает заданную строку без конечных пробелов. |
VAL(STR) |
возвращает десятичное значение числа, заданного в виде символьной строки. |
ПРИЛОЖЕНИЕ 4
КОМАНДЫ ИНТЕРПРЕТАТОРА БЕЙСИК
APPEND
|
соединяет программу, сохранённую в файле, с текущей программой в памяти. |
CLEAR
|
очищает числовые и строковые переменные, массивы. |
COMPILE
|
компилирует программу и сохраняет её на устройстве файловой структуры. |
DEL
|
исключает строки текущей программы. |
LENGTH
|
определяет длину программы и объём свободной памяти в буфере пользователя. |
LIST
|
печатает на терминал строки программы, заданные их номерами. |
NEW
|
очищает буфер пользователя и присваивает имя программе, которая будет загружаться. |
OLD
|
загружает программу из указанного файла, предварительно очищая буфер пользователя. |
RENAME
|
изменяет имя текущей программы на заданное. |
REPLACE
|
заменяет файл на устройстве файловой структуры текущей программой. |
RESEQ
|
перенумеровывает строки программы. |
RUN
|
загружает и запускает программу из указанного файла. Запускает текущую программу, если спецификация файла не указана. |
SAVE
|
сохраняет программу, находящуюся в памяти, на одном из внешних носителей. |
SCR
|
очищает буфер пользователя. |
SUB
|
редактирует строку текущей программы. |
UNSAVE
|
удаляет заданный файл с устройства файловой структуры. |