БЕЙСИК
ОПИСАНИЕ ЯЗЫКА

1. ОБЩИЕ СВЕДЕНИЯ И СПОСОБ ОПИСАНИЯ ЯЗЫКА

1.1. Назначение языка

Язык БЕЙСИК является одним из простых в изучении языков программирования.

Программа на языке БЕЙСИК представляет собой набор операторов, объединённых в логические блоки.

Диалоговый режим интерпретатора БЕЙСИК облегчает отладку программ, обмен память - внешнее устройство (и наоборот).

1.2. Условные обозначения

В данном документе используются следующие условные обозначения:

1)

[ ] - квадратные скобки

Элементы внутри скобок необязательны;

2)

Элементы из прописных латинских букв и специальных символов

Ключевые слова.

Должны указываться точно такими, какие они есть в формате.

Пример:

LET
RUN
# ;

3)

Элементы из набора латинских букв

Следуют за ключевым словом. Необходимо заменить данные элементы согласно описанию, даваемому в тексте.

В табл. 1 приведены элементы из набора латинских букв, часто встречающихся в описании формата операторов.

Таблица 1

Мнемоника

Обозначение

Смысловая нагрузка

N, NUM

Номера строк

Номера строк

ЕХР

Выражение

Допустимое в БЕЙСИК выражение. Может быть числовым или строковым

STR

Строка

Строковое выражение

LIST

Список элементов

Элементы из констант, переменных, массивов

VAR

Переменная

Вещественная, целая или строковая переменная

CONST

Константа

Вещественная, целая или строковая константа

2. ЭЛЕМЕНТЫ И ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА

2.1. Набор символов языка БЕЙСИК

Все используемые символы рассматриваются как алфавит языка БЕЙСИК. Алфавит включает:

  1. прописные (латинские) буквы от А до Z;
  2. буквы кириллицы от А до Я;
  3. цифры от 0 до 9;
  4. специальные символы:

     

    Пробел

    "

    Кавычки

    #

    Номер

    ¤

    Знак денежной единицы

    %

    Процент

    &

    Коммерческое "И"

    /

    Апостроф

    (

    Круглая скобка левая

    )

    Круглая скобка правая

    +

    Плюс

    ,

    Запятая

    .

    Точка

    /

    Дробная черта

    ;

    Точка с запятой

    Меньше

    =

    Равно

    Больше

    ?

    Вопросительный знак

    @

    Коммерческое "ЭТ"

    \

    Обратная дробная черта

    ^

    Стрелка вверх

  5. непечатаемые символы.

Буквы кириллицы могут использоваться как часть текстовой константы или буквенно-цифрового литерала. В комментариях допускается использование любых печатных символов.

2.2. Номера строк

Каждая строка программы на языке БЕЙСИК должна начинаться номером. Номера строк необходимы для:

Рекомендуется использовать номера строк с шагом 10. Это позволяет вставлять дополнительные операторы между строками.

Пример:

10 A=5
20 B=10 
30 С=А+В 
40 END

В примере присваиваются значения переменным "A" и "В", они суммируются, результат помещается в "С".

2.3. Операторы

Оператор языка БЕЙСИК в программе следует за номером строки. Оператор указывает интерпретатору, что должно быть выполнено, и как следует воспринимать данные (если они есть), следующие за этим оператором.

Операторы делятся на две группы:

  1. выполняемые операторы - определяют действия программы, указывая интерпретатору БЕЙСИК, какую операцию нужно выполнить (PRINT, GOTO, READ);
  2. невыполняемые операторы - описывают характер и упорядочение данных, позволяют вводить в программу примечания и сообщения описательного характера (DATA, REM).

В строку можно записать несколько операторов, каждый из которых (за исключением последнего) отделяется от последующего с помощью обратной дробной черты. При этом номер строки ставится только перед первым оператором. Запись заканчивается нажатием клавиши <BK>.

Пример:

10 LET A=B*C/D \ PRINT А

2.4. Пробелы и табуляция

В языке БЕЙСИК разрешается использование пробелов и знаков табуляции для удобства чтения программ.

Пример:

Использование пробелов.

Запись

10 LET A=B*2+1

читается лучше, чем

 

10LETA=B*2+1

или

 

10 L E T A = В * 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. Выполнение операторов в программном и непосредственном режимах

БЕЙСИК выполняет операторы в двух режимах; программном и непосредственном. В программном режиме каждой строке предшествует номер, указывающий последовательность её выполнения в программе. В непосредственном режиме номер строки отсутствует; оператор выполняется сразу же после нажатия клавиши <BK>.

Сообщение READY указывает на готовность системы принять информацию в непосредственном режиме. Строки можно набирать в любом порядке. БЕЙСИК размещает их в порядке возрастания номеров строк.

Для замены строки следует набрать новую строку под тем же номером.

Пример:

Старая строка

Новая строка

30 A=B+C
30 A=B*C

Для удаления строки следует набрать её номер и нажать клавишу <BK>. Удаление набираемого символа производится клавишей <ЗБ>. Отказ от набираемой строки производится нажатием СУ/U (описание приведено в п. 7.3.5).

Операторы БЕЙСИК, используемые в непосредственном режиме как команды, набираются без номера строки и называются операторами непосредственного режима.

Пример:

Строку подпрограммы 10 PRINT 4+5 БЕЙСИК поместит в память для более позднего выполнения. Но если набрать её без номера, БЕЙСИК выполнит строку и выдаст сообщение READY.

PRINT 4+5
9
READY

Разрешается запись нескольких операторов непосредственного режима в одной строке. Операторы разделяются символом "\".

Пример:

А=5\В=20\С=.3729\PRINT A*B, SIN(C)
100    .364318
READY

Непосредственный режим обычно используется при отладке программ.

Например, оператор PRINT в непосредственном режиме позволяет узнать текущее значение переменных в программе.

3. ЭЛЕМЕНТЫ ДАННЫХ ЯЗЫКА

3.1. Константы

В языке БЕЙСИК используются три типа констант:

  1. вещественные константы;
  2. целые константы;
  3. строковые константы.

3.1.1. Вещественная константа.

Вещественная константа - это набор из одной или нескольких десятичных цифр. Константа может принимать как положительные, так и отрицательные значения.

Отсутствие точки в константе предполагает наличие её за последней цифрой справа.

Пример:

184 равносильно 184.

Пример:

Допустимые вещественные константы.

5

42861

74

-125

6. 

.95

БЕЙСИК разрешает оперировать с вещественными константами в диапазоне от 10^(-38) до 10^(+38).

Использование в программе констант вне указанного диапазона вызывает сообщение о неустранимой ошибке.

При работе с очень большими и очень малыми числами БЕЙСИК разрешает использование экспоненциального представления, то есть число (в диапазоне от 1 до 10), умноженное на десять в степени:

[-] Х.ХХХХХЕ [-] NN

где

(-)

- знак числа;

 

X

- цифра от 0 до 9;

 

.

- десятичная точка;

 

Е

- используемый формат;

 

NN

- порядок.

Числовые константы могут иметь вид:

.73012E-02
9.99
-1
-8.3067

Числа с плавающей запятой занимают в памяти либо два, либо четыре 16-разрядных слова. Значение, вычисленное с одинарной точностью, занимает два слова (8 десятичных цифр), а вычисленное с двойной точностью (15 десятичных цифр) - четыре слова.

При вычислениях с двойной точностью необходимо учитывать:

Оба формата позволяют представлять числа в диапазоне от 10^(-38) до 10^(+38).

БЕЙСИК выполняет вывод результатов при вычислениях с плавающей запятой:

3.1.2. Целая константа.

Целая константа - это набор десятичных цифр, оканчивающихся знаком процента "%".

Диапазон использования целых констант от -32768% до + 32767%. Операции с целыми константами вне этого диапазона вызывают сообщение о неустранимой ошибке.

3.1.3. Строковая константа (литерал).

Строковая константа (литерал) - это набор буквенно-цифровых и/или специальных символов. Строковые константы ограничиваются с двух сторон одиночными или двойными кавычками.

БЕЙСИК печатает каждый символ внутри кавычек точно так, как он представлен в исходной программе.

Начальный и конечный ограничители должны быть одного типа. Возможна комбинация двойных и одинарных кавычек.

Пример:

PRINT 'пункт "строковые константы"'

Результат работы оператора:

пункт "строковые константы"

3.2. Переменные

Переменная - это величина, значение которой может изменяться в процессе выполнения программы.

БЕЙСИК допускает три типа переменных:

  1. вещественные переменные;
  2. целые переменные;
  3. строковые переменные.

3.2.1. Вещественные переменные

Вещественная переменная обозначается одной буквой или буквой, за которой следует одна цифра.

В начале программы, написанной на языке БЕЙСИК, необходимо присвоить всем переменным нулевое значение.

Целочисленное значение, присвоенное вещественной переменной, БЕЙСИК печатает как целое, но во внутреннем представлении рассматривает его как число с плавающей запятой.

3.2.2. Целые переменные

Идентификатор целой переменной состоит из одной буквы или из одной буквы и одной цифры и заканчивается знаком процента "%".

Пример:

Целые переменные:

А%

C8%

B1%

D%

Значение целых переменных должно находиться в диапазоне от -32768 до +32767.

Если вещественная константа присваивается целой переменной, то БЕЙСИК отбрасывает дробную часть значения.

3.2.3. Строковые переменные

Идентификатор строковой переменной - это буква, за которой может следовать одна цифра. Знак "¤" должен быть последним символом в идентификаторе строковой переменной.

Пример:

Допустимые имена

Недопустимые имена

B1¤

B1

А¤

А

S2¤

2S¤

¤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(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. Арифметические выражения

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

^

- возведение в степень;

*

- умножение;

/

- деление;

+

- сложение;

-

- вычитание.

Выполнение арифметических операций над арифметическими выражениями одного типа даёт результат того же типа. Пример:

А%+В%

= целому выражению.

C1*D

= вещественному выражению.

Сочетание целой величины с вещественной даёт вещественный результат.

Пример:

А*В%

= вещественному выражению.

8.8*8%

= 70.4

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

Пример:

А*-В - правильно,

А*(-В) - правильно.

БЕЙСИК вычисляет значение выражения согласно приоритету операций:

  1. возведение в степень (^) - наивысший;
  2. унарный минус (-);
  3. умножение, деление (*, /);
  4. сложение, вычитание (+, -) - низший.

При использовании скобок БЕЙСИК вычисляет первым самое внутреннее выражение, затем внешнее по отношению к предыдущему и так далее.

Пример:

В=(20*(16+(8^2)))

БЕЙСИК вычисляет первым (8^2), затем (16+64) и, наконец, (20*80).

БЕЙСИК вычисляет выражение в скобках в первую очередь, даже если операция в скобках имеет более низкий приоритет, чем операция вне скобок.

Операции, размещённые в одной строке и имеющие равный приоритет, выполняются последовательно слева направо.

Пример:

А^B^C соответствует (А^B)^C.

4.2. Строковые выражения.

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

В качестве знаков операций над строковыми выражениями БЕЙСИК использует знак " + " (плюс) и знак "&" (амперсанд). Знаки операций служат для объединения строк.

A¤ + В¤ и A¤ & В¤

означают присоединение строки В¤ к концу строки A¤. Результирующая строка не должна превышать 255 символов.

Пример:

10 D¤ ="ПРИ"&"СОЕДИНЕНИЕ"
20 PRINT D¤
30 END

Результат, выводимый на терминал:

ПРИСОЕДИНЕНИЕ

4.3. Операции отношения.

Операции отношения служат для установления отношений между двумя величинами или двумя строками. Сравнение и передача управления осуществляется, в основном, операторами IF THEN (IF GOTO). Допустимо сравнение целого и вещественного выражений. Знаки операций отношения приведены в табл. 2.

Таблица 2

Операция

Пример

Комментарии

=

А=В

А равно В

А¤=В¤

Строки А¤ и В¤ равны

А<В

А меньше В

А¤<В¤

Символьная строка А¤ меньше символьной строки В¤

А>В

А больше В

А¤>В¤

Символьная строка А¤ больше символьной строки В¤

<=, =<

А<=В

А меньше или равно В

А¤<=В¤

Символьная строка А¤ либо эквивалентна символьной строке В¤, либо меньше

>=, =>

А>=В

А больше или равно В

А¤>=В¤

Символьная строка А¤ либо эквивалентна символьной строке В¤, либо больше

<>,><

А<>В

А не равно В

А¤<>В¤

Символьные строки А¤ и В¤ не эквивалентны друг другу

Сравнение строк проводится посимвольно слева направо, в порядке расположения символов в таблице кодов КОИ-7. Пример:

10 A¤="ABCD"
20 B¤="ABCF"
30 IF А¤<В¤ GOTO 50
40 PRINT B¤\GOTO 60
50 PRINT А¤
60 END

В строке 30 происходит сравнение символьных строк А¤ и В¤ и передача управления строке 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 А(36), В (4,6), С % (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 А = 482.5 или 10 А = 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 целых числа А,В,С и одну символьную строку 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
В%=-6
С¤=режим
С1¤=работы

Оператор READ допускается помещать в любом месте многооператорной строки.

Оператор DATA должен быть либо единственным, либо последним оператором строки.

БЕЙСИК допускает чтение числовой константы в строковую переменную.

Пример:

10 READ А¤
20 DATA 15.15

Попытка считать строковую константу в числовую переменную вызовет сообщение об ошибке.

При выполнении оператора READ указатель считывания данных перемещается. БЕЙСИК осуществляет повторное считывание одних и тех же данных с помощью оператора RESTORE.

Формат оператора RESTORE:

[N] RESTORE

где

N

- номер строки.

Пример:

10 READ А,В,С
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 А=123\В=45\С=6
20 PRINT TAB(5);А,TAB(15);В;TAB(23);С

Числа располагаются следующим образом:

     123       45      6

БЕЙСИК игнорирует TAB (10), так как запятая требует печати в зоне, которая находится за позицией, указанной в TAB.

5.1.8. Оператор GO ТО.

Оператор GO ТО вызывает непосредственный переход к указанной строке с нарушением естественного порядка выполнения операторов программы.

Формат оператора GO ТО:

[N] GO ТО LINE NUMBER

где

N

- номер строки;

 

LINE NUMBER

- номер строки, к которой осуществляется переход.

Пример:

10 A=9\GO ТО 30
20 А=А*2
30 PRINT А,А*А
40 END

Операторы выполняются в следующей последовательности:

Строка 20 не выполняется.

Оператор GO ТО должен быть либо единственным оператором строки, либо последним оператором многооператорной строки.

5.1.9. Оператор ON GOTO (ON THEN).

Оператор ON GOTO (ON THEN) позволяет осуществлять переход к одной из указанных строк в зависимости от значения числового выражения.

Формат оператора ON GOTO (ON THEN):

[N] ON EXP GOTO LINE NUM1 [,LINE NUM2,... ]
[N] ON EXP THEN LINE NUM1 [,LINE NUM2,... ]

где

N

- номер строки;

 

EXP

- любое допустимое арифметическое выражение;

 

LINE NUM1,LINE NUM2,...

- номера строк перехода. Ключевые слова GOTO и THEN взаимозаменяемы.

При выполнении оператора ON GOTO (ON THEN) вычисляется прежде всего значение числового выражения. Целая часть его используется в качестве указателя на один из перечисленных номеров строк в списке. Если результирующее значение равно 1, передаётся управление строке, номер которой расположен первым в списке. Если значение равно 2, управление передаётся строке, номер которой записан вторым в списке и т.д. Если значение выражения меньше 1 или больше количества номеров строк в списке, БЕЙСИК печатает сообщение об ошибке.

Пример:

200 ON А 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 G0TO передают управление в зависимости от истинности (или ложности) выражения отношения.

Формат оператора IF THEN:

 

[N] IF REL-EXP THEN LINE NUMBER

или

[N] IF REL-EXP THEN STATEMENT

где

N

- номер строки;

 

REL-ЕХР

- проверяемое условие; выражение отношения может быть как арифметическим, так и строковым;

 

LINE NUMBER

- номер строки, выполняемой в случае истинности условия;

 

STATEMENT

- оператор, подлежащий выполнению. Может быть оператор IF THEN;

Формат оператора IF GOTO:

[N] IF REL-EXP GOTO LINE NUMBER

где

N

- номер строки;

 

REL-ЕХР

- проверяемое условие; выражение отношения может быть как арифметическим, так и строковым;

 

LINE NUMBER

- номер строки, выполняемой в случае истинности условия.

Если в операторе IF THEN(IF GOTO) после ключевого слова THEN(GOTO) следует номер строки и условие истинно, управление передаётся этой строке.

Пример:

10 INPUT С
20 IF C=0 THEN 30\PRINT C\GOTO 40
30 PRINT "С= ";С 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 больше или равно А3.

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:

  1. если начальное значение индексной переменной больше конечного значения (при положительном шаге), цикл не выполняется;
  2. передавать управление внутрь цикла недопустимо.

    Пример:

    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
  3. для строгого соблюдения количества циклов рекомендуется использовать целые значения индексов. Это связано с двоичным представлением чисел. БЕЙСИК допускает и такое использование:
    10 FOR I = 1.5 TO 7.7 STEP 1.32
  4. циклы, задаваемые с помощью оператора 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 В
20 FOR C% = 1% TO 5%
30 FOR D = 5 TO 50 STEP 5
40 NEXT D
50 NEXT С%
60 NEXT А%
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 в программе на языке БЕЙСИК не ограничено. Продолжить выполнение программы можно с помощью оператора GO TO в диалоговом режиме, указав номер строки, с которой необходимо продолжить программу.

Оператор 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 "Введите коэффициенты. Сначала А, потом В,С"
20 PRINT "При A=0 программа идёт на END"
30 INPUT А
40 IF A=0 THEN 32767
50 INPUT В,С
60 IF A<>1 THEN 350
70 GOSUB 200
80 GOTO 10
200 PRINT "Уравнение вида Х^2 + В*Х + С=0"
210 D1 = (B/2)^2-С
220 IF D1<>0 THEN 250
230 PRINT "Имеет одно решение Х= ";-B/2
240 RETURN
250 IF D1<0 THEN 280
260 PRINT "Имеет два решения X1= ";-B/2 + SQR(D1);
265 PRINT "X2= ";-В/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 "Уравнение вида А*Х^2 + В*Х + С=0"
410 D = B*B-4*A*C
420 IF D<>0 THEN 450
430 PRINT "Имеет одно решение Х= ";-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 -В/(2*A);"+";SQR(-D)/(2*A);"*I";
510 PRINT " X2= ";-В/(2*A);"-";SQR(-D)/(2*A) ;"*I"
520 RETURN
32767 END

5.1.14. Оператор ON GOSUB.

Оператор ON GOSUB используется для условной передачи управления одной из нескольких подпрограмм или к одной из нескольких входных точек подпрограмм.

Формат оператора ON GOSUB:

[N] ON EXP GOSUB LINE NUM1[,LINE NUM2,...]

где

ЕХР

- любое выражение, допустимое в БЕЙСИК (кроме выражения отношения);

 

LINE NUM1, LINE NUM2,...

- список номеров строк перехода.

Оператор ON GOSUB аналогичен оператору ON GOTO (см. пункт 5.1.9.).

Пример:

50 ON А + В 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).

Таблица 3

Функция

Значение

SGN(EXP)

Функция знака.

Результат функции:

если ЕХР - положительный аргумент, то (+1);

если ЕХР - отрицательный аргумент, то (-1);

если ЕХР - нулевой аргумент, то 0.

ABS(EXP)

Функция "абсолютная величина".

Определяет абсолютное значение аргумента ЕХР.

INT(EXP)

Целочисленная функция.

Определяет целую часть ЕХР, округляя результат.

SIN(EXP)

Функция синуса.

Вычисляет синус аргумента ЕХР.

COS(EXP)

Функция косинуса.

Вычисляет косинус аргумента ЕХР.

ATN(EXP)

Функция арктангенса.

Вычисляет арктангенс аргумента ЕХР.

SQR(EXP)

Функция квадратного корня.

Вычисляет квадратный корень положительного аргумента ЕХР.

ЕХР(ЕХР)

Экспоненциальная функция.

Вычисляет показательную функцию (Е^Х, где E=2,71828 ..., X<= 87).

LOG(EXP)

Функция натурального логарифма.

Вычисляет натуральный логарифм аргумента ЕХР (аргумент должен быть положительным).

LOG10(EXP)

Функция десятичного логарифма.

Вычисляет десятичный логарифм аргумента ЕХР (аргумент должен быть положительным).

PI

Возвращает постоянное значение, равное 3,1415927. Может использоваться как числовая константа.

RND(EXP)

Функция случайных чисел.

Генерирует псевдослучайное число или совокупность чисел в интервале (0;1).

Значение аргумента ЕХР игнорируется.

Функция генерирует один и тот же список чисел при многократном выполнении.

 

Пример:

Функция нахождения целой части числа.

Функцию INT можно использовать для округления до любого заданного десятичного разряда.

10 INPUT М
20 IF М= -9999 THEN 100
30 INPUT Р
40 A=INT(М*10^Р + 0.5)/(10^Р)
50 PRINT М,Р,А
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 В
20 INPUT X
30 IF Х=-9999 THEN 100
40 PRINT B,X,LOG(X),LOG (X)/LOG(В)
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

где А и В - числа задаваемого интервала.

Пример:

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 А¤="ФУНК "
20 В¤="ЦИЯ"
30 PRINT TRM¤(A¤)+ B¤

Результат, выводимый на терминал:

ФУНКЦИЯ
5.2.3.3. Функция POS.

Функция осуществляет поиск подстроки в строке.

Формат функции POS:

POS(STR1,STR2,EXP)

где

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:

  1. подстрока (STR2) пустая, а строка (STR1) не пустая, функция возвращает длину строки плюс 1, если в ЕХР номер позиции больший, чем исходная строка; и возвращает значение выражения ЕХР, если ЕХР меньше, чем количество символов в искомой строке;
  2. строка (STR1) пустая, а подстрока (STR2) не пустая, функция возвращает 0;
  3. значение выражения (ЕХР) меньше 1, функция начинает поиск с первого символа;
  4. значение выражения (ЕХР) больше длины строки (STR1), а подстрока (STR2) не пустая, функция возвращает 0.
5.2.3.4. Функция SEG¤.

Функция выделяет подстроку в пределах символьной строки.

Формат функции SEG¤:

SEG¤(STR,EXP1,EXP2)

где

STR

- строка символов;

 

ЕХР1

- позиция первого копируемого символа;

 

ЕХР2

- позиция последнего копируемого символа.

Пример:

10 PRINT SEG¤("ПОДСТРОКА",4,9)

Результат, выводимый на терминал:

СТРОКА

Предполагаемые ситуации при работе с функцией SEG¤: Задаваемое значение ЕХР1 меньше 1, БЕЙСИК считает его равным 1;

ЕХР1 больше ЕХР2 или длины строки, функция возвращает нуль-строку (пустая строка);

ЕХР2 больше длины строки, функция возвращает всю строку;

ЕХР1 равно ЕХР2, функция возвращает один символ.

5.2.3.5. Функции даты (DAT¤) и времени (CLK¤).

Функция даты DAT¤ возвращает текущую дату в виде:

NN-МММ-YY

где

NN

- две цифры месяца;

 

МММ

- три буквы месяца;

 

YY

- две последние цифры года.

Функция даты имеет вид: DAT¤

Функция времени CLK¤ возвращает текущее время в виде:

TT-MM-SS

где

ТТ

- часы;

 

ММ

- минуты;

 

SS

- секунды.

Функция времени имеет вид: CLK¤

5.2.3.6. Функции преобразования

БЕЙСИК содержит набор строковых функций (приведены в табл. 4) преобразования символов в соответствующий код КОИ-7 и наоборот.

Таблица 4

Функция

Значение

ASC(STR)

Возвращает значение символа в коде КОИ-7. Строка STR должна содержать один символ и не должна быть пустой.

Пример:

PRINT ASC("X")
88

CHR¤(EXP)

Возвращает строку из одного символа. Значение ЕХР может иметь вид (N+128), где N - десятичное значение кода КОИ-7 в пределах от 0 до 127. Однако символы вида CHR¤(N) и CHR¤ (N+128), не эквивалентны, хотя и являются одним и тем же символом в таблице КОИ-7.

VAL(STR)

Возвращает числовое значение, заданное строкой. Строка должна иметь вид числовой константы.

Пример:

PRINT VAL("15.3E-2")
0.153

STR¤(EXP)

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

Пример:

PRINT STR¤(" 2 + 3 ")
5

BIN(STR)

Возвращает целое десятичное значение двоичного числа, представленного строкой. STR может быть нулём, единицей и пробелом. Пробел игнорируется при вводе. Пример:

10 PRINT BIN('100 101 001')
297

OCT(STR)

Возвращает целое десятичное значение восьмеричного числа, представленного строкой. STR содержит цифры 0-7 и пробел. Пробел игнорируется при вводе.

Пример:

10 PRINT ОСТ("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 А,В
30 PRINT FNA(A,B)

ПРИМЕЧАНИЯ:

  1. Тип и количество используемых переменных должны соответствовать переменным из LIST оператора DEF.
  2. Аргумент функции может отсутствовать.

    Пример:

    10 DEF FNA=X^2
    20 R=FNA()
  3. Одна и та же функция определяется оператором DEF один раз.
  4. Оператор 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 В = 10
20 CLOSE #3, В-2, B + 1, В

При выполнении строки 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 # EXP,VAR1[,VAR2,VAR3,... ]

где

N

- номер строки;

 

ЕХР

- номер канала, связанного с файлом;

 

VAR1,VAR2,...

- элементы данных, которым присваиваются вводимые значения.

Оператор LINPUT # считывает символьную строку из файла.

Формат оператора LINPUT #:

N LINPUT # EXP,STR-VAR1 [,STR-VAR2,STR-VAR3,...]

где

N

- номер строки;

 

ЕХР

-номер канала, связанного с файлом;

 

STR-VAR1,STR-VAR2,...

-строковые переменные.

При считывании файла данных необходимо придерживаться тех же синтаксических правил, как если бы ввод выполнялся с терминала. Числовые данные должны быть разделены запятыми или управляющим символом <BK>.

6.3.2. Оператор PRINT #.

Оператор PRINT # помещает данные в определённый файл.

Формат оператора PRINT #:

N PRINT # EXP[,LIST]

где

N

- номер строки;

 

EXP

- номер канала, связанного с файлом;

 

LIST

- список элементов, представленных в виде числовых и строковых выражений, или функцией TAB, и разделяемых запятой или точкой с запятой.

Оператор PRINT # без списка аргументов не помещает строку пробелов в файл.

ПРИМЕЧАНИЕ. В операторах INPUT #, LINPUT #, PRINT # значение ЕХР не должно быть равным нулю; после ЕХР в качестве разделителя можно ставить символ ":".

6.3.3. Оператор PRINT USING.

Оператор PRINT USING печатает результаты работы программы в установленном формате.

Формат оператора PRINT USING:

PRINT [#EXP,] 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 А = 27.95 \ В = 107.50 \ С = 1007.50
20 PRINT USING "**##.##",А, В, С 

Сообщение, выводимое на терминал:

**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, С и Е (употребление этих букв описано ниже).

Пример:

10 PRINT USING "'", "НЕТ"

Сообщение, выводимое на терминал:

Н

2) Символ "L".

Выравнивает строку влево, резервирует место для одного символа.

Пример:

10 PRINT USING "'LL","A"
20 PRINT USING "'LLLLL","ABCDEKLMN"
30 PRINT USING "'LLL","ДA"

Сообщение, выводимое на терминал:

А
ABCDEK
ДА

3) Символ "R".

Выравнивает строку вправо, резервирует место для одного символа.

Пример:

10 PRINT USING "'RRRRR","A"
20 PRINT USING "'RRRRR","ABCDEKLMN"
30 PRINT USING "'RRRRR","ДA"

Сообщение, выводимое на терминал:

     А
ABCDEK
    ДА

4) Символ "С".

Печатает строку по центру строкового поля форматной строки, резервирует место для одного символа.

Пример:

10 PRINT USING "'ССССС","A"
20 PRINT USING "'ССССС","АВ"
30 PRINT USING "'ССССС","АВС"
40 PRINT USING "'CCCCC","ABCD>
50 PRINT USING "'CCCCC","ABCDE"

Сообщение, выводимое на терминал:

  А
  АВ
 АВС
 ABCD
ABCDE

5) Символ "Е".

Выравнивает строку влево, расширяет поле (если необходимо напечатать всю строку), резервирует место для 1 символа. Если в строковом поле зарезервировано меньше символов, чем в символьной строке, БЕЙСИК расширяет поле и печатает всю строку.

Пример:

Использование символов управления печатью для строковых полей.

40 READ А¤
50 F¤ = "::'CCCC::'EEEE::'LLLL::'RRRR::"
60 IF A¤ = "" GOTO 100
70 PRINT USING F¤,A¤, А¤, А¤, А¤
80 GOTO 40
90 DATA "ABCD","ABCDEFG","A"
95 DATA "AB",""
100 END

Сообщение, выводимое на терминал:

::ABCD ::ABCD   ::ABCD :: ABCD::
::ABCDE::ABCDEFG::ABCDE::ABCDE::
::  А  ::А      ::А    ::А    ::
::  АВ ::АВ     ::АВ   ::АВ   ::

 

6.3.3.3. Общий вид форматной строки

В форматной строке оператора PRINT USING может быть несколько полей (числовых и строковых) одновременно. Пример:

30 А% = 13\В% = 12\А¤ = "МАТЕМ." \ В¤ = "СТРОК."
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 А¤ = "АВС"\ В¤ = "12"
60 PRINT #1, USING "ИМЕЕТСЯ:'RRRR>'LL",A¤,B¤

В файл по каналу 1 печатается:

ИМЕЕТСЯ: ABC>12
6.3.3.4. Ошибки при работе с оператором PRINT USING

При работе с оператором PRINT USING могут возникнуть два вида ошибок: неустранимые и устранимые.

Фатальная ошибка прекращает работу оператора и БЕЙСИК выдаёт сообщение:

?PRINT USING ERROR(?PRU). 

Условия возникновения неустранимой ошибки:

  1. недопустимый формат;
  2. неверное построение полей в форматной строке;
  3. несоответствие типа поля элементу списка;
  4. печать отрицательного числа в поле с начальными символами ** и ¤¤ в случае, когда конечный знак минус не задан;
  5. элементы списка разделены символами, отличными от запятой или точки с запятой.

При возникновении устранимой ошибки, работа оператора PRINT USING продолжается, но результат выполнения может оказаться неверным.

Условия возникновения устранимой ошибки:

  1. число знакомест элемента списка больше числа знакомест, указанного в поле формата;
  2. поле формата содержит недопустимую комбинацию символов;
  3. обычные символы представляют собой одно из допустимых полей форматной строки.

6.3.4. Оператор IF END #.

Оператор IF END # передаёт управление на строку с соответствующим номером либо оператору при обнаружении признака конца файла с последовательным доступом.

Формат оператора IF END # THEN:

 

N IF END [#]EXP THEN LINE NUMBER

или

N IF END [#]EXP THEN STATEMENT

где

N

- номер строки;

 

ЕХР

- номер канала, связанного с файлом.

 

LINE NUMBER

- номер строки, выполняемой в случае истинности условия;

 

STATEMENT

- оператор, подлежащий выполнению.

Формат оператора IF END # GOTO:

N IF END [#]EXP GOTO LINE NUMBER

где

N

- номер строки;

 

ЕХР

- номер канала, связанного с файлом;

 

LINE NUMBER

- номер строки, выполняемой в случае истинности условия.

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

6.3.5. Оператор RESTORE #.

Оператор RESTORE # устанавливает указатель считывания файла в начальную позицию.

Формат оператора RESTORE #:

N RESTORE #EXP

где

N

- номер строки;

 

ЕХР

- номер канала, связанного с файлом.

6.3.6. Использование файлов данных с последовательным доступом

Пример:

10 OPEN "FIL1" FOR OUTPUT AS FILE #1
20 READ A¤, В, С%
30 IF А¤ = "" THEN GOTO 60
40 PRINT #1, А¤;",";В;",";С%
50 GOTO 20
60 CLOSE #1
110 IF END #4 GOTO 160
120 INPUT #4,A¤,B,C%
130 PRINT А¤,В,С%
140 GOTO 110
160 PRINT "конец файла"
170 DATA "К1",5.2,5,"К2",6.2,6
180 DATA "К3",7.2,7,"К4",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%,АВ¤(10) = 128
20 OPEN "NAME" FOR INPUT AS FILE #2

Пример:

10 DIM #1%,А(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

- список переменных и массивов.

Необходимо соблюдать следующие правила:

  1. последовательность списка в операторе COMMON должна быть одинакова у всех вызываемых сегментов программ;
  2. массивы, указанные в операторе COMMON, не должны определяться в операторе DIM;
  3. число элементов списка не должно превышать 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 EXP]

где

N

- номер строки;

 

STR

- спецификация файла (сегмента программы);

 

ЕХР

- номер строки, с которой начинается выполнение программы.

Характеристика оператора OVERLAY:

  1. строки вызываемой программы заменяют строки программы в памяти, если их номера совпадают;
  2. все массивы и переменные сохраняют свои значения;
  3. все открытые файлы остаются открытыми;
  4. программа продолжается с указанной строки (если используется оператор LINE) или со строки, следующей за той, которая вызвала оператор OVERLAY.
  5. вызываемая программа не должна содержать операторы 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+A(I)
35 PRINT #1,T
40 NEXT I
50 CLOSE
90 OVERLAY "OVL" LINE 10
100 END

Сегмент "OVL".

18 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--

Пользователь должен указать имя файла, вызываемого в память, или нажать клавишу <BK>. В этом случае БЕЙСИК загружает программу с именем 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--

Пользователь должен указать имя файла или нажать клавишу <BK>. В этом случае новое имя программы будет NONAME.

7.2.8. Команда COMPILE.

Команда COMPILE компилирует программу, находящуюся на устройстве файловой структуры, и сохраняет её на этом устройстве.

Формат команды COMPILE:

COMPILE STR

где

STR

- спецификация исходного файла.

Если спецификация файла отсутствует, команда COMPILE компилирует программу, находящуюся в памяти, и сохраняет её на системном устройстве файловой структуры.

7.2.9. Команда SUB.

Команда SUB редактирует строку текущей программы.

Формат команды SUB:

SUB LIN.NUMXSTR1XSTR2[X[N]]

где

LlN.NUM

- номер строки для редактирования;

 

X

- символ-ограничитель;

 

STR1

- последовательность заменяемых символов;

 

STR2

- последовательность вновь вводимых в строку символов;

 

N

- число; N-ое появление STR1 в редактируемой строке.

Ограничитель может быть любым символом (за исключением пробела, табуляции и цифр), допустимым в языке БЕЙСИК.

Ограничитель не должен встречаться в STR1 и STR2. Пример:

10 А = В\С¤ = 0  -редактируемая строка;
SUB 10@0@O@2     <ВК>
10 А = B\C¤ = O  -отредактированная строка.

Пример:

50 PRINT "неверный символ"; -редактируемая строка;
SUB 50@Е@и@3
50 PRINT "неверный символ"; -строка отредактирована.

7.2.10. Команда RESEQ.

Команда RESEQ перенумеровывает строки программы, находящиеся в памяти.

Формат команды RESEQ:

RESEQ [LIN.NUM1],[LIN.NUM2][-LIN.NUM3][,EXP]

где

LIN.NUM1

- новый номер строки, взамен старого;

 

LIN.NUM2-LIN.NUM3

- номера строк, с которых начинается перенумерация;

 

ЕХР

- шаг приращения номеров строк.

Пример:

110 FOR I = 1 TO 5
120 INPUT С
130 А = А + С
140 IF C=0 THEN 160
145 PRINT А
150 NEXT I
160 END
RESEQ 10,110-160,10
10 FOR I = 1 TO 5
20 INPUT С
30 А = А + С
40 IF С = 0 THEN 70
50 PRINT А
60 NEXT I
70 END

Способы использования команды RESEQ:

7.2.11. Команда LENGTH.

Команда LENGTH позволяет пользователю определить длину программы, находящейся в памяти.

Формат команды LENGTH:

LENGTH

В ответ на набранную команду БЕЙСИК печатает:

ХХХХ WORDS USED,YYYY FREE

где

ХХХХ

- количество слов, занимаемых программой;

 

YYYY

- количество свободных слов в буфере пользователя.

7.3. Команды с клавиатуры (ключевые команды).

Ключевые команды вызываются при одновременном нажатии клавиши <СУ> и буквы, которая определяет действие, подлежащее выполнению.

7.3.1. Команда СУ/C.

Команда СУ/C вызывает прерывание выполнения команды или программы, БЕЙСИК печатает сообщение: STOP

Команда СУ/C отменяет действие команд СУ/О и СУ/S.

7.3.2. Команда СУ/О.

Команда СУ/О прекращает вывод данных на терминал, но не прерывает выполнение программы. Вывод данных на терминал возобновится, если команда СУ/О будет набрана повторно.

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

Б

Р

 

ПФ2

"

2

B

R

Б

Р

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

]

М

Щ

1

1

0

ВЫХ

 

 

 

N

^

Н

Ч

ВЫХ

 

.

>

N

^

Н

Ч

1

1

1

ВХ

 

 

 

О

_

О

ЗБ

ВХ

 

/

?

О

_

О

ЗБ

 

ПРИЛОЖЕНИЕ 2
ОПЕРАТОРЫ ЯЗЫКА БЕЙСИК

CALL

вызывает программу, написанную на языке Ассемблера.

CHAIN

сегментирует программу, сохранённую в файле на устройстве файловой структуры.

CLOSE

закрывает определённый логический файл.

COMMON

передаёт данные в памяти между сегментами программ.

DATA

организует блок данных для считывания оператором READ.

DEF

определяет функцию пользователя FNL.

DIM

резервирует место в памяти для числовых или строковых данных.

DIM #

определяет файл данных как файл с прямым доступом.

END

определяет физический конец программы.

FOR

указывает начало цикла и определяет его параметры.

GOSUB

осуществляет переход к первому оператору подпрограммы.

GO TO

осуществляет переход к указанной строке.

IF ТНЕN,

передаёт управление в зависимости

IF GO TO

истинности или ложности выражения отношения.

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

производит останов программы. Работа программы может быть продолжена оператором GO TO.

 

ПРИЛОЖЕНИЕ 3
ФУНКЦИИ ЯЗЫКА БЕЙСИК

Математические функции

ABS(EXP)

функция "Абсолютная величина". Определяет абсолютное значение аргумента EXP.

ATN(EXP)

функция арктангенса. Вычисляет арктангенс аргумента EXP.

COS(EXP)

функция косинуса. Вычисляет косинус аргумента EXP.

ЕХР(ЕХР)

экспоненциальная функция. Вычисляет показательную функцию (E^X, где Е = 2.71828..., X <= 87).

INT(EXP)

целочисленная функция. Определяет целую часть EXP, округляя результат.

LOG(EXP)

функция натурального логарифма. Вычисляет натуральный логарифм аргумента ( EXP>0 ).

LOGIO(EXP)

функция десятичного логарифма. Вычисляет десятичный логарифм аргумента ( EXP>0 ).

PI

присваивает постоянное значение, равное 3.1415927. Может использоваться как числовая константа.

RND(EXP)

функция случайных чисел. Генерирует последовательность случайных чисел в интервале (0,1).

SGN(EXP)

функция знака. Результат выполнения функции:

 +1 - если ЕХР>0

 0 - если EXP=0

SIN(EXP)

функция синуса. Вычисляет синус аргумента EXP.

SQR(EXP)

функция квадратного корня. Вычисляет квадратный корень аргумента EXP (EXP>=0).

TAB

функция табуляции. Организует выходной формат печати.

Строковые функции

ASC(STR)

возвращает значение символа в коде КОИ-7.

BIN(STR)

возвращает целое десятичное значение двоичного числа, представленного строкой.

CHR¤(EXP)

возвращает строку из одного символа.

CLK¤

возвращает текущее время.

DAT¤

возвращает текущую дату.

LEN(STR)

возвращает количество символов в строке.

OCT(STR)

возвращает целое десятичное значение восьмеричного числа, представленного строкой.

POS(STR1,STR2,EXP)

осуществляет поиск подстроки в строке и возвращает позицию первого элемента подстроки.

SEG¤(STR,EXP1,EXP2)

выделяет подстроку в строке.

STR¤(EXP)

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

TRM¤(STR)

возвращает заданную строку без конечных пробелов.

VAL(STR)

возвращает десятичное значение числа, заданного в виде символьной строки.

 

ПРИЛОЖЕНИЕ 4
КОМАНДЫ ИНТЕРПРЕТАТОРА БЕЙСИК

APPEND

соединяет программу, сохранённую в файле, с текущей программой в памяти.

CLEAR

очищает числовые и строковые переменные, массивы.

COMPILE

компилирует программу и сохраняет её на устройстве файловой структуры.

DEL

исключает строки текущей программы.

LENGTH

определяет длину программы и объём свободной памяти в буфере пользователя.

LIST

печатает на терминал строки программы, заданные их номерами.

NEW

очищает буфер пользователя и присваивает имя программе, которая будет загружаться.

OLD

загружает программу из указанного файла, предварительно очищая буфер пользователя.

RENAME

изменяет имя текущей программы на заданное.

REPLACE

заменяет файл на устройстве файловой структуры текущей программой.

RESEQ

перенумеровывает строки программы.

RUN

загружает и запускает программу из указанного файла. Запускает текущую программу, если спецификация файла не указана.

SAVE

сохраняет программу, находящуюся в памяти, на одном из внешних носителей.

SCR

очищает буфер пользователя.

SUB

редактирует строку текущей программы.

UNSAVE

удаляет заданный файл с устройства файловой структуры.