УКНЦ Бейсик Описание языка

Материал из Emuverse
Версия от 09:00, 7 октября 2015; Nzeemin (обсуждение | вклад) (Новая страница: «{{ДИ}} <pre> УТВЕРЖДЕН У1.00031-01 35 01-ЛУ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ К…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Данный материал защищён авторскими правами!

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

 







УТВЕРЖДЕН

  У1.00031-01 35 01-ЛУ










                    ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
              КОМПЛЕКСА ВЫЧИСЛИТЕЛЬНОГО УЧЕБНОГО
                    "ЭЛЕКТРОНИКА МС 0202"


                            БЕЙСИК

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

                       У1.00031-01 35 01

                           ЛИСТОВ 98




























                             1987
                                                         ЛИТЕРА  0
                              - 2 -

                        У1.00031-01 35 01


                             АННОТАЦИЯ





      Данный документ  представляет  собой  руководство  по  языку
 программирования БЕЙСИК (версия 1985.11.01.) и  предназначен  для
 пользователей микро-ЭВМ <Электроника МС 0511>.
      Язык БЕЙСИК создан для решения математических  и  инженерных
 задач  в  режиме  диалога  человек-ЭВМ.  Он  позволяет  создавать
 программы для большого  круга  задач,  сочетая  в  себе  простоту
 использования и  легкость  изучения.  Описываемая  версия  БЕЙСИК-
 системы существенно расширена по сравнению с ядром языка  БЕЙСИК.
 Она включает операторы, которые позволяют создавать программы  по
 обработке  текстовой  информации,  использовать  этот  язык   для
 программирования систем управления технологическими  установками,
 а также игровых задач и т.д..
      В настоящем документе приводятся  сведения  о  синтаксисе  и
 семантике операторов, функций языка и команд системы.
      В  приложении  1  приведены  сообщения  об  ошибках.  Список
 команд,  операторов  и  функций  приведен  в  приложении   2.   В
 приложении 3 приведена таблица кодов КОИ-7 <Электроника МС 0511>.
 Приложение  4   содержит   список   слов,   зарезервированных   в
 БЕЙСИК-системе.
      Перед   изучением   описания   языка    БЕЙСИК    необходимо
 ознакомиться   с   руководством   по    эксплуатации    микро-ЭВМ
 <Электроника МС 0511>, руководством оператора У1.00031-01 34 02.


                              - 3 -

                        У1.00031-01 35 01






                            СОДЕРЖАНИЕ




 1.  ОБЩИЕ СВЕДЕНИЯ............................................  6

 1.1.   Косвенный режим........................................  6
 1.2.   Непосредственный режим.................................  6
 1.3.   Сообщения об ошибках...................................  7
 1.4.   Способ описания языка БЕЙСИК...........................  7
 1.5.   Основные символы языка.................................  8

 2.  ДАННЫЕ И ОПЕРАЦИИ НАД НИМИ................................  9

 2.1.   Константы..............................................  9
 2.1.1.   Числовые константы...................................  9
 2.1.2.   Типы числовых констант............................... 10
 2.1.3.   Текстовая константа.................................. 11
 2.2.   Переменные............................................. 11
 2.2.1.   Определение переменной............................... 11
 2.3.   Выражения и операции................................... 12
 2.3.1.   Арифметическое выражение............................. 12
 2.3.2.   Арифметические операции.............................. 13
 2.3.3.   Операции отношения................................... 14
 2.3.4.   Логические операции.................................. 14
 2.3.5.   Функции.............................................. 16
 2.3.6.   Преобразование типов................................. 16
 2.3.7.   Операции над строками символов....................... 17

 3.  КОМАНДЫ СИСТЕМЫ........................................... 18

 3.1.   Команды пуска программы................................ 18
 3.1.1.   Команда RUN.......................................... 18
 3.1.2.   Команда CONT......................................... 19
 3.1.3.   Клавиша (команда) <СУ> <A>........................... 19
 3.1.4.   Команда SYSTEM....................................... 20
 3.2.   Хранение программ на кассетной магнитной ленте......... 20
 3.2.1.   Команда LOAD......................................... 20
 3.2.2.   Команда SAVE......................................... 21
 3.2.3.   Команда MERGE........................................ 21
 3.2.4.   Команда CLOAD........................................ 22
 3.2.5.   Команда CSAVE........................................ 22
 3.2.6.   Команда FILES........................................ 22
 3.2.7.   Команда BLOAD........................................ 23
 3.2.8.   Команда BSAVE........................................ 24
 3.3.   Работа с текстами программ............................. 24
 3.3.1.   Команда LIST......................................... 25
 3.3.2.   Команда DELETE....................................... 26
 3.3.3.   Команда RENUM........................................ 26
 3.3.4.   Команда AUTO......................................... 27
 3.3.5.   Команда NEW.......................................... 28

 4. ОПЕРАТОРЫ.................................................. 28

                              - 4 -

                        У1.00031-01 35 01


 4.1.   Основные операторы..................................... 28
 4.1.1.   Оператор LET......................................... 28
 4.1.2.   Оператор GOTO........................................ 29
 4.1.3.   Оператор GOSUB....................................... 29
 4.1.4.   Оператор RETURN...................................... 30
 4.1.5.   Оператор IF.......................................... 31
 4.1.6.   Оператор FOR......................................... 32
 4.1.7.   Оператор NEXT........................................ 32
 4.1.8.   Оператор ON.......................................... 33
 4.1.9.   Оператор STOP........................................ 34
 4.1.10.  Оператор END......................................... 35
 4.1.11.  Оператор REM......................................... 36
 4.2.   Операторы  описания,  резервирования   памяти   и
        установки начальных значений........................... 36
 4.2.1.   Оператор DIM......................................... 37
 4.2.2.   Оператор KEY......................................... 37
 4.2.3.   Оператор CLEAR....................................... 38
 4.2.4.   Оператор DATA........................................ 39
 4.2.5.   Оператор READ........................................ 40
 4.2.6.   Оператор RESTORE..................................... 40
 4.2.7.   Оператор DEF......................................... 41
 4.2.7.1. Оператор DEF USR..................................... 41
 4.2.7.2. Оператор DEF FN...................................... 42
 4.3.   Операторы ввода/вывода................................. 43
 4.3.1.   Оператор PRINT....................................... 43
 4.3.2.   Оператор INPUT....................................... 44
 4.3.3.   Оператор OPEN........................................ 45
 4.3.4.   Оператор CLOSE....................................... 46
 4.4.   Операторы непосредственного доступа к памяти........... 46
 4.4.1.   Оператор POKE........................................ 46
 4.4.2.   Оператор OUT......................................... 47
 4.5.   Операторы управления экраном телевизора................ 48
 4.5.1.   Оператор CLS......................................... 48
 4.5.2.   Оператор COLOR....................................... 48
 4.5.3.   Оператор SCREEN...................................... 49
 4.5.4.   Оператор LOCATE...................................... 50
 4.6.   Операторы и функции графики............................ 51
 4.6.1.   Оператор PSET........................................ 51
 4.6.2.   Оператор PRESET...................................... 52
 4.6.3.   Функция POINT........................................ 52
 4.6.4.   Оператор LINE........................................ 53
 4.6.5.   Оператор CIRCLE...................................... 54
 4.6.6.   Оператор PAINT....................................... 55
 4.6.7.   Оператор DRAW........................................ 56
 4.7.   Оператор управления звуком............................. 58
 4.7.1.   Оператор BEEP........................................ 58
 4.8.   Операторы трассировки программы........................ 59
 4.8.1.   Оператор TRON........................................ 59
 4.8.2.   Оператор TROFF....................................... 59

 5.  ФУНКЦИИ................................................... 60

 5.1.   Числовые функции....................................... 60
 5.1.1.   Функция SQR.......................................... 60
 5.1.2.   Функция SIN.......................................... 60
 5.1.3.   Функция COS.......................................... 61
 5.1.4.   Функция TAN.......................................... 61
 5.1.5.   Функция ATN.......................................... 61

                              - 5 -

                        У1.00031-01 35 01


 5.1.6.   Функция PI........................................... 62
 5.1.7.   Функция EXP.......................................... 62
 5.1.8.   Функция LOG.......................................... 63
 5.1.9.   Функция ABS.......................................... 63
 5.1.10.  Функция FIX.......................................... 63
 5.1.11.  Функция INT.......................................... 64
 5.1.12.  Функция SGN.......................................... 64
 5.1.13.  Функция RND.......................................... 65
 5.1.14.  Функция FRE.......................................... 65
 5.2.   Функции преобразования типов........................... 66
 5.2.1.   Функция CINT......................................... 66
 5.2.2.   Функция CSNG......................................... 67
 5.2.3.   Функция CDBL......................................... 67
 5.3.   Функции непосредственного обращения к памяти........... 67
 5.3.1.   Функция PEEK......................................... 68
 5.3.2.   Функция INP.......................................... 68
 5.4.   Символьные функции..................................... 69
 5.4.1.   Функция ASC.......................................... 69
 5.4.2.   Функция CHR¤......................................... 70
 5.4.3.   Функция LEN.......................................... 70
 5.4.4.   Функция MID¤......................................... 71
 5.4.5.   Функция STRING¤...................................... 72
 5.4.6.   Функция VAL.......................................... 73
 5.4.7.   Функция INKEY¤....................................... 73
 5.4.8.   Функция STR¤......................................... 74
 5.4.9.   Функция BIN¤......................................... 74
 5.4.10.  Функция OCT¤......................................... 75
 5.4.11.  Функция HEX¤......................................... 75
 5.5.   Вспомогательные функции ввода/вывода................... 76
 5.5.1.   Функция CSRLIN....................................... 76
 5.5.2.   Функция POS.......................................... 76
 5.5.3.   Функция LPOS......................................... 77
 5.5.4.   Функция EOF.......................................... 77
 5.6.   Функции оператора PRINT................................ 78
 5.6.1.   Функция AT........................................... 78
 5.6.2.   Функция TAB.......................................... 78
 5.6.3.   Функция SPC.......................................... 79
 5.7.   Функции, определенные пользователем.................... 80
 5.7.1.   Функции FN........................................... 80
 5.7.2.   Функции USR.......................................... 80

 ПРИЛОЖЕНИЕ  1. СООБЩЕНИЯ ОБ ОШИБКАХ..........................  82


 ПРИЛОЖЕНИЕ  2. СПИСОК КОМАНД, ОПЕРАТОРОВ И ФУНКЦИЙ...........  86


 ПРИЛОЖЕНИЕ  3. ТАБЛИЦА КОДОВ КОИ-7  "ЭЛЕКТРОНИКИ МС 0511"....  94


 ПРИЛОЖЕНИЕ  4. ЗАРЕЗЕРВИРОВАННЫЕ В БЕЙСИК-СИСТЕМЕ СЛОВА......  96

                              - 6 -

                        У1.00031-01 35 01


                        1. ОБЩИЕ СВЕДЕНИЯ



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



       1.1. Косвенный режим


      Чаще  всего  программа  на  языке  БЕЙСИК   записывается   в
 косвенном режиме. В этом случае каждая строка начинается с номера
 строки. За номером строки  следует  оператор. Завершается  строка
 управляющим  символом  <ПС>  (перевод  строки),  получаемым   при
 нажатии на клавишу <ВВОД>. Номер строки должен быть  в  диапазоне
 от 0 до 65535. Номер строки выполняет две функции: во-первых,  он
 служит меткой оператора и может быть использован  для  ссылки  на
 данный  оператор;  во-вторых,  номер  строки  определяет  обычный
 порядок выполнения операторов. Кроме того, наличие номеров  строк
 облегчает  отладку  программы,  т.к.  в   сообщении   об   ошибке
 указывается номер строки, в которой встретилась ошибка.
      Любой из операторов языка БЕЙСИК должен размещаться на одной
 строке, максимальная длина строки - 255 символов.
      Номер строки используется и  при  редактировании  программы.
 Ввод строки, номер которой  уже  существует,  приводит  к  замене
 прежней строки. Ввод только  номера  строки  (  пустая  строка  )
 вызывает стирание соответствующей строки.



       1.2. Непосредственный режим


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

              10 PRINT "ЭЛЕКТРОНИКА МС 0511"

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

              PRINT "ЭЛЕКТРОНИКА МС 0511"

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

              ЭЛЕКТРОНИКА МС 0511

      Непосредственный режим БЕЙСИК-системы позволяет использовать


                              - 7 -

                        У1.00031-01 35 01


 вычислительную машину как очень мощный калькулятор.



       1.3. Сообщения об ошибках


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

              <ОШИБ> в строке YYYYY

 где <ОШИБ> - сокращенное название ошибки, YYYYY -  номер  строки,
 содержащей ошибку.
      В  режиме  непосредственного  выполнения  номер  строки   не
 указывается.
      Виды сообщений об ошибках  приведены в приложении 1.



       1.4. Способ описания языка БЕЙСИК


      Для формального описания языка используется ряд обозначений,
 которые необходимо понимать в следующем смысле:
        - информация,  записанная  прописными  буквами  латинского
          алфавита, постоянна;
        - информация,  записанная  буквами  русского  алфавита   и
          заключенная в треугольные скобки "< >" - переменная;
        - информация, заключенная в квадратные скобки "[  ]",  при
          использовании может быть опущена;
        - из параметров, размещенных друг под другом, должен  быть
          выбран только один;
        - параметр,    заключенный     в     квадратные     скобки
          [<ПАРАМЕТР>...]N,      сопровождаемый       многоточием,
          используется для обозначения многократности; N указывает
          верхний предел возможных повторений параметра; если N не
          указано, то число повторений параметра не определено.


      П_Р_И_М_Е_Ч_А_Н_И_Е. В операторах с несколькими операндами в
 случае, если указаны более дальние операнды, пропущенным операндам
 должны соответствовать запятые, например:

              CIRCLE (100,100),50,,,,2

                              - 8 -

                        У1.00031-01 35 01


       1.5. Основные символы языка


      Все языковые  конструкции  могут  быть  выражены  с  помощью
 основных символов:
        - прописные и строчные буквы латинского алфавита: A B C  D
          E F G H I J K L M N O P Q R S T U V W X Y Z;
        - цифры: 0 1 2 3 4 5 6 7 8 9;
        - специальные символы, приведенные в ТАБЛ 1.

                        СПЕЦИАЛЬНЫЕ СИМВОЛЫ


                                                ТАБЛИЦА 1
------------------------------------------------------------
   СИМВОЛ   !     НАЗВАНИЕ СИМВОЛА
------------------------------------------------------------
               Пробел
    :          Двоеточие
    =          Равно
    +          Плюс
    -          Минус
    *          Звездочка
    /          Наклонная черта
    ^          Надчеркивание или знак возведения в степень
    (          Открывающая скобка
    )          Закрывающая скобка
    ,          Запятая
    ;          Точка с запятой
    .          Точка
    "          Кавычки
    '          Апостроф
    ¤          Знак денежной единицы
    <          Меньше
    >          Больше
    ?          Знак вопроса
    @          Знак "относительно"
    \          Символ целого деления
    &          Амперсанд
    !          Восклицательный знак
    %          Процент
    #          Знак числа
    _          Знак подчеркивания
------------------------------------------------------------

      БЕЙСИК-система использует ряд слов для  обозначения  команд,
 операторов, имен функций  и  т.п.  Изменять  значения  этих  слов
 пользователь   не   может,   поэтому   такие   слова   называются
 зарезервированными.
      К ним в БЕЙСИК-системе относятся:
        - имена команд, например: LIST, SAVE, LOAD, RUN;
        - имена операторов и разделителей, например: LET, IF, THEN,
          GOTO, GOSUB, FOR, NEXT;
        - имена стандартных и символьных функций,  например:  SIN,
          COS, TAN, EXP, LOG, SQR.
      Полный список зарезервированных слов приведен в приложении 4.

                              - 9 -

                        У1.00031-01 35 01


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


      П_Р_И_М_Е_Ч_А_Н_И_Е. Не  допускается  использование  пробела
 внутри зарезервированных слов, чисел и имен переменных.




                  2. ДАННЫЕ И ОПЕРАЦИИ НАД НИМИ






       2.1. Константы


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



     2.1.1. Числовые константы


      В  БЕЙСИК-системе  допустимы  шесть  форм  записи   числовых
 констант:
      1) Целые константы  имеют  вид  десятичных  целых  чисел  со
 знаком или без него.
      Примеры:
              123
              -2345

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

      Примеры:
              2.45
              -102.36

      3) Вещественные константы, записываемые  в  экспоненциальной
 форме, состоят из мантиссы и  порядка,  отделенного  от  мантиссы
 буквой E.

      Примеры:
              235.988E-7=.0000235988
              2359E6=2359000000

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

      4)  Шестнадцатеричные  константы  обозначаются  &H.   Основа
 счисления этих чисел - 16. Для  обозначения  цифр  от  10  до  15

                              - 10 -

                       У1.00031-01 35 01


 используются буквы от A до F.

      Примеры:
              &H76
              &HA2F

      5) Восьмеричные константы обозначаются &O (буква O).  Основа
 счисления  для  этих  чисел  -  8,  поэтому  константы  не  могут
 содержать цифр 8 и 9.

      Примеры:
              &O347
              &O177700

      6) Двоичные константы - это двоичные числа, для  обозначения
 которых используется &B. Эти числа содержат только цифры 1 и 0.

      Примеры:
              &B01110110
              &B10101101



     2.1.2. Типы числовых констант



      По    внутреннему    представлению    числовые     константы
 подразделяются  на  целые, вещественные  одинарной   точности   и
 вещественные двойной точности.
      Для   внутреннего   представления   констант   целого   типа
 используется  одно  слово  памяти  (16  бит).  Это   обеспечивает
 скорость обработки и экономию памяти для их хранения.  Целый  тип
 константы указывает знак % после десятичной константы, например:

              156%
              -3000%

      Целый   тип   имеют   также   двоичные,    восьмеричные    и
 шестнадцатеричные константы.
      Вещественные числовые константы могут  быть  представлены  с
 одинарной или двойной точностью. Для констант одинарной  точности
 хранятся 7 десятичных цифр, а  для  двойной  -  17  и  выделяются
 соответственно 2 или 4 машинных слова.  По  умолчанию  в  БЕЙСИК-
 системе точность для констант принимается одинарной.
      Константа одинарной точности различается по признакам:

        - для ее  записи  используется  экспоненциальная  форма  с
          буквой E;
        - при ее записи используется восклицательный знак <!>;
        - любая запись числа без указания типа.

      Примеры:
              3451415.92
              -1.09E-09
              23.567!

      Константа двойной точности различается по признакам:
        - экспоненциальная форма записи с буквой D;

                              - 11 -

                       У1.00031-01 35 01


        - признак числа двойной точности #.

      Примеры:
              -1.09432D-09
              348.9#



     2.1.3. Текстовая константа


      Формальное описание текстовой константы:

      <ТЕКСТОВАЯ КОНСТАНТА>::="[<СИМВОЛ>...]255"

      Текстовая константа - последовательность  символов  (цепочка
 знаков), заключенная в кавычки.  Количество  символов  не  должно
 превышать 255.
      Символ пробела внутри цепочки знаков является значащим.

      Примеры:
              "Привет"
              "ЭЛЕКТРОНИКА МС 0511"



      2.2. Переменные





     2.2.1. Определение переменной


      Формальное определение переменной:

      <ПЕРЕМЕННАЯ>::=<ПРОСТАЯ ПЕРЕМЕННАЯ>
                    <ИНДЕКСИРОВАННАЯ ПЕРЕМЕННАЯ>

      <ПРОСТАЯ ПЕРЕМЕННАЯ>::=<ИМЯ ПЕРЕМЕННОЙ>

      <ИНДЕКСИРОВАННАЯ ПЕРЕМЕННАЯ>::=
<ИМЯ ПЕРЕМЕННОЙ>(<ИНДЕКС>[,<ИНДЕКС>...])

      Переменные,  идентифицирующие  числовые  данные,  называются
 числовыми  переменными;  переменные,  идентифицирующие  текстовые
 данные, называются символьными  переменными.  Максимальная  длина
 значения символьной переменной может быть 255 символов.
      Переменные  имеют   символическое   имя   -   идентификатор,
 состоящий из любого количества букв латинского алфавита  и  цифр;
 из них учитываются только две первые. Имя переменной  обязательно
 должно начинаться буквой. Имя  переменной  в  конце  может  иметь
 знак, определяющий тип переменной:

              ¤   символьные;

                              - 12 -

                       У1.00031-01 35 01


              %   целые;
              !   вещественные одинарной точности;
              #   двойной точности.

      При отсутствии знака считается,  что  переменная  одинарной
 точности.
      Целые  переменные  могут  принимать  значения  из  интервала
 [-32768,32767].

      Примеры:
              L#
              MINIMUM!
              K%
              ABC
              N¤

      Различают  простые  и  индексированные  переменные.  Простые
 переменные   однозначно   обозначают   один    элемент    данных.
 Индексированные переменные идентифицируют элемент  упорядоченного
 набора данных - массива. Каждый элемент массива  идентифицируется
 именем  массива  и  индексами,  заключенными  в  круглые  скобки.
 Индексы  -  это  целые   выражения,   принимающие   положительные
 значения. Число индексных выражений должно соответствовать  числу
 измерений  массива.  Индексные  выражения  разделяются  запятыми.
 Указание  отрицательного  индекса  приводит  к  ошибке   5.   Для
 объявления массивов используется оператор DIM.



       2.3. Выражения и операции



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

        - арифметические;
        - отношения;
        - логические;
        - функции.



     2.3.1. Арифметическое выражение


      <АРИФМЕТИЧЕСКОЕ ::= [+]<ТЕРМ>[[+]<ТЕРМ>...]
       ВЫРАЖЕНИЕ>         [-]       [-]

                           [*]
      <ТЕРМ>::=<МНОЖИТЕЛЬ>[[/]<МНОЖИТЕЛЬ>...]
                           [^]

                      <ПЕРЕМЕННАЯ>
      <МНОЖИТЕЛЬ> ::= <ЧИСЛОВАЯ КОНСТАНТА>

                              - 13 -

                       У1.00031-01 35 01


                     (<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)
                     <ФУНКЦИЯ>

      Арифметическое   выражение   используется    в    операторах
 присваивания,  цикла,  условия,  печати,   определения   функции.
 Элементами  арифметического  выражения  могут  быть   переменные,
 функции,  числовые  константы  или  комбинации  этих   элементов,
 соединенных круглыми скобками, знаками  арифметических  операций,
 знаками отношения и логическими  операциями.  В  выражении  могут
 использоваться произвольное число круглых скобок.  При  нарушении
 соответствия числа  открывающих  и  закрывающих  скобок  выдается
 сообщение об ошибке 2.
      Далее   используется   понятие   целого    выражения.    Это
 арифметическое  выражение,  принимающее  значения  из   интервала
 [-32768,32767].



     2.3.2. Арифметические операции


      Для   обозначения   арифметических   операций   используются
 символы, приведенные в ТАБЛ 2.


                  СИМВОЛЫ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ


                                              ТАБЛИЦА 2
-----------------------------------------------------------
 СИМВОЛ  !           ОБОЗНАЧЕНИЕ               ! ПРИМЕР
ОПЕРАЦИИ !                                     !
-----------------------------------------------------------
   ^     !Возведение в степень (A в степени B) !   A^B
   *     !Умножение (A умножить на B)          !   A*B
   /     !Деление (A делить на B)              !   A/B
   \     !Целочисленное деление (A делить на B)!   A\B
  MOD    !Деление по модулю (остаток от        !
         !                 деления A на B)     ! A MOD B
   +     !Сложение (A плюс B)                  !   A+B
   -     !Вычитание (A минус B)                !   A-B
   (     !Открывающая скобка                   !
   )     !Закрывающая скобка                   !B/(A*(B+C))
------------------------------------------------------------
      При   вычислении   арифметических   выражений    соблюдается
 следующий приоритет выполнения арифметических операций и скобок:

      1) действие в скобках;
      2) возведение в степень;
      3) умножение и деление;
      4) целочисленное деление;
      5) деление по модулю;
      6) сложение и вычитание

      Примеры:
              PRINT 10\4
               2
              Ok
              PRINT 10.4 MOD 4


                              - 14 -

                       У1.00031-01 35 01


               2
              Ok



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



      Операции отношения используются для сравнения двух величин в
 операторах условного перехода. Можно рассматривать, что результат
 сравнения принимает два значения целого типа: "ИСТИНА" - во  всех
 битах единицы, что соответствует -1 (минус 1), а "ЛОЖЬ" - во всех
 битах  нули,  что соответствует 0. Как "ИСТИНА" трактуется  также
 любое ненулевое значение.
      Операции отношения приведены в ТАБЛ 3.

                                                        ТАБЛИЦА 3

  ---------------------------------------------
  ! ОПЕРАЦИЯ ! ПРОВЕРЯЕМОЕ   !      ПРИМЕР    !
  !          !  ОТНОШЕНИЕ    !                !
  !----------!---------------!----------------!
  !    =     ! Равенство     !       X=Y      !
  ! <>   ><  ! Неравенство   ! X<>Y или X><Y  !
  !    =     ! Меньше        !       X<Y      !
  !    =     ! Больше        !       X>Y      !
  !    =     ! Меньше или    !       X<=Y     !
  !    =     ! равно         !                !
  !    =     ! Больше или    !       X>=Y     !
  !    =     ! Равно         !                !
  ---------------------------------------------

      Операции отношений являются менее приоритетными по отношению
 к арифметическим. Например, значение выражения

              X+Y=X*Y

      равно минус 1, когда X+Y равно X*Y.



     2.3.4. Логические операции.



      Логические  операции  используются  для  работы  с  наборами
 битов, представленными в виде  16-битных  целых  чисел.  Значение
 каждого бита результата зависит от значений соответствующих битов
 операндов.
      Приведем таблицы, определяющие логические операции:

      NOT
              X   NOT X
              0    1
              1    0

                              - 15 -

                       У1.00031-01 35 01


      AND
              X    Y    X AND Y
              0    0       0
              0    1       0
              1    0       0
              1    1       1

      OR
              X    Y    X OR Y
              0    0       0
              0    1       1
              1    0       1
              1    1       1

      XOR
              X    Y    X XOR Y
              0    0       0
              0    1       1
              1    0       1
              1    1       0

      EQV
              X    Y    X EQV Y
              0    0       1
              0    1       0
              1    0       0
              1    1       1

      IMP
              X    Y    X IMP Y
              0    0       1
              0    1       1
              1    0       0
              1    1       1

      Результат  логических  операций  можно   рассматривать   как
 "ИСТИНУ" (ненулевой результат)  или  "ЛОЖЬ"  (нуль),  поэтому  их
 удобно применять для объединения нескольких операций отношения  в
 операторах условного перехода.

      Примеры:
              IF A=200 AND F<4 THEN 80
              IF I=10 OR K>=0 THEN 50
              IF NOT P THEN 100

      В   смешанных   выражениях   логические    операции    менее
 приоритетны, чем арифметические и операции отношений. Очередность
 выполнения логических операций осуществляется согласно следующему
 приоритету:

      1. NOT ;
      2. AND ;
      3. OR ;
      4. XOR и EQV ;
      5. IMP .

      Примеры работы логических операций:

                              - 16 -

                       У1.00031-01 35 01


      В десятичном              В двоичном
      представлении             представлении

              63                       111111
         AND
              16                        10000
         =
              16                        10000


              -1             1111111111111111
         AND
               8                         1000
         =
               8                         1000


               4                          100
         OR
               2                           10
         =
               6                          110




     2.3.5. Функции


      Функции - это заранее  определенные  операции  над  данными.
 БЕЙСИК-система имеет  "встроенные"  функции,  которые  называются
 стандартными. Примером таких  функций  могут  служить  SQR(  )  -
 квадратный корень или SIN( ) - синус. Более подробно  стандартные
 функции описываются далее.



     2.3.6. Преобразование типов


      Преобразование типов в БЕЙСИК-системе  определяют  несколько
 правил:

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

      Пример:
              10 A%=23.42
              20 PRINT A%
              RUN
              23
              Ok

      2) во время вычисления  значения  арифметического  выражения
 все операнды преобразуются в один тип данных -  тот,  к  которому
 относится операнд, имеющий наибольшую точность.

                              - 17 -

                       У1.00031-01 35 01


      Пример:
              10 D#=6/7!
              20 PRINT D#
              RUN
               .85714285714285714
              Ok
      (арифметическое  выражение   было   подсчитано   с   двойной
 точностью).

      Пример:
              10 D!=6/7!
              20 PRINT D!
              RUN
               .8571429
              Ok
      (при   присвоении   результата   арифметического   выражения
 переменной D! произошло округление из-за разницы в типах).

      3) логические операции преобразуют свои операнды в целый тип
 и дают целочисленный результат.

      4) при преобразовании типов из двойной точности в  одинарную
 происходит   округление.   При   преобразовании   в   целый   тип
 отбрасывается дробная часть.

      Пример:
              10 C%=55.88
              20 C!=1.23456789
              30 PRINT C%
              40 PRINT C!
              RUN
              55
               1.234568
              Ok

      При преобразовании  в  целый  тип  значения,  выходящего  из
 пределов [-32768,32767], происходит ошибка 6.



     2.3.7. Операции над строками символов


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

      Пример:
              10 A¤="ИМЯ"
              20 B¤=" ФАЙЛА"
              30 PRINT A¤+B¤
              40 PRINT "НОВОЕ "+ A¤+B¤
              RUN
              ИМЯ ФАЙЛА
              НОВОЕ ИМЯ ФАЙЛА
              Ok

                              - 18 -

                       У1.00031-01 35 01

      Строки можно сравнивать операциями отношений

              =  <>   ><    <   >    <=    >=

      Сравнение  производится  над  кодами   КОИ-7,   взятыми   из
 соответствующих строк. Если все  коды  совпадают,  значит  строки
 равны. Если коды КОИ-7 символов различаются, то меньше та строка,
 у которой код рассматриваемого символа меньше. Если  одна  строка
 кончается, а другая  -  нет,  то  более  короткая  строка  меньше
 (пробелы учитываются).

      Примеры (результат всех выражений - "ИСТИНА"):

              "AA"  <> "AB"
              "A"   =  "A"
              "X&"  >  "X "
              "CL " >  "CL"
              B¤    <  "9.12.84" , ЕСЛИ B¤="8.12.8"
              "AAC" <  "ABB"




                        3. КОМАНДЫ СИСТЕМЫ



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



       3.1. Команды пуска программы





     3.1.1. Команда RUN


      Команда начинает выполнение программы.

      Формат:
              RUN [<АРГУМЕНТ>]


      Команда RUN позволяет выполнить загруженную в ОЗУ программу.
 По  этой  команде  сначала  создается  объектный  код  программы,
 производится  распределение  памяти,  а   затем   объектный   код
 запускается на выполнение. Обычно выполнение начинается с  первой
 строки программы. Если используется аргумент, то он указывает,  с
 какой строки программы следует начать ее выполнение.  При  каждом
 новом вводе команды RUN  старый  объектный  код  и  таблица  имен
 полностью стираются и формируются заново.

      Пример:
              RUN
              RUN 100

                              - 19 -

                       У1.00031-01 35 01


      (начинает выполнение программы со строки с номером 100).



     3.1.2. Команда CONT



      Команда продолжает выполнение программы  с  того  места,  на
 котором оно было прервано.

      Формат:
              CONT

      Выполнение программы приостанавливается  всякий  раз,  когда
 встречаются операторы STOP, END или при нажатии  клавиши  <СТОП>.
 Команда CONT продолжает выполнение программы  с  того  места,  на
 котором оно было прервано. На самом деле выполняется команда GOTO
 по  номеру  "старой"  строки.  Если  после  прерывания  программы
 производятся действия, после  которых  ее  выполнение  невозможно
 (например, была отредактирована строка текста программы), попытка
 продолжить ее выполнение  при  помощи  команды  CONT  приводит  к
 ошибке 17.
      Команда CONT в сочетании с оператором STOP и клавишей <СТОП>
 широко   используется   во   время   отладки   программы.   После
 приостановки  программы  можно   распечатать   текущие   значения
 переменных, даже изменить их и продолжить выполнение программы.

      Пример:
              1050 STOP
              RUN
              СТОП в строке 1050
              Ok
              ? A¤
              ПЕРВЫЙ
              Ok
              CONT



     3.1.3. Клавиша (команда) <СУ> <A>



      Клавишами <СУ> <A> программу  можно  выполнить  в  пошаговом
 режиме, т. е., по одной строке (см. Руководство оператора.
 У1.00031-01 34 02).

                              - 20 -

                       У1.00031-01 35 01


     3.1.4. Команда SYSTEM



      Команда осуществляет переход в мониторную систему  микро-ЭВМ
 "Электроника МС 0511".

      Формат:
               SYSTEM

      Команда  используется  для  передачи  управления  мониторной
 системе микро-ЭВМ.



       3.2. Хранение программ на кассетной магнитной ленте



      Тексты программ пользователей "Электроника МС 0511" хранятся
 на  кассетной  магнитной  ленте.   Описываемые   дальше   команды
 предназначены  для  чтения  (записи)  текста  программы  с   (на)
 магнитной ленты. Также имеются команды для хранения на  магнитной
 ленте двоичной информации.
      Для идентификации программ используется спецификация файла -
 текстовая константа,  содержащая  символическое  имя  файла.  Имя
 файла может состоять не более чем из шести символов.
      В командах BLOAD и BSAVE границы областей памяти указываются
 при помощи адреса - целой константы из интервала  [0,65535].  Для
 удобства   адрес   также   можно   задавать   шестнадцатеричными,
 восьмеричными и двоичными константами.



     3.2.1. Команда LOAD



      Команда загружает  текст  программы  пользователя  (в  кодах
 КОИ-7).

      Формат:
              LOAD <СПЕЦИФИКАЦИЯ ФАЙЛА>[,R]

      При наличии R программа после  ее  загрузки  запускается  на
 выполнение.
      Команда  используется   для   загрузки   текста   программы,
 размещенного на кассетной магнитной ленте с помощью команды SAVE.
 Наличие параметра R приводит  к  немедленному  запуску  программы
 после ее загрузки. Текст программы представлен на магнитной ленте
 в кодах КОИ-7.

      Пример:
              LOAD "MOD2",R
              MOD2  .ASC  003
              Ok

                              - 21 -

                       У1.00031-01 35 01


     3.2.2. Команда SAVE



      По этой команде текст программы пользователя записывается на
 кассетную магнитную ленту ( в кодах КОИ-7).

      Формат:
              SAVE <СПЕЦИФИКАЦИЯ ФАЙЛА>


      Эта команда предназначена для  записи  текста  программы  на
 кассетную магнитную ленту в кодах КОИ-7.
      Главное применение команды SAVE - сохранить текст  программы
 пользователя на магнитной ленте.

      Пример:
              FILES "ПЕРВЫЙ.COD"
              ПЕРВЫЙ.COD
              Ok
              SAVE "ВТОРОЙ"
              Ok



     3.2.3. Команда MERGE



      Команда объединяет текст программы в памяти  ЭВМ  с  текстом
 программы, загружаемым с кассетной магнитной ленты.

      Формат:
              MERGE <СПЕЦИФИКАЦИЯ ФАЙЛА>


      При  выполнении  этой  команды   загружается   программа   с
 магнитной ленты и объединяется с программой, хранящейся в памяти.
 Загружаемая программа должна быть в формате КОИ-7.
      В случае совпадения  номера  загружаемой  строки  с  номером
 строки, хранящейся в памяти, при объединении текстов  оставляется
 загруженная строка.
      Команда позволяет при помощи DELETE, RENUM и SAVE  запомнить
 часть одной программы, а потом объединить ее с другой программой.
 MERGE всегда портит объектный код и  аннулирует  все  определения
 имен, что требует новой компиляции всей программы.
      Наличие  этой  команды  в  системе  позволяет   хранить   на
 магнитной ленте набор типовых программ.

      Пример:
              LOAD "ПЕРВЫЙ"
              ПЕРВЫЙ.ASC  005
              Ok
              MERGE "ВТОРОЙ"
              ВТОРОЙ.ASC  001
              Ok

                              - 22 -

                       У1.00031-01 35 01


     3.2.4. Команда CLOAD



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

      Формат:
              CLOAD <СПЕЦИФИКАЦИЯ ФАЙЛА>


      Команда  загружает  с  магнитной  ленты   текст   программы,
 хранящейся во внутреннем представлении системы.  Текст  программы
 должен быть записан командой CSAVE.

      Пример:
              CLOAD "ПЕРВЫЙ"
              ПЕРВЫЙ.COD
              Ok



     3.2.5. Команда CSAVE



      Команда записывает текст программы  на  магнитную  ленту  во
 внутреннем формате системы.

      Формат:
              CSAVE <СПЕЦИФИКАЦИЯ ФАЙЛА>


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

      Пример:
              CSAVE "1001"
              Ok



     3.2.6. Команда FILES



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

      Формат:
              FILES [<СПЕЦИФИКАЦИЯ ФАЙЛА>]


      Команда FILES позволяет вывести на экран  список  файлов  на
 магнитной  ленте.  Имя  нужного  файла  указывается   аргументом.
 Команду  удобно  использовать  при  указании  свободного  участка
 магнитной ленты для записи нового файла.
      Как и команда LOAD, эта команда при чтении выдает  на  экран


                             - 23 -

                       У1.00031-01 35 01


 имена всех обнаруженных файлов и их типы.
      Если имя файла не указано, то команда просто выдает на экран
 имена всех считанных файлов.
      При   выполнении  команды  содержание   ОЗУ   не   меняется.
 Выполнение команды можно прервать нажатием клавиши <СТОП>.

      Пример:
              FILES "ПЕРВЫЙ"
              ПЕРВЫЙ.DAT
              Ok
              SAVE "ВТОРОЙ"
              Ok



     3.2.7. Команда BLOAD


      Загружает  "двоичный"  файл  (машинный  код  или  данные)  в
 память.

      Формат:
              BLOAD <АРГУМЕНТ1>[,R][<АРГУМЕНТ2>]

      <АРГУМЕНТ1>::= СПЕЦИФИКАЦИЯ ФАЙЛА;

      R   ЯВЛЯЕТСЯ ПРИЗНАКОМ НЕМЕДЛЕННОГО ЗАПУСКА ПРОГРАММЫ
          ПОСЛЕ ЕЕ ЗАГРУЗКИ;

      <АРГУМЕНТ2>::= АДРЕС НАЧАЛЬНОЙ ЗАГРУЗКИ ФАЙЛА.

      Команда загружает содержимое файла, записанного на кассетную
 магнитную  ленту  с  помощью  команды  BSAVE.  В  файле  хранятся
 начальный адрес и  длина  массива,  согласно  которым  содержимое
 файла размещается в памяти машины.
      При  наличии  второго  аргумента,  т.е.  R,  после  загрузки
 содержимого  файла  происходит  немедленный  запуск  программы  с
 начального  адреса  загрузки.  Указав  третий   аргумент,   можно
 разместить содержимое файла в  памяти,  начиная  с  произвольного
 адреса  оперативной  памяти.  При  отсутствии  аргумента  R   для
 указания АРГУМЕНТА 2 дополнительная запятая не требуется.
      Загрузку можно прервать нажатием клавиши  <СТОП>.  Во  время
 загрузки на экран выдается имя файла.
      Команда   позволяет   загрузить   программы    в    машинном
 представлении  в  оперативную  память  с  целью  их   дальнейшего
 использования посредством функции USR.

      Пример:
              CLEAR 200,&HF40
              Ok
              BLOAD "DATA",&HF40
              DATA  .BIN
              Ok
              BLOAD "PROG",R
              PROG  .BIN
      (файл PROG загружен и запущен с начала).

                              - 24 -



                       У1.00031-01 35 01


     3.2.8. Команда BSAVE


      Записывает  содержимое  оперативной  памяти   на   кассетную
 магнитную ленту.

      Формат:
              BSAVE <АРГУМЕНТ1>,<АРГУМЕНТ2>,<АРГУМЕНТ3>

      <АРГУМЕНТ1>::= СПЕЦИФИКАЦИЯ ФАЙЛА;

      <АРГУМЕНТ2>::= АДРЕС НАЧАЛА СОХРАНЯЕМОЙ ОБЛАСТИ ПАМЯТИ;

      <АРГУМЕНТ3>::= АДРЕС КОНЦА СОХРАНЯЕМОЙ ОБЛАСТИ.

      При выполнении этой команды содержимое  оперативной  памяти,
 начиная с адреса, указанного  АРГУМЕНТОМ  2,  и  кончая  адресом,
 указанным АРГУМЕНТОМ 3, сохраняется на кассетной магнитной  ленте
 в файле, имя которого указано АРГУМЕНТОМ 1. При отсутствии  имени
 файла выдается сообщение об ошибке 5, при отсутствии аргументов -
 об ошибке 2. Выполнение команды можно прервать  нажатием  клавиши
 <СТОП>. Кроме содержимого памяти на магнитную ленту  записываются
 начальный адрес и длина области оперативной памяти.
      В основном эта команда дает возможность сохранять содержимое
 оперативной  памяти  на  магнитной  ленте  в  двоичном   формате.
 Особенно  полезно ее  использование  при   сохранении   программ,
 написанных на машинном языке и используемых в БЕЙСИК-системе  при
 помощи функции USR.

      Пример:
              BSAVE "PROG",&O10000,&O20000
              Ok



       3.3. Работа с текстами программ



      При работе с текстами программ используется  понятие  номера
 строки - целой константы из  интервала  от  0  до  65535.  Вместо
 номера строки можно использовать символ ".", означающий "текущую"
 строку. "Текущая строка" - это  строка,  которая  последней  была
 редактирована, выведена на  экран  или  строка,  в  которой  была
 обнаружена ошибка.

                              - 25 -

                       У1.00031-01 35 01


     3.3.1. Команда LIST


      Команда выводит текст  программы  на  экран  или  печатающее
 устройство.

      Формат:
              [L]LIST [<АРГУМЕНТ1>][-[<АРГУМЕНТ2>]]

      <АРГУМЕНТ1>::= НОМЕР    ПЕРВОЙ   СТРОКИ   ВЫВОДИМОГО
                     ФРАГМЕНТА ПРОГРАММЫ;

      <АРГУМЕНТ2>::= НОМЕР ПОСЛЕДНЕЙ СТРОКИ;

      L УКАЗЫВАЕТ, ЧТО ТЕКСТ ПРОГРАММЫ  БУДЕТ ВЫВОДИТЬСЯ НА
        ПЕЧАТАЮЩЕЕ УСТРОЙСТВО.

      Команда LIST выводит текст программы  на  экран,  а  команда
 LLIST - на печатающее устройство. При выводе  текста  за  номером
 строки идет пробел, а далее непосредственно сам текст строки.
      Если  оба  аргумента  опущены,  то   выводится   весь  текст
 программы. Если задан только один аргумент, то выводится строка с
 указанным номером. Тире перед номером  строки  (или  после  него)
 указывает, что надо выводить весь текст до (или после)  строки  с
 указанным номером, включая эту строку. Если заданы оба аргумента,
 то выводятся все строки с номерами из указанного  интервала.  Для
 указания номера "текущей" строки можно использовать символ ".".
      Следует отметить, что эта команда  не  проверяет  наличие  в
 программе строк с указанными номерами,  поэтому  в  таком  случае
 сообщения  об  ошибке  не  выдается.  Однако,  если  в  программе
 существуют строки с  номерами  из  заданного  интервала,  то  они
 выводятся  на  указанное  устройство.  Если  строк  с  указанными
 номерами нет в программе, то выполнение  команды  оканчивается  и
 выводится приглашение "Ok".
      Вывод строк можно приостановить  одновременным  нажатием  на
 клавиши <СУ> и <@>. Продолжение действий - нажатие любой клавиши.
 Как всегда, любые действия прерывает клавиша <СТОП>.

      Пример:
              200 REM ПОСЛЕДНЯЯ
              150 REM СРЕДНЯЯ
              100 REM ПЕРВАЯ
              LIST .
              100 REM ПЕРВАЯ
              Ok
              LIST -175
              100 REM ПЕРВАЯ
              150 REM СРЕДНЯЯ
              Ok

                              - 26 -

                       У1.00031-01 35 01


     3.3.2. Команда DELETE


      Команда удаляет строки текста программы.

      Формат:
              DELETE [<АРГУМЕНТ1>][-[<АРГУМЕНТ2>]]

      <АРГУМЕНТ1>::= НОМЕР    ПЕРВОЙ   СТРОКИ   УДАЛЯЕМОГО
                     ФРАГМЕНТА ПРОГРАММЫ;

      <АРГУМЕНТ2>::= НОМЕР ПОСЛЕДНЕЙ СТРОКИ.

      По  этой  команде  удаляются  строки,  начиная   с   номера,
 указанного АРГУМЕНТОМ 1, до номера, указанного АРГУМЕНТОМ 2. Если
 АРГУМЕНТ 1 опущен, то вместо него  берется  номер  первой  строки
 программы. Аналогично, если опущен аргумент  2,  то  вместо  него
 берется  номер  последней  строки  программы.  Если  в   качестве
 АРГУМЕНТА 1 (или АРГУМЕНТА 2) задается ".", то берется  "текущая"
 строка программы. В  отличие  от  команды  LIST,  если  в  тексте
 программы строка с указанным номером не существует,  то  выдается
 сообщение об ошибке 8.

      ПРИМЕЧАНИЕ: эта команда может удалить всю программу  или  ее
 часть, поэтому пользоваться ею надо очень осторожно.

      Пример:
              DELETE 100-200
              Ok
              DELETE .
              Ok
              DELETE -5000
              Ok
              DELETE 50-.
              Ok
              DELETE 135
              Ok



     3.3.3. Команда RENUM


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

      Формат:
            RENUM [<АРГУМЕНТ1>][,< АРГУМЕНТ2>][,< АРГУМЕНТ3>]

      < АРГУМЕНТ1>::= НОМЕР  ПЕРВОЙ  СТРОКИ ПЕРЕНУМЕРОВАННОГО
                      ФРАГМЕНТА;

      < АРГУМЕНТ2>::= НОМЕР   СТРОКИ,   С  КОТОРОГО НАЧИНАЕТСЯ
                      ПЕРЕНУМЕРОВЫВАЕМЫЙ ФРАГМЕНТ;

      < АРГУМЕНТ3>::= ШАГ  ПЕРЕНУМЕРАЦИИ, ЦЕЛАЯ КОНСТАНТА  ИЗ
                      ИНТЕРВАЛА [0,65535].

      По умолчанию АРГУМЕНТ 1 и АРГУМЕНТ 3 равны 10, а АРГУМЕНТ  2

                              - 27 -

                       У1.00031-01 35 01


 равен номеру  первой  строки  программы.  Вместо  АРГУМЕНТА  1  и
 АРГУМЕНТА 2 можно использовать точку -  она  указывает  на  номер
 "текущей" строки.

      Эта  команда  применяется  для  изменения  номеров  строк  в
 программе. RENUM также проверяет, все ли строки,  номера  которых
 указаны в операторах, действительно существуют. Если  обнаружено,
 что строки с указанным  номером  в  программе  нет,  то  выдается
 сообщение об ошибке 8.

      Эта команда перенумеровывает строки  программы,  начиная  со
 строки с номером,  заданным  АРГУМЕНТОМ  2.  Номеру  этой  строки
 присваивается  значение  АРГУМЕНТА  1,   а   последующие   строки
 нумеруются с шагом, заданным АРГУМЕНТОМ 3.

      Пример:
         RENUM 60,55
         RENUM ,,5



     3.3.4. Команда AUTO



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

      Формат:
              AUTO [<АРГУМЕНТ1>][,<АРГУМЕНТ2>]

      <АРГУМЕНТ1>::= НАЧАЛЬНЫЙ НОМЕР СТРОКИ;

      <АРГУМЕНТ2>::= ПРИРАЩЕНИЕ,   ЧИСЛО   ИЗ   ИНТЕРВАЛА
                     [0,65535].

      Команда AUTO позволяет задавать автоматический ввод  номеров
 строк при вводе  текста  программы,  т.е.,  при  нажатии  клавиши
 <ВВОД>, генерируется и выводится на экран следующий номер строки.
 номера строк  увеличиваются  с  шагом,  равным  значению  второго
 аргумента. При отсутствии первого, второго или обоих   аргументов
 считается, что они равны 10.
      Точка, указанная на месте первого аргумента, рассматривается
 как номер "текущей" строки.
      Если  окажется,  что  строка  с  очередным   сгенерированным
 номером в тексте программы уже существует, этот  текст  выводится
 на экран. После этого  он  может  быть  отредактирован  и  введен
 нажатием клавиши <ВВОД>. Если редакции строки не  требуется,  то,
 нажав клавишу <ВВОД>, можем перейти к вводу следующей строки.
      Для  окончания  режима  AUTO  достаточно   нажать    клавишу
 <СТОП> или <СУ> и <C>  одновременно,  что  возвращает  систему  в
 непосредственный режим.

      Пример:
              110 END
              AUTO 100
              100 PRINT "ПРИМЕР"
              110 END (НАЖИМАЙТЕ КЛАВИШУ "ВВОД")

                              - 28 -

                       У1.00031-01 35 01


              120     (НАЖИМАЙТЕ  КЛАВИШИ   <СУ>   И   <C>
                       ОДНОВРЕМЕННО)
              LIST
              100 PRINT "ПРИМЕР"
              110 END
              Ok




     3.3.5. Команда NEW



      По этой команде удаляется программа пользователя.

      Формат:
              NEW

      Команда используется для очистки всех  переменных  программы
 (оператор CLEAR) и удаления программы из памяти.




                           4. ОПЕРАТОРЫ



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



       4.1. Основные операторы


      К основным  операторам  относятся:  операторы  присваивания,
 безусловного   и   условного   перехода,   цикла,   обращения   к
 подпрограмме и др.
      В операторах перехода  используются  номера  строк  -  целые
 константы  из  интервала  [0,65535].  Использование  точки  (".")
 вместо номера строки недопустимо.



     4.1.1. Оператор LET



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

      Формат:
              [LET] <АРГУМЕТ>=<ВЫРАЖЕНИЕ>

      <АРГУМЕНТ>::=<ПЕРЕМЕННАЯ>
                   <ФУНКЦИЯ MID¤>

                              - 29 -

                       У1.00031-01 35 01


      Оператор  LET  служит  для  присвоения  значения  выражения,
 находящегося справа от знака равенства,  переменной,  находящейся
 слева от этого знака. Тип  выражения  должен  совпадать  с  типом
 переменной.
      При  присваивании,   если   это   необходимо,   производится
 преобразование типов  переменных.  Попытка  присвоить  символьное
 значение числовой переменной или наоборот приведет к ошибке 13.
      Заметим, что слово LET в этом операторе не обязательно.

      Пример:
              10 LET X=1
              20 Y=2*3
              30 A¤=B¤+" "
              40 LET D¤=A¤
              50 MID¤(C¤,1%,2%)=D¤



     4.1.2. Оператор GOTO



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

      Формат:
             GOTO <НОМЕР СТРОКИ>

      Оператор перехода GOTO служит  для  изменения  естественного
 порядка  выполнения  программы  (т.е.,   выполнения   в   порядке
 возрастания номеров строк).
      При  выполнении  оператора  GOTO  управление  передается  на
 строку с указанным  номером.  Если  строка  с  указанным  номером
 отсутствует, выдается сообщение об ошибке 8.

      Пример:
              10 INPUT X
              20 IF X<>0 THEN GOTO 40
              30 END
              40 PRINT X
              50 GOTO 10



     4.1.3. Оператор GOSUB



      Оператор передает управление подпрограмме.

      Формат:
              GOSUB <НОМЕР СТРОКИ>

      Оператор GOSUB используется для вызова подпрограммы - группы
 операторов, которая  начинается  с  указанного  номера  строки  и
 заканчивается оператором RETURN. Подпрограмма может находиться  в
 любом месте программы и вызываться  сколько  угодно  раз.  RETURN
 возвратит   управление   оператору,   следующему   за   вызвавшим
 подпрограмму оператором GOSUB.


                              - 30 -

                       У1.00031-01 35 01


      При отсутствии строки с указанным номером выдается сообщение
 об ошибке 8. Вход в подпрограмму не через GOSUB  вызывает  ошибку
 3.



     4.1.4. Оператор RETURN



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

      Формат:
              RETURN

      RETURN осуществляет возврат к оператору,  который  находится
 непосредственно  за  оператором,  вызвавшим  подпрограмму.  После
 возвращения  все  незаконченные  циклы  FOR-NEXT  в  подпрограмме
 завершаются, т.е., вся информация о них "забывается", например:

               10 GOSUB 100
               20 END
              100 FOR I=1 TO 10
              110 PRINT "KUKU"
              120 RETURN
              RUN
              KUKU
              Ok

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

                              - 31 -

                       У1.00031-01 35 01



      Пример:
              10 I=1
              20 GOSUB 100
              30 I=2
              40 GOSUB 100
              50 END
              100 REM ПОДПРОГРАММА
              110 PRINT "SUB";I
              120 RETURN



      4.1.5. Оператор IF



      Оператор IF  выполняет  одну  из  ветвей  в  зависимости  от
 условия.

      Формат:
               THEN <ОПЕРАТОР>             <ОПЕРАТОР>
  IF <АРГУМЕНТ>                     [ ELSE                ]
               THEN  <НОМЕР СТРОКИ>        <НОМЕР СТРОКИ>
               GOTO

      <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ УСЛОВИЕ;

      <ОПЕРАТОР>::= ЛЮБОЙ ОПЕРАТОР БЕЙСИКА;

      <НОМЕР СТРОКИ>::= НОМЕР СУЩЕСТВУЮЩЕЙ СТРОКИ.

      Оператор вычисляет значение аргумента и преобразовывает  его
 в целый тип. Нулевой результат считается как "ложь", ненулевой  -
 "истина".
      Если условие оказывается "истина", то выполняется  указанный
 оператор или происходит переход к строке с указанным  номером.  В
 случае номера строки вместо слова THEN можно  использовать  слово
 GOTO.
      Если аргумент  принимает  значение  "ложь",  то  выполняется
 ветвь ELSE или управление сразу же передается  следующей  строке,
 если ветвь ELSE отсутствует.
      В качестве <ОПЕРАТОРА> может быть  любой  оператор  БЕЙСИКА,
 даже другой оператор IF. В качестве условия  обычно  используются
 выражения,  соединенные  операциями   отношения   и   логическими
 операциями.

      Пример:
              10 INPUT A,B,C
              20 IF A<B THEN PRINT A;" < ";B
              30 I%=NOT ( B<C AND A<C )
              40 IF I% GOTO 10 ELSE PRINT A;"И ";B;"< ";C

                              - 32 -

                       У1.00031-01 35 01


     4.1.6. Оператор FOR



      Оператор FOR вместе с оператором NEXT организует циклическое
 выполнение группы операторов.

      Формат:
              FOR <ПАРАМЕТР>=<АРГУМЕНТ1> TO <АРГУМЕНТ2>

      [STEP <АРГУМЕНТ3>]

      <ПАРАМЕТР>::=ЧИСЛОВАЯ ПЕРЕМЕННАЯ (СЧЕТЧИК ПОВТОРЕНИЙ
                   ЦИКЛА);

      <АРГУМЕНТ1>::=АРИФМЕТИЧЕСКОЕ  ВЫРАЖЕНИЕ   (НАЧАЛЬНОЕ
                    ЗНАЧЕНИЕ <ПАРАМЕТРА>);

      <АРГУМЕНТ2>::=АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ
                    КОНЕЦ ПОВТОРЕНИЙ ЦИКЛА;

      <АРГУМЕНТ3>::=АРИФМЕТИЧЕСКОЕ  ВЫРАЖЕНИЕ  (ПРИРАЩЕНИЕ
                    <ПАРАМЕТРА>, ПО УМОЛЧАНИЮ РАВНО 1).

      Во время  первого  выполнения  цикла  значение  АРГУМЕНТА  1
 присваивается ПАРАМЕТРУ цикла. Выполнение операторов, входящих  в
 цикл, продолжается  до  появления  оператора  NEXT.  После  этого
 значение ПАРАМЕТРА увеличивается (или уменьшается, если  значение
 АРГУМЕНТА 3 отрицательное) на значение АРГУМЕНТА 3 и сравнивается
 со значением АРГУМЕНТА 2. Если значение ПАРАМЕТРА больше (меньше,
 если  АРГУМЕНТ  3  отрицательный)  значения   АРГУМЕНТА   2,   то
 выполняются следующие  за  NEXT  операторы,  в  противном  случае
 повторяется выполнение операторов, находящихся между  операторами
 FOR и NEXT.
      Допустимы вложенные циклы. Они не  должны  пересекаться,  т.
 е.  NEXT внутреннего цикла  должен  появиться  раньше,  чем  NEXT
 наружного цикла.
      Возможен  неестественный  выход   из   цикла,   при   помощи
 операторов перехода, минуя оператор NEXT.
      Вход в цикл, минуя оператор FOR, не допускается.



     4.1.7. Оператор NEXT



      Определяет конец операторов цикла.

      Формат:
              NEXT [<ПАРАМЕТР>[,< ПАРАМЕТР >...]]

      <ПАРАМЕТР>::= ЧИСЛОВАЯ   ПЕРЕМЕННАЯ,   СООТВЕТСТВУЮЩАЯ
                    ПАРАМЕТРУ ОПЕРАТОРА FOR.

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

                              - 33 -

                       У1.00031-01 35 01


      NEXT с параметром используется с целью  указания,  к  какому
 FOR  он  относится.  NEXT  со  списком  параметров,   разделенных
 запятыми, используется для заканчивания в одном месте  нескольких
 вложенных циклов. В  таком  случае  первая  переменная  в  списке
 должна принадлежать  самому  внутреннему  циклу,  а  последняя  -
 наружному.  При  заканчивании  наружного   цикла   информация   о
 внутренних циклах теряется, например:
               10 FOR I=1 TO 2
               20 FOR J=1 TO 10
               30 PRINT J
               40 NEXT I
               RUN
                1
                1
               Ok
      Тело цикла должно размещаться в  одной  программной  секции,
 т. е. цикл, объявленный в главной программе, нельзя заканчивать в
 подпрограмме и наоборот.  Вход  в  цикл  не  через  оператор  FOR
 вызывает ошибку 1.

      Пример:
              10 FOR X=1 TO 10
              20 FOR Y=10 TO 1 STEP -2
              30 PRINT Y
              40 NEXT Y
              50 PRINT TAB(3);X
              60 NEXT



     4.1.8. Оператор ON



      Оператор осуществляет ветвление в  зависимости  от  значения
 выражения.

      Формат:
              ON <ВЫРАЖЕНИЕ> [GOTO ] <СПИСОК>
                              GOSUB

      <ВЫРАЖЕНИЕ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ  ЗНАЧЕНИЯ
                     ИНТЕРВАЛА [0,32767].;

      <СПИСОК>::= СПИСОК   НОМЕРОВ    СУЩЕСТВУЮЩИХ    СТРОК,
                  РАЗДЕЛЕННЫХ ЗАПЯТЫМИ.

      Этот оператор позволяет  переход  на  несколько  строк.  При
 выборе  номера  строки  вычисляется  значение   выражения.   Если
 результат равен нулю или больше,чем число номеров строк в списке,
 то управление  передается  следующему  оператору.  Если  значение
 выражения соответствует номеру строки из списка (считая слева  1,
 2 и т.д.), то этот номер строки  употребляется  оператором  GOSUB
 или GOTO.
      Если выполняется оператор GOSUB <НОМЕР СТРОКИ>, то  оператор
 RETURN возвращает управление оператору, следующему за  оператором
 ON.
      Этот оператор употребляется в  том  случае,  если  есть  ряд

                              - 34 -

                       У1.00031-01 35 01


 задач, которые выбираются в зависимости от того,  какое  значение
 принимает выражение. Если задачи короткие и связаны  с  значением
 выражения, то употребляется ON GOTO. Если же эти задачи больше и,
 возможно, связаны с другим оператором ON или к ним  обращаются  с
 других мест программы, то  употребляется  оператор  ON  GOSUB,  и
 каждую задачу нужно оформить в виде подпрограммы.
      Отрицательное значение выражения приводит к ошибке 5.

      Пример:
              10 A¤=INKEY¤
              20 IF A¤="" THEN 10
              30 ON ASC(A¤)-64% GOSUB 100,200,300
              40 GOTO 10



     4.1.9. Оператор STOP



      Временно останавливает выполнение программы.

      Формат:
              STOP

      Оператор  STOP  используется  для  организации  диалога  при
 отладке  программ.  При  выполнении  оператора   STOP   программа
 останавливается, на терминале индицируется сообщение

              Стоп в строке YYYYY
              Ok

      и ЭВМ переходит в непосредственный режим. После приостановки
 программы  можно   распечатать   или   даже   изменить   значения
 переменных.  Командой  CONT  выполнение  программы   может   быть
 продолжено с оператора,  следующего  за  оператором  STOP.  После
 редактирования текста программы  попытка  возобновить  выполнение
 программы приводит к ошибке 17. В этом случае для пуска программы
 используется команда RUN.

      Пример:
              10 A=10
              20 STOP
              30 A=20
              40 PRINT A
              RUN
              Стоп в строке 20
              PRINT A
              10
              Ok
              CONT
              20
              Ok

                              - 35 -

                       У1.00031-01 35 01


     4.1.10. Оператор END



      Заканчивает выполнение программы и закрывает файлы.

      Формат:
              END

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

                              - 36 -

                       У1.00031-01 35 01


      Пример:

              10 GOSUB 30
              20 END
              30 PRINT A¤
              40 RETURN




    4.1.11. Оператор REM



      Обозначает комментарии в тексте программы.

      Формат:
               REM [<ТЕКСТ>]
               '

      <ТЕКСТ> - ЛЮБАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ.

      Оператор служит для включения комментария в текст  программы
 с  целью  удобства  чтения   алгоритма,   для   идентификации   и
 определения порядка работы программ, а также в  качестве  пустого
 оператора. Весь текст за словом REM игнорируется.  Другой  способ
 определения замечаний в тексте программы - это апостроф ("'").  В
 отличии  от  REM,  для  которого  необходима   отдельная   строка
 программы, апостроф может  использоваться  после  любого  другого
 оператора, автоматически заканчивая его.
      Ввиду того, что комментарий занимает дополнительное место  в
 оперативной  памяти,  уменьшается  место  для   хранения   других
 операторов.

      Пример:
              10 REM ПОДПРОГРАММА ВВОДА
              200 X=1 ' ПЕРЕМЕННАЯ ЦИКЛА



       4.2. Операторы  описания,  резервирования   памяти   и
            установки начальных значений



      Операторы  резервирования   памяти   служат   резервированию
 оперативной памяти для массивов и постоянных величин. Память  для
 переменных резервируется в локальной или  общей  области  данных.
 Память   для   постоянных   величин   резервируется   в   области
 генерируемой программы при компиляции. Для резервирования  памяти
 переменным   и   массивам   используется   оператор   DIM,    для
 резервирования памяти постоянным величинам - DATA. Для присвоения
 переменным значений  постоянных  величин  используются  операторы
 READ и RESTORE.

                              - 37 -

                       У1.00031-01 35 01


     4.2.1. Оператор DIM



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

      Формат:
              DIM <АРГУМЕНТ>[,<АРГУМЕНТ>...]

      <АРГУМЕНТ>::= ДОПУСТИМОЕ ИМЯ ПЕРЕМЕННОЙ, ЗА  КОТОРЫМ
                    МОЖЕТ СЛЕДОВАТЬ ЗАКЛЮЧЕННЫЙ  В  СКОБКИ
                    СПИСОК МАКСИМАЛЬНЫХ ЗНАЧЕНИЙ  ИНДЕКСОВ
                    МАССИВА.

      Этот оператор обычно используется для определения  массивов,
 но может определять и отдельные переменные. Каждый  массив  имеет
 заданное в списке число индексов. Максимальное  значение  индекса
 указывается целым выражением, принимающим значения  из  интервала
 [0,255].
      Возможно неявное определение переменных  и  массивов.  Такое
 определение   происходит   каждый   раз   при   появлении   имени
 неопределенной переменной. Простые переменные обычно определяются
 именно  таким  способом.  При  появлении  имени   индексированной
 переменной  определяется   одномерный   массив   с   максимальным
 значением индекса 10.
      Неявное определение массива  невозможно  в  непосредственном
 режиме и вызывает ошибку 12. Попытка повторного  определения  уже
 объявленного или определенного по умолчанию  массива  приводит  к
 ошибке 10. Если не хватает  оперативной  памяти  для  определения
 массива, выдается сообщение об ошибке 7.

      Пример:
              10 DIM X,I%,Z(5,20,3),A¤(30)



     4.2.2. Оператор KEY



      Этот оператор изменяет значения функциональных клавиш.

      Формат:
              KEY <АРГУМЕНТ1>,<АРГУМЕНТ2>

      <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ,  ОПРЕДЕЛЯЮЩЕЕ  НОМЕР
                     ФУНКЦИОНАЛЬНОЙ КЛАВИШИ, ЧИСЛО ИЗ  ИН-
                     ТЕРВАЛА [1,10];

      <АРГУМЕНТ1>::= СИМВОЛЬНОЕ  ВЫРАЖЕНИЕ,   ОПРЕДЕЛЯЮЩЕЕ
                     ЗНАЧЕНИЕ КЛЮЧА  (ИСПОЛЬЗУЮТСЯ  ТОЛЬКО
                     ПЕРВЫЕ 16 СИМВОЛОВ).

      Оператор используется для изменения значений  функциональных
 ключей, установленных по умолчанию. Первые 16 символов  АРГУМЕНТА
 2 присваиваются ключу, указанному АРГУМЕНТОМ 1.
      В  служебной  строке  экрана  высвечиваются  первые  символы

                              - 38 -

                       У1.00031-01 35 01


 значений   функциональных   клавиш.   Оператор   KEY   производит
 соответствующие изменения служебной строки.
      Для ввода символа "ПС"  или  кавычек  можно  воспользоваться
 функцией CHR¤.
      Если  значение  первого   аргумента   выходит   за   пределы
 допустимого интервала, получается ошибка 5.
      По  умолчанию   функциональные   клавиши   имеют   следующие
 значения:

              COLOR
              AUTO
              GOTO
              LIST
              RUN <ВК>
              COLOR 8,2,2 <ВК>
              CLOAD "
              CONT <ВК>
              LIST. <ПС> <АР2>A<АР2>A
              <СБР> RUN <ВК>

      (управляющий  символ  "СБР"  имеет  восьмеричный  код  14  и
 означает очистку экрана).

      Пример:
              KEY 1,"LINE "
              KEY 2,"SAVE "+CHR¤(34)
              KEY 3,"PRINT PI"+CHR¤(13)



     4.2.3. Оператор CLEAR



      Очищает значения переменных,  резервирует  символьную  и  не-
 бейсиковую память.

      Формат:
              CLEAR [<АРГУМЕНТ1>[,< АРГУМЕНТ2>]]

      <АРГУМЕНТ1>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ,   УКАЗЫВАЮЩЕЕ  ЧИСЛО
                     БАЙТОВ  ОБЛАСТИ  ПАМЯТИ,  РЕЗЕРВИРУЕМОЙ
                     ДЛЯ СИМВОЛЬНЫХ ПЕРЕМЕННЫХ;

      <АРГУМЕНТ2>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ,  УКАЗЫВАЮЩЕЕ   АДРЕС
                     ВЕРХНЕЙ  ГРАНИЦЫ  ОБЛАСТИ   ОПЕРАТИВНОЙ
                     ПАМЯТИ,  ИСПОЛЬЗУЕМОЙ  БЕЙСИК-СИСТЕМОЙ,
                     ДОЛЖЕН НЕ ПРЕВЫШАТЬ ВОСЬМЕРИЧНОГО 70000.

      При любой форме оператора очищаются  массивы  и  переменные,
 определенные функции, символьные строки, а также аппаратный стек,
 закрываются все файлы, а любая распечатка заканчивается  символом
 "ПС". Определения функций USR остаются неизменными.
      Первый  аргумент  используется  для   установления   размера
 области памяти для хранения текста строк, по умолчанию  он  равен
 200 байтов.  Если  задан  АРГУМЕНТ1,  то  для  символьных   строк
 резервируется указанное число байтов.
      Второй аргумент используется для  указания  начала  области,

                              - 39 -

                       У1.00031-01 35 01


 которая не может использоваться для программ  и  данных  БЕЙСИКА.
 Таким образом определяется область для неформатированных  данных,
 функций USR или другого использования. После выполнения  CLEAR  с
 двумя параметрами в косвенном режиме объектный  код  теряется,  и
 БЕЙСИК-система переходит в непосредственный режим.
      Многие операции делают CLEAR автоматически,  например,  RUN,
 NEW, MERGE, LOAD и любое изменение текста программы БЕЙСИКА. Если
 параметры  в  CLEAR  не  указаны,  то  соответствующие   значения
 величины области строк и верхней границы  оперативной  памяти  не
 изменяются.
      Слишком большое значение первого или слишком  малое  второго
 аргумента вызывает  недостаток  оперативной  памяти,  и  выдается
 сообщение об ошибке 7. Указание второго аргумента при  отсутствии
 первого вызывает ошибку 2. Если АРГУМЕНТ 2  больше  восьмеричного
 70000, выдается сообщение об ошибке 5.

      Пример:
              CLEAR 1000,&O30000
              Ok
      (резервируется 1000 байтов для строк и ОЗУ свыше &O30000 для
 пользовательских целей).



     4.2.4. Оператор DATA



      Сохраняет  заданные  в  тексте   программы   константы   для
 последующего пользования.

      Формат:
              DATA <ЭЛЕМЕНТ>[,<ЭЛЕМЕНТ>...]

      <ЭЛЕМЕНТ>::= ЧИСЛОВАЯ КОНСТАНТА, ТЕКСТОВАЯ КОНСТАНТА
                   В  КАВЫЧКАХ  ИЛИ  БЕЗ  КАВЫЧЕК,  НО  НЕ
                   ВКЛЮЧАЮЩАЯ ЗАПЯТЫХ.

      Этот оператор позволяет  сохранять  "начальные"  величины  в
 теле программы. В режиме  непосредственного  выполнения  оператор
 DATA  игнорируется.  Во  время  выполнения  программы   он   тоже
 опускается, и только оператор READ может использовать его.
      Во время чтения данные, выбираются начиная с оператора DATA с
 наименьшим  номером  строки,  а  следующие  операторы  выбираются
 последовательно. Когда все данные  исчерпаны,  дальнейшее  чтение
 невозможно до появления оператора RESTORE.
      В   списке   оператора   DATA   запятая   используется   как
 разделитель. Апостроф не завершает списка и  не  означает  начала
 комментария. Разрешены любые числовые константы, включая &H,  &O,
 &B, экспонентную форму, константы с явно указанным типом. Если  в
 текстовой  константе  нет  разделителя,  то  кавычки  могут  быть
 опущены.

                              - 40 -

                       У1.00031-01 35 01


     4.2.5. Оператор READ



      Вводит данные из оператора DATA в программу.

      Формат:
              READ <ПЕРЕМЕННАЯ>[,<ПЕРЕМЕННАЯ>...]

      <ПЕРЕМЕННАЯ>::= ДОПУСТИМОЕ ИМЯ ПЕРЕМЕННОЙ (ВКЛЮЧАЯ
                      ЭЛЕМЕНТ МАССИВА).

      Этот оператор читает следующие еще непрочитанные  данные  из
 оператора  DATA.  Процесс  повторяется  до  тех  пор,  пока   все
 переменные  из  списка  заберут  свои  значения.  Оператор   READ
 пересматривает все записи каждого оператора DATA, анализируя их с
 начала программы до конца. Для чтения данных несколько раз  можно
 воспользоваться оператором RESTORE.
      В  случае  обнаружения  конца   операторов   DATA   выдается
 сообщение об ошибке 4. При  попытке  читать  текстовые  данные  в
 числовые переменные получается ошибка 13.

      Пример:
              10 DATA 1,&O22,&H3F
              20 FOR I%=0 TO 5%
              30 DATA 234E-7
              40 READ X(I%)
              50 NEXT I%
              60 DATA -33%,44.56,TEXT,"A,B"
              70 READ A¤,B¤



     4.2.6. Оператор RESTORE



      Изменяет порядок чтения данных из оператора DATA  оператором
 READ.

      Формат:
              RESTORE [<НОМЕР СТРОКИ>]

      <НОМЕР СТРОКИ>::= НОМЕР СУЩЕСТВУЮЩЕЙ СТРОКИ.

      Этот оператор изменяет  значение  указателя,  определяющего,
 который  из  операторов  DATA  будет  использован   следующим   в
 операторе READ. READ перемещает указатель  последовательно,  пока
 все  операторы  DATA  не  будут  использованы.  Оператор  RESTORE
 возвращает указатель в начало программы и все данные заново могут
 быть  введены.  В  случае   присутствия   номера   строки   будут
 рассматриваться операторы DATA с указанным или большими  номерами
 строк. Повторно использовать оператор RESTORE можно в любом месте
 программы.  Он  позволяет  смотреть  на  операторы  DATA  как  на
 устройство ввода данных с возможностью повторного чтения.

                              - 41 -

                       У1.00031-01 35 01


      Пример:
              1000 RESTORE
              1010 FOR I%=0% TO 10%
              1020 READ X(I%)
              1030 NEXT I%
              1040 RETURN

      (подпрограмма, заполняющая массив X)



     4.2.7. Оператор DEF





   4.2.7.1. Оператор DEF USR



      Определяет функции на машинном языке.

      Формат:
              DEF USR[<ЦИФРА>]=<ВЫРАЖЕНИЕ>

      <ЦИФРА>::= ЦЕЛАЯ   КОНСТАНТА  ИЗ   ИНТЕРВАЛА  [0,9],
                 УКАЗЫВАЮЩАЯ     НОМЕР     ФУНКЦИИ,     ПО
                 УМОЛЧАНИЮ 0;

      <ВЫРАЖЕНИЕ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ,  ОПРЕДЕЛЯЮЩЕЕ  АДРЕС
                     ЗАПУСКА ФУНКЦИИ USR.

      Оператор определяет начальный адрес  машинной  подпрограммы,
 составленной  пользователем.  Значение  выражения  переводится  в
 целый тип и считается адресом  запуска  программы.  Отрицательные
 значения от минус 32768 до минус 1 означают адреса  от  32768  до
 65535 соответственно. Для указания  адресов  удобно  пользоваться
 восьмеричными константами.
      Одновременно могут быть определены 10 функций USR( ).  Номер
 определяемой   функции   указывается   цифрой.   Адреса    вызова
 подпрограмм хранятся в области USRTAB(&O2100), где каждой USR(  )
 выделяется по одному слову. Действие оператора можно  представить
 как заполнение USRTAB.
      Для  выполнения  программы  на  машинном  языке   необходимо
 выполнить последовательность операторов

              10 DEF USR=&ONNNNNN
              20 A=USR(A)

      Обычным  способом  загрузки  машинной  программы  в   память
 является  использование   команды   BLOAD,   которая   запоминает
 начальный адрес загруженной  программы  в  ячейке  BUFSTA(&O264).
 Таким образом, логична последовательность

              BLOAD "PROG"
              PROG  .BIN
              Ok

                              - 42 -

                       У1.00031-01 35 01


              DEF USR5=PEEK(&O264)
              Ok

      Для выделения памяти функциям USR( )  используется  оператор
 CLEAR. Этот оператор сохраняет все определения DEF USR.



   4.2.7.2. Оператор DEF FN



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

      Формат:
              DEF FN <ИМЯ>[(<СПИСОК>)]=<ВЫРАЖЕНИЕ>

      <ИМЯ>::= ЛЮБОЕ ДОПУСТИМОЕ ИМЯ ПЕРЕМЕННОЙ;

      <СПИСОК>::= ОДИН  ИЛИ   НЕСКОЛЬКО   ИМЕН   ФОРМАЛЬНЫХ
                  ПАРАМЕТРОВ (ДОПУСТИМЫХ ИМЕН  ПЕРЕМЕННЫХ),
                  РАЗДЕЛЕННЫХ ЗАПЯТЫМИ;

      <ВЫРАЖЕНИЕ>::= ЛЮБОЕ ВЫРАЖЕНИЕ ТАКОГО ЖЕ ТИПА, КАК  И
                     <ИМЯ>.

      При выполнении этого оператора создается  переменная  <ИМЯ>,
 отмеченная  как  имя  функции.  Никаких  вычислений  оператор  не
 производит и может быть в любом месте программы. Переменная <ИМЯ>
 не доступна  обычным  путем,  и  может  быть  создана  нормальная
 переменная с таким же самым  именем.  В  случае  создания  другой
 функции с таким же самым именем старое определение теряется.
      Функция может иметь любое число параметров. Они определяются
 как список имен переменных любого типа,  разделенных  запятыми  и
 заключенных в скобки. Параметры являются формальными и реально не
 существуют, т.е.  любая обычная переменная может иметь  такое  же
 имя. Каждый аргумент должен быть такого типа, что  ему  могло  бы
 присвоиться  значение  фактического  аргумента,  задаваемого  при
 вызове функции, и результат возвращается в место вызова  функции.
 Если  в  этом  выражении  есть  имена   переменных,   объявленных
 формальными аргументами, то их  значения  берутся  соответственно
 списку фактических аргументов в вызове функции. В выражении также
 можно использовать любые другие  переменные,  если  их  имена  не
 совпадают с именами формальных аргументов. В выражении могут быть
 любые обращения к функциям, также  и  нерекурсивные  обращения  к
 функциям FN.
      Ошибки  проверяются   только   при   вызове   функции.   При
 обнаружении ошибки в строке, вызывающей пользовательскую функцию,
 следует проверить определение этой функции.
      DEF FN, в отличии от DATA,  является выполняемым оператором,
 т.е.  функция  должна  определяться  раньше   ее   вызова.   Этот
 оператор -  один  из  немногих,  запрещенных  в  непосредственном
 режиме.

      Пример:
              10 DEF FN QU¤(QU,ST)=MID¤(QL¤,QU,ST)
              20 PRINT FN QU¤(CO,LEN(CO))

                              - 43 -

                       У1.00031-01 35 01


       4.3. Операторы ввода/вывода


      Операторы  ввода/вывода  INPUT,  PRINT  и  другие  позволяют
 организовать обмен информацией с внешними устройствами.



     4.3.1. Оператор PRINT



      Выводит данные на экран, печатающее устройство или  файл  на
 магнитной ленте.

      Формат:
               PRINT
               ?      [#]
                          [<СПИСОК>]
               LPRINT

      <СПИСОК>::= ОДНО ИЛИ НЕСКОЛЬКО ВЫРАЖЕНИЙ ЛЮБОГО  ТИПА,
                  ФУНКЦИЙ   ОПЕРАТОРА   PRINT,   РАЗДЕЛЕННЫХ
                  ЗАПЯТОЙ ИЛИ ТОЧКОЙ С ЗАПЯТОЙ;

      L УКАЗЫВАЕТ, ЧТО ВЫВОД  ОСУЩЕСТВЛЯЕТСЯ  НА  ПЕЧАТАЮЩЕЕ
        УСТРОЙСТВО;

      # ОБОЗНАЧАЕТ ВЫВОД В ФАЙЛ НА МАГНИТНОЙ ЛЕНТЕ.

      Слово PRINT может быть заменено вопросительным  знаком  "?",
 за исключением варианта LPRINT.
      LPRINT должен работать на РМП.
      Оператор  пересылает  данные  на  устройство  вывода. Обычно
 устройством вывода является экран, но этот оператор может вывести
 данные и на печатающее устройство или в открытый файл на  кассет-
 ной магнитной ленте. Список выводимых данных  может  быть  пустым
 или  содержать   несколько   выражений   любого   типа,  значения
 которых   преобразуется   в   текст   и  выводятся  на  указанное
 устройство. Запятая между двумя элементами списка данных означает,
 что данные будут выводится  зонами, т.е.  каждому элементу списка
 выделяется  по 16 позиций. Остаток зоны  за  данными  заполняется
 пробелами. Если  данные  не помещаются в зоне, берется  следующая
 зона.  Если  между  двумя аргументами списка данных стоит точка с
 запятой,  то значения  выводятся  непосредственно друг за другом.
 Если  запятая  или  точка  с  запятой является последней в списке
 данных, то  курсор  остается   на  той  же  позиции,  на  которой
 был  после   вывода   последнего  значения,  в  противном  случае
 осуществляется  перевод  строки.
      Оператор LPRINT выводит все данные на печатающее устройство.

      Пример:
              PRINT 1;-2,3
               1  -2            3
              Ok

                              - 44 -

                       У1.00031-01 35 01


     4.3.2. Оператор INPUT



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

      Формат:
              INPUT [<АРГУМЕНТ>;][<СПИСОК>]
                        #

      <АРГУМЕНТ>::= ПОДСКАЗКА В ВИДЕ ТЕКСТОВОЙ КОНСТАНТЫ;

      <СПИСОК>::= ОДНА ИЛИ   НЕСКОЛЬКО   ПЕРЕМЕННЫХ   ИЛИ
                  ЭЛЕМЕНТОВ МАССИВА, РАЗДЕЛЕННЫХ ЗАПЯТЫМИ;

      # УКАЗЫВАЕТ НА ВВОД ИЗ ФАЙЛА НА МАГНИТНОЙ ЛЕНТЕ.

      Этот оператор организует ввод с клавиатуры или из  открытого
 оператором OPEN файла на магнитной ленте. Если знака "#" нет,  то
 ввод  осуществляется  с  клавиатуры.  Если  в  случае   ввода   с
 клавиатуры указан  <АРГУМЕНТ>,  то  он  выводится  на  экран  как
 подсказка. Затем выводится вопросительный знак "?", высвечивается
 курсор, и БЕЙСИК-система ожидает ввода данных. В качестве  данных
 могут быть любые  константы,  по  типу  и  числу  соответствующие
 элементам списка. В качестве разделителей используются запятые. В
 текстовых константах могут отсутствовать  кавычки,  если  они  не
 содержат запятых. Если  ввод  прекращается  раньше  конца  списка
 переменных,  то  на  следующей  строке  выдаются  знаки  "??",  и
 БЕЙСИК-система  ждет  продолжения  ввода.  Если  вводится  больше
 данных,  чем  переменных  в   списке,   то   последние   значения
 игнорируются.
      Если при  вводе  числовых  данных  встречаются  недопустимые
 знаки, то  выдается  сообщение  об  ошибке  13  и  осуществляется
 повторный ввод. При попытке оператором  INPUT  #  прочесть  метку
 конца файла выдается сообщение об ошибке 55.

      Пример:
              INPUT "ДАННЫЕ";A,B¤,C¤
              ДАННЫЕ?123,"ABC,EFG"
              ??P"Q
              Ok
              PRINT A,B¤,C¤
               123            ABC,EFG         P"Q
              Ok

                              - 45 -

                       У1.00031-01 35 01


     4.3.3. Оператор OPEN



      Определяет файл данных на магнитной ленте.

      Формат:
              OPEN <СПЕЦИФИКАЦИЯ ФАЙЛА> [FOR  INPUT]
                                             OUTPUT

      <СПЕЦИФИКАЦИЯ ФАЙЛА>::= СИМВОЛЬНОЕ ВЫРАЖЕНИЕ, ОПРЕДЕ-
                              ЛЯЮЩЕЕ ИМЯ ФАЙЛА.

      Оператор  начинает  процесс   ввода/вывода   данных.   Буфер
 ввода/вывода связывается с именем файла.  Слова  INPUT  и  OUTPUT
 указывают, что открываются соответственно  входной  или  выходной
 файл. Данные на магнитной ленте хранятся в формате КОИ-7  блоками
 по 256 символов. Конец файла означает символ "СУ/Z"  (код  &O32).
 Аналогичным форматом в командах SAVE, LOAD и MERGE  на  магнитной
 ленте хранится  текст  программы.  При  открытии  входного  файла
 первый блок данных считывается в буфер.
      Данные из входного файла  можно  читать  оператором  INPUT#,
 записывать в выходной файл - оператором PRINT#. Имя файла  должно
 состоять не более, чем из 6 символов.  Также  можно  указать  тип
 файла. Тип файла должен состоять не более, чем из  3  символов  и
 отделяться от имени файла точкой:

              DATA.TXT

      По умолчанию в операторе OPEN устанавливается тип файла DAT.
 Можно указать любой другой тип файла, только в случае ввода  этот
 файл должен быть записан в формате КОИ-7.
      В случае слишком длинного или пустого имени файла  выводится
 сообщение об ошибке 56. Попытка повторно открыть файл приводит  к
 ошибке 54.

      Пример:
              10 OPEN "PROG.ASC" FOR INPUT
              20 IF EOF THEN 60
              30 INPUT# A¤
              40 PRINT A¤
              50 GOTO 20
              60 CLOSE

      (на экран выводится текст программы PROG).

                              - 46 -

                       У1.00031-01 35 01


     4.3.4. Оператор CLOSE



      Заканчивает операции ввода/вывода и освобождает буфер.

      Формат:
              CLOSE

      Если оператором OPEN был открыт выходной файл,  к  выводимым
 данным добавляются символ <ПС> и  указатель  конца  файла  "СУ/Z"
 (код &O32), выводится последний блок файла и очищается  буфер.  В
 случае входного файла просто очищается буфер.
      Некоторые операции  делают  CLOSE  автоматически.  Это  END,
 CLEAR, LOAD, NEW и любое изменение текста программы.

      Пример:
              10 OPEN "DATA" FOR OUTPUT
              20 FOR I%=0% TO 10%
              30 PRINT# X(I%)
              40 NEXT
              50 CLOSE



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





     4.4.1. Оператор POKE



      Записывает данные в любую ячейку памяти ЭВМ.

      Формат:
              POKE <АДРЕС>,<ВЫРАЖЕНИЕ>

      <АДРЕС>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ,   ОПРЕДЕЛЯЮЩЕЕ   АДРЕС
                 ЯЧЕЙКИ;

      <ВЫРАЖЕНИЕ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ ЗАПИСЫ-
                     ВАЕМЫЕ ДАННЫЕ.

      Этот оператор  записывает  значение  выражения  в  указанную
 ячейку (слово) памяти, оба параметра при этом переводятся в целый
 тип. Если адрес нечетный, то берется слово, в  котором  находится
 указанный байт, т.е., значение  адреса  уменьшается  на  1.  Этот
 оператор можно использовать для  изменения  указателей  и  таблиц
 BASIC  системы,  размещения  в  памяти  программ,  написанных   в
 машинных кодах, для работы с регистрами внешних устройств.
      Пользоваться  оператором  POKE  надо  осторожно,   так   как
 ошибочные  данные   или   адрес   могут   вызвать   нежелательные
 результаты.

                              - 47 -

                       У1.00031-01 35 01


      Пример:
              10 A%=PEEK(4%)
              20 POKE 6%,2%
              30 POKE 4%,6%

              ...
              100 POKE 4%,A%
              110 POKE 6%,0%

      (во  время  выполнения  программы  блокируется  обращение  к
 несуществующим ячейкам памяти).



     4.4.2. Оператор OUT



      Записывает данные в оперативную память по маске.

      Формат:
              OUT <АДРЕС>,<МАСКА>,<КОД>

      <АДРЕС>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ ФИЗИЧЕСКИЙ
                 АДРЕС ЯЧЕЙКИ ПАМЯТИ;
      <МАСКА>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ  УЧАСТВУ-
                 ЮЩИЕ В ОПЕРАЦИИ БИТЫ;

      <КОД>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ,  СТИРАТЬСЯ
               ИЛИ  ВСТАВЛЯТЬСЯ ДОЛЖНЫ  ВЫБРАННЫЕ  БИТЫ;
               НУЛЕВОЕ  ЗНАЧЕНИЕ УКАЗЫВАЕТ НА  СТИРАНИЕ,
               НЕНУЛЕВОЕ - НА ВСТАВКУ.

      Оператор позволяет записывать  или  стирать  отдельные  биты
 непосредственно  в  ячейках  оперативной  памяти.  Биты   ячейки,
 соответствующие  нулевым  битам  маски,   остаются   неизменными,
 остальные биты стираются (если значение  кода  равно  нулю),  или
 включаются (в противном случае).

      Пример:
              10 POKE A%,&O177777
              20 POKE B%,0%
              30 OUT A%,&O111111,0%
              40 OUT B%,&O66666,1%
              50 PRINT OCT¤(PEEK(A%)), OCT¤(PEEK(B%))
              RUN
              66666           66666
              Ok

                              - 48 -

                       У1.00031-01 35 01


       4.5. Операторы управления экраном телевизора





     4.5.1. Оператор CLS



      Очищает экран.

      Формат:
              CLS

      Оператор CLS окрашивает весь  экран  в  текущий  цвет  фона.
 Используя его, можно наиболее  быстрым  путем  получить  сплошной
 экран любого цвета.

      Пример:
              100 INPUT "ПАРОЛЬ",A¤
              110 IF PAROL¤=A¤ THEN 200
              120 CLS
              130 PRINT AT(10,10);"КУ-КУ!"
              140 CLEAR



     4.5.2. Оператор COLOR



      Устанавливает цвет экрана.

      Формат:
              COLOR [<АРГУМЕНТ1>],[< АРГУМЕНТ2>],[< АРГУМЕНТ3>]

      <АРГУМЕНТ1>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   УКАЗЫВАЮЩЕЕ   НОМЕР
                     ЦВЕТА ПЕРЕДНЕГО ПЛАНА, ЧИСЛО В ПРЕДЕЛАХ
                     [0,8];

      <АРГУМЕНТ2>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   УКАЗЫВАЮЩЕЕ   НОМЕР
                     ЦВЕТА ФОНА, ЧИСЛО В ПРЕДЕЛАХ [0,8];

      <АРГУМЕНТ2>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   УКАЗЫВАЮЩЕЕ   НОМЕР
                     ЦВЕТА БОРДЮРА, ЧИСЛО В ПРЕДЕЛАХ [0,8].

      Оператор устанавливает текущие цвета переднего плана и  фона
 экрана.  При  отсутствии  параметра   соответствующий   цвет   не
 меняется.
      Имеются следующие номера цветов:

       0 - прозрачный (цвет фона);     4 - голубой;
       1 - черный;                     5 - красный;
       2 - синий;                      6 - пурпурный;
       3 - зеленый;                    7 - желтый;
                                       8 - белый;

                              - 49 -

                       У1.00031-01 35 01


      Оператор  COLOR  изменяет  цвет   выводимого   текста,   все
 операторы   графики   также   по   умолчанию   используют   цвет,
 установленный этим оператором.

      Пример:
              100 COLOR 2,3
              110 DRAW A¤
              120 COLOR 1
              130 PSET @(20,0)
              140 DRAW A¤



     4.5.3. Оператор SCREEN



      Оператор переключения

      Формат: SCREEN N

      В микро-ЭВМ "Электроника МС  0511"  разделены  символьный  и
 графический вывод  на  экран.  Поэтому  БЕЙСИК-система  позволяет
 пользователю в любой момент времени иметь на  экране  или  только
 графическую  или  только  текстовую  информацию.  В  системе  это
 принято называть символьным и графическим режимами работы  экрана
 или  просто  символьным  и   графическим   экранами.   Текст   на
 графическом экране  можно  лишь  рисовать,  например,  оператором
 DRAW, но нет возможности его напечатать оператором PRINT.

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

         0 - переход на символьный экран

         1 - переход на символьный экран

         2 - переход на графический экран

         3 - переход на графический экран


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

      При переходах от одного режима к  другому  экран  очищается,
 т.е. весь перекрашивается в  текущий  цвет  фона.  Цвета  фона  и
 вывода символов или черчения для каждого экрана задаются отдельно
 и могут быть различными. Это  выполняется  при  помощи  оператора
 COLOR. Он задает  цвета  для  текущего  экрана.  Третий  параметр
 оператора  COLOR  для  графического  экрана  игнорируется.  Нужно
 отметить, что оператор  COLOR  не  перекрашивает  экран,  а  лишь
 задает цвета для последующего вывода.  Поэтому  фон  графического
 экрана можно менять лишь последовательностью операторов.

                              - 50 -

                       У1.00031-01 35 01


           100 SCREEN 2

           110 COLOR ,6

           120 CLS


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

      Необходимо  запомнить,  что  применение  любых   графических
 операторов (PSET, PRESET, LINE, CIRCLE,  PAINT,  DRAW  и  функция
 POINT) допустимо лишь во время действия графического режима.  При
 символьном режиме  это  приведет  к  ошибке  "неправильный  вызов
 функции". Также необходимо запомнить, что  переход  в  символьный
 режим осуществляется автоматически при выполнении оператора INPUT
 и при переходе в непосредственный режим  (прекращение  выполнения
 программы  естественно,  по ошибке или по нажатию клавиши <СТОП>,
 а  также  при  выполнении  оператора  SCREEN  в  непосредственном
 режиме). Поэтому  работа  с  графикой  в  непосредственном режиме
 невозможна.



     4.5.4. Оператор LOCATE



      Передвигает курсор на экране, высвечивая и гася его.

      Формат:
              LOCATE [<АРГ1>][,<АРГ2>][,<АРГ3>]

      <АРГ1>::= ПОЗИЦИЯ X (СТОЛБЕЦ), НА КОТОРОЙ  ДОЛЖЕН БЫТЬ
                РАСПОЛОЖЕН КУРСОР,  ЦЕЛОЕ ВЫРАЖЕНИЕ  С  ЗНА-
                ЧЕНИЕМ ИЗ ИНТЕРВАЛА [0,255];

      <АРГ2>::= ПОЗИЦИЯ Y (СТРОКА), НА  КОТОРОЙ  ДОЛЖЕН БЫТЬ
                РАСПОЛОЖЕН КУРСОР,  ЦЕЛОЕ ВЫРАЖЕНИЕ  С  ЗНА-
                ЧЕНИЕМ ИЗ ИНТЕРВАЛА [0,255];

      <АРГ3>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ,   УКАЗЫВАЮЩЕЕ,   ГАСИТЬСЯ
                (НУЛЕВОЕ   ЗНАЧЕНИЕ)    ИЛИ    ВЫСВЕЧИВАТЬСЯ
                (НЕНУЛЕВОЕ ЗНАЧЕНИЕ) ДОЛЖЕН КУРСОР;

      Оператор  LOCATE  контролирует  местоположение  курсора   на
 экране. Строки имеют  номера  от  0  (верхняя)  до  23  (нижняя).
 Столбцы   нумеруются  от  0  до   63   слева   направо.    Курсор
 передвигается на позицию,  указанную  в  операторе  LOCATE.  Если
 опущен любой из первых двух параметров, то сохраняется предыдущее
 его значение.
      Если присутствует АРГУМЕНТ 3 и он не равен  0,  то  оператор
 высвечивает курсор, который обычно гасится  во  время  выполнения
 программы. Курсор высвечивается также оператором INPUT. Для ввода
 данных с  погашенным  курсором  необходимо  использовать  функцию
 INKEY¤.
      На положение графического курсора оператор LOCATE не влияет.
      Функции CSRLIN и POS  позволяют  узнать  положение  курсора,
 установленное этим оператором.  Если  номер  столбца  или  строки

                              - 51 -

                       У1.00031-01 35 01


 больше числа присутствующих на экране столбцов или строк,  но  не
 больше 255, то курсор будет перенесен  через  максимальное  число
 позиций в этом направлении.
      Отрицательные  или большие граничных  значения  первых  двух
 параметров приводят к ошибке 5.

      Пример:
              100 LOCATE 0,22
              110 INPUT "ЧИСЛО";X
              120 LOCATE 0,0,0
              130 PRINT X



       4.6. Операторы и функции графики





     4.6.1. Оператор PSET


      Используется для окрашивания  точки  на  экране  в  заданный
 цвет.

      Формат:
              PSET [ @  ](<АРГ1>,< АРГ2>)[,< АРГ3>]
                    STEP

      <АРГ1>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ,    ЗАДАЮЩЕЕ    КООРДИНАТУ
                X ТОЧКИ;

      <АРГ2>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ,    ЗАДАЮЩЕЕ    КООРДИНАТУ
                Y ТОЧКИ;

      <АРГ3>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ   ЦВЕТ   ТОЧКИ;
                ЧИСЛО ИЗ ИНТЕРВАЛА [0,8];

      STEP (@) - КООРДИНАТЫ УКАЗАННОЙ ТОЧКИ ПОДСЧИТЫВАЮТСЯ
                 ОТНОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ,  ОБРАБОТАН-
                 НОЙ ОПЕРАТОРАМИ ГРАФИКИ.

      Если  заданная   точка   находится   за   пределами   экрана
 (координата X из интервала [0,639],  Y  -  [0,263]),  то  команда
 никаких  действий  не  производит.   В   противном   случае   она
 окрашивается в цвет, определенный  аргументом  3,  или,  если  он
 отсутствует, в текущий цвет, определенный оператором COLOR.
      Если номер цвета выходит за допустимые пределы, то  выдается
 сообщение об ошибке 5.

      Пример:
              10 FOR Y=1 TO 120
              20 PSET (SQR(Y),Y)
              30 NEXT

                              - 52 -

                       У1.00031-01 35 01


     4.6.2. Оператор PRESET


      Оператор используется для окрашивания точки на экране в цвет
 фона.

      Формат:
              PRESET [ @  ](<АРГ1>,< АРГ2>)[,< АРГ3>]
                      STEP

      <АРГ1>::= ЦЕЛОЕ    ВЫРАЖЕНИЕ,    ЗАДАЮЩЕЕ   КООРДИНАТУ X
                ТОЧКИ;

      <АРГ2>::= ЦЕЛОЕ    ВЫРАЖЕНИЕ,    ЗАДАЮЩЕЕ   КООРДИНАТУ Y
                ТОЧКИ;

      <АРГ3>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ    ЦВЕТ   ТОЧКИ;
                ЧИСЛО ИЗ ИНТЕРВАЛА [0,8];

      STEP (@) - КООРДИНАТЫ УКАЗАННОЙ  ТОЧКИ  ПОДСЧИТЫВАЮТСЯ
                 ОТНОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ,  ОБРАБОТАННОЙ
                 ОПЕРАТОРАМИ ГРАФИКИ.

      Этот оператор окрашивает заданную точку экрана в цвет  фона.
 Если задан АРГУМЕНТ 3, то оператор превращается в оператор PSET -
 точка окрашивается в указанный  цвет.  Координаты  точки  X  и  Y
 должны находиться в интервалах [0,639] и [0,263]  соответственно,
 иначе никаких действий не произойдет.
      Если номер цвета выходит за допустимые пределы, то  выдается
 сообщение об ошибке 5.

      Пример:
              100 C%=POINT(X%,Y%)
              110 PRESET (X%,Y%)
              ...
              200 IF POINT(X%,Y%)<>C% THEN PSET(X%,Y%),C%



     4.6.3. Функция POINT


      Функция выдает номер цвета указанной точки экрана.

      Формат:
              X=POINT(<АРГУМЕНТ1>,< АРГУМЕНТ2>)

      <АРГУМЕНТ1>::= ЦЕЛОЕ       ВЫРАЖЕНИЕ,        ЗАДАЮЩЕЕ
                     КООРДИНАТУ X;

      <АРГУМЕНТ2>::= ЦЕЛОЕ       ВЫРАЖЕНИЕ,        ЗАДАЮЩЕЕ
                     КООРДИНАТУ Y.

      Функция POINT выдает значение  целого  типа  -  номер  цвета
 заданной точки экрана, число от 1 до  8.  Если  координаты  точки
 выходят за пределы экрана, то выдается значение -1. Если точка не
 принадлежит ни одному  из  начерченных  на  экране  объектов,  то
 выдается номер цвета фона.

                              - 53 -

                       У1.00031-01 35 01


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

      Пример:
              100 GOSUB 1000
              110 IF POINT(X0,Y0)=4% THEN 100
              120 GOSUB 2000



     4.6.4. Оператор LINE



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

      Формат:
              LINE [[ @  ](<АРГ1>,<АРГ2>)] -
                     STEP

      [ @  ](<АРГ3>,<АРГ4>)[,<АРГ5>,[B]
       STEP                         BF

      <АРГ1>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ   КООРДИНАТУ  X
                НАЧАЛЬНОЙ ТОЧКИ ОБЪЕКТА;

      <АРГ2>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ   КООРДИНАТУ  Y
                НАЧАЛЬНОЙ ТОЧКИ ОБЪЕКТА;

      <АРГ3>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ   КООРДИНАТУ  X
                КОНЕЧНОЙ ТОЧКИ ОБЪЕКТА;

      <АРГ4>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ   КООРДИНАТУ  Y
                КОНЕЧНОЙ ТОЧКИ ОБЪЕКТА;

      <АРГ5>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ   НОМЕР   ЦВЕТА
                ОБЪЕКТА, ЧИСЛО ИЗ ИНТЕРВАЛА [0,8];

      B  - ВЫЧЕРЧИВАЕТ ПРЯМОУГОЛЬНИК МЕЖДУ   ЗАДАННЫМИ
           ВЕРШИНАМИ;

      BF - ВЫЧЕРЧИВАЕТСЯ ЗАКРАШЕННЫЙ ПРЯМОУГОЛЬНИК;

      STEP (@) УКАЗЫВАЕТ,  ЧТО  КООРДИНАТЫ   ПОДСЧИТЫВАЮТСЯ
               ОТНОСИТЕЛЬНО  ПОСЛЕДНЕЙ  ТОЧКИ, ОБРАБОТАННОЙ
               ОПЕРАТОРАМИ ГРАФИКИ.

      Этот оператор используется для вычерчивания на экране линий,
 контуров прямоугольников или закрашенных прямоугольников.
      Аргументы с первого по четвертый задают координаты начальной
 (<АРГ1> и <АРГ2>) и конечной (<АРГ3> и <АРГ4>) точки объекта (для
 прямоугольника это диагонально противоположные углы). Если первые
 два аргумента опущены, то по умолчанию берутся координаты  точки,
 заданные в предыдущем операторе графики.
      Если  АРГУМЕНТ  5  опущен  ,  то  выбирается  текущий  цвет,
 определенный оператором COLOR.
      Если задан параметр B (BF), то  вычерчивается  прямоугольник

                              - 54 -

                       У1.00031-01 35 01


 (закрашенный прямоугольник). Если ни одного  из  этих  параметров
 нет, то чертится линия.
      Аргументы с первого по четвертый могут принимать значения из
 интервала [-32768,32767],но на экране отображаются только точки с
 координатами X и Y в интервалах [0,639] и [0,263] соответственно.
      Если код цвета выходит за допустимые  границы,  то  выдается
 сообщение об ошибке 5.

      Пример:
              10 LINE -@(SCALE*3,SCALE*4),2%
              20 LINE (100,100)-(200,200),,B
              30 LINE (125,125)-@(50,50),,BF



     4.6.5. Оператор CIRCLE


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

      Формат:
              CIRCLE [ @  ](<АРГ1>,<АРГ2>),<АРГ3>
                      STEP

      [,<АРГ4>][,<АРГ5>][,<АРГ6>][,<АРГ7>]

      <АРГ1>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,  ЗАДАЮЩЕЕ   КООРДИНАТУ  X
                ЦЕНТРА ОКРУЖНОСТИ;

      <АРГ2>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,  ЗАДАЮЩЕЕ   КООРДИНАТУ  Y
                ЦЕНТРА ОКРУЖНОСТИ;

      <АРГ3>::= ЦЕЛОЕ     ВЫРАЖЕНИЕ,    ЗАДАЮЩЕЕ     РАДИУС
                ОКРУЖНОСТИ;

      <АРГ4>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,   ЗАДАЮЩЕЕ  НОМЕР  ЦВЕТА;
                ЧИСЛО ИЗ ИНТЕРВАЛА [0,8];

      <АРГ5>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ  ПОЛОЖЕ-
                НИЕ НАЧАЛЬНОЙ ТОЧКИ ДУГИ (В РАДИАНАХ);

      <АРГ6>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ  ПОЛОЖЕ-
                НИЕ КОНЕЧНОЙ ТОЧКИ ДУГИ (В РАДИАНАХ);

      <АРГ7>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ  КОЭФФИ-
                ЦИЕНТ "СЖАТИЯ" ЭЛЛИПСА;

      STEP (@) - КООРДИНАТЫ УКАЗАННОЙ ТОЧКИ ВЫЧИСЛЯЮТСЯ ОТ-
                 НОСИТЕЛЬНО ПОСЛЕДНЕЙ  ТОЧКИ,  ОБРАБОТАННОЙ
                 ОПЕРАТОРАМИ ГРАФИКИ.

      Этот оператор  используется  для  вычерчивания  окружностей,
 эллипсов или их частей (дуг). На экран выводится  лишь  та  часть
 окружности,  которая   помещается   на   координатной   плоскости
 (координата X в пределах [0,639], Y - [0,263]).
      Первые два аргумента задают положение центра  окружности  на
 координатной плоскости.

                              - 55 -

                       У1.00031-01 35 01


      АРГУМЕНТ 3 задает радиус вычерчиваемой окружности.
      АРГУМЕНТ  6  и  АРГУМЕНТ  6   указывают   начало   и   конец
 вычерчиваемой   дуги   соответственно.   Если    эти    аргументы
 отрицательны,  то  берутся  их  абсолютные  значения,   а   центр
 окружности  соединяется  с  соответствующим   концом   дуги.   По
 умолчанию они равны 0 и 2*PI (6.283185).
      Если задан АРГУМЕНТ 7, то вычерчивается эллипс. По умолчанию
 этот параметр равен 1.
      Неправильное   задание   аргументов   может    привести    к
 синтаксической ошибке или ошибке переполнения. Если  номер  цвета
 выходит за допустимые пределы, то выдается сообщение об ошибке 5.

      Пример:
              10 COLOR 3
              20 CIRCLE (100,100),75,,-1,-.001,1.2
              30 CIRCLE (10,-5),75,,-.001,-1,1.2



     4.6.6. Оператор PAINT


      Используется для окрашивания части экрана в один цвет.

      Формат:
              PAINT [ @  ](<АРГ1>,<АРГ2>)[,<АРГ3>][,<АРГ4>]
                     STEP

      <АРГ1>::= ЦЕЛОЕ    ВЫРАЖЕНИЕ,  ЗАДАЮЩЕЕ   КООРДИНАТУ
                X НАЧАЛЬНОЙ ТОЧКИ;

      <АРГ2>::= ЦЕЛОЕ    ВЫРАЖЕНИЕ,  ЗАДАЮЩЕЕ   КООРДИНАТУ
                Y НАЧАЛЬНОЙ ТОЧКИ;

      <АРГ3>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ  НОМЕР  ЦВЕТА;
                ЧИСЛО ИЗ ИНТЕРВАЛА [0,8];

      <АРГ4>::= ЦЕЛОЕ   ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ  ЦВЕТ  ГРАНИЦЫ
                ЗАКРАШИВАЕМОЙ ОБЛАСТИ; ЧИСЛО ИЗ  ИНТЕРВАЛА
                [0,8];

      STEP (@) - КООРДИНАТЫ УКАЗАННОЙ ТОЧКИ ПОДСЧИТЫВАЮТСЯ
                 ОТНОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ,  ОБРАБОТАН-
                 НОЙ ОПЕРАТОРАМИ ГРАФИКИ.

      Этот оператор предназначен для окрашивания  части  экрана  в
 указанный цвет. Если АРГУМЕНТ 3 опущен, то  область  окрашивается
 текущим цветом, определенным оператором COLOR.  Если  АРГУМЕНТ  4
 опущен, то берется область с границей цвета закрашивания.
      Точка, с которой начинается окрашивание,  может  быть  любая
 внутренняя точка области.
      Границы области должны быть четко очерчены, иначе произойдет
 выход за пределы области. За пределами  экрана  оператор  никаких
 действий не производит.
      Следует отметить, что за границу области принимаются контуры
 не только с  цветом,  указанным  АРГУМЕНТОМ  4,  но  и  с  цветом
 закрашивания, поэтому, если внутри окрашиваемой области  окажется
 закрытый контур с цветом закрашивания, то он  останется  незакра-
 шенным.

- 56 -

                       У1.00031-01 35 01



      Если  номера  цветов  выходят  за  допустимые  пределы,   то
 выдается сообщение об ошибке 5.

      Пример:
              100 DRAW A¤
              110 PAINT (105,22),3



     4.6.7. Оператор DRAW



      Выполняет строки графических команд.

      Формат:
              DRAW <СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>

      <СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>::= СТРОКА,  СОДЕРЖАЩАЯ  ГРАФИ-
                                ЧЕСКИЕ КОМАНДЫ.

      Оператор дает возможность  удобно  управлять  графикой.  Для
 этого  имеются   команды   "графического   языка",   передаваемые
 оператору DRAW через строку символов. Возможны вызовы подстрок  с
 командами,  что  освобождает  от  ограничений  длины  строк  (255
 символов).
      Команда оператора DRAW состоит  из  буквы,  идентифицирующей
 команду, с следующими за ней аргументами. Аргументом  может  быть
 целая константа из интервала [0,32767] или обращение к переменной
 (индексированной переменной):

               =<ИМЯ ЧИСЛОВОЙ ПЕРЕМЕННОЙ>;

      Значение переменной должно быть в интервале [-32768,32767].
      На  экране  отображаются  только  те  значения   аргументов,
 которые соответствуют  координатам  X  и  Y  точек  в  интервалах
 [0,639] и [0,263] соответственно. В качестве  разделителей  между
 командами можно использовать пробелы или точку с запятой ";",  но
 их может и не быть.
      Имеются следующие команды оператора DRAW:

      U[<ДЛИНА>]  черчение вверх от текущей точки;
      D[<ДЛИНА>]  вниз;
      L[<ДЛИНА>]  налево;
      R[<ДЛИНА>]  направо;
      E[<ДЛИНА>]  в правый верхний угол;
      F[<ДЛИНА>]  в правый нижний угол;
      G[<ДЛИНА>]  в левый нижний угол;
      H[<ДЛИНА>]  в левый верхний угол.

      В графическом представлении (все углы 45 градусов):

              H U E
              \ | /
              L-+-R
               /|\
              G D F

                              - 57 -

                       У1.00031-01 35 01


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

      M[+]<АРГ1>,[+]<АРГ2>


      Команда чертит от текущей  точки  до  точки  с  координатами
 (<АРГ1>,<АРГ2>). Если перед первым аргументом указан знак "+" или
 "-", то координаты подсчитываются относительно координат  текущей
 точки. Знак перед вторым аргументом не влияет на  этот  режим.  В
 команде M точка с запятой ";" после имени числовой  переменной  в
 первом аргументе не заменяет запятой.
      Имеются   команды,   используемые   непосредственно    перед
 перечисленными командами, изменяющие их действие:

      B - указывает,  что   команда   должна   передвигать
          текущую точку, но не чертить;

      N - после выполнения команды возвращаются
          бывшие координаты текущей точки.

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

      A[<ПОВОРОТ>] изменяет     направление     черчения,
                   значения аргумента означают:
                     0 - нормальная ориентация  (принима-
                         ется по умолчанию);
                     1 -  90 градусов по часовой стрелке;
                     2 - 180 градусов по часовой стрелке;
                     3 - 270 градусов по часовой стрелке;

      S[<МАСШТАБ>] позволяет  изменять  масштаб черчения;
                   аргумент   должен   быть  в   пределах
                   [1,639].  По   умолчанию   принимается
                   значение 4.  Значение 0  тоже указыва-
                   ет    отсутствие      масштабирования,
                   т.е. значение 4.   Значение  аргумента
                   оператор DRAW  делит  на 4 и  умножает
                   на аргументы  команд  черчения.  Таким
                   образом S1 означает  4-кратное  умень-
                   шение, S12 - 3-кратное увеличение.

      Для изменения цвета имеется команда C:

      C[<ЦВЕТ>] задает новый  цвет черчения, номер  кото-
                рого указывается аргументом и должен быть
                в пределах [0,8].

      Для включения подстрок используется команда X:

      X<ИМЯ СИМВОЛЬНОЙ ПЕРЕМЕННОЙ>;

      Переменная  интерпретируется   как   подстрока,   содержащая
 графические команды.

      Оператор DRAW удобен для черчения различных фигур,  создания


                              - 58 -

                       У1.00031-01 35 01


 шрифтов  и  библиотек  элементов  чертежей   с   последующей   их
 компоновкой при помощи команды X, размещения их  в  любом  месте,
 направлении  и  масштабе.  Нарушение  пределов   аргументов   или
 неправильная запись команд вызывает ошибку 5.

      Пример:
              10 A%=100
              20 B%=150
              30 A¤="E10F10D20L20U20R20"
              40 DRAW "BM=A%;,100X=A¤;BM=B%;,100S2X=A¤;"



       4.7. Оператор управления звуком





     4.7.1. Оператор BEEP



      Оператор выдает короткий звуковой сигнал.

      Формат:
              BEEP

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

      Пример:
              100 FOR I=1 TO 10
              110 BEEP
              120 NEXT
              130 INPUT "НОМЕР МЕСЯЦА";MN
              140 IF MN>12 OR MN<1 THEN 100
              150 PRINT MONTH¤(MN)

                              - 59 -

                       У1.00031-01 35 01


       4.8. Операторы трассировки программы





     4.8.1. Оператор TRON



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

      Формат:
              TRON

      В  режиме  трассировки  номер  каждой   выполняемой   строки
 программы выдается на экран в формате [NNN]. Единственный  способ
 остановить вывод  номеров  строк  -  это  перезапустить  ЭВМ  или
 выполнить  оператор  TROFF.  Команда  RUN  не  отменяет  действия
 оператора TRON.
      Этот режим помогает следить за выполнением сложных программ,
 установить, которая из ветвей программы выполняется.



     4.8.2. Оператор TROFF



      Оператор  выключает   включенный   оператором   TRON   режим
 трассировки.

      Формат:
              TROFF

      Пример:
              ...
              249 TRON
              250 ...
              ...
              300 ...
              301 TROFF
              ...
              RUN
              [250][260][270][280][290][300]
              Ok

                              - 60 -

                       У1.00031-01 35 01


                            5. ФУНКЦИИ




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



       5.1. Числовые функции



      Результаты всех числовых функций - числа одинарной точности.



     5.1.1. Функция SQR


      Результат функции - квадратный корень.

      Формат:
              X=SQR(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ  ВЫРАЖЕНИЕ,  ПРИНИМАЮЩЕЕ
                    НЕОТРИЦАТЕЛЬНЫЕ ЗНАЧЕНИЯ.

      Функция вычисляет квадратный корень.  Попытка  обратиться  к
 этой функции  с  отрицательным  значением  аргумента  приведет  к
 ошибке 5.

      Пример:
              PRINT SQR(3)
               1.732051
              Ok



     5.1.2. Функция SIN



      Функция вычисляет синус угла, заданного в радианах.

      Формат:
              X=SIN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Эта функция вычисляет синус угла, заданного в радианах.  Для
 того, чтобы  перевести  градусы  в  радианы,  можно  использовать
 преобразование X=X*PI/180.

                              - 61 -

                       У1.00031-01 35 01


      Пример:
              PRINT SIN(PI/2)
               1
              Ok



     5.1.3. Функция COS


      Функция вычисляет косинус угла, заданного в радианах.

      Формат:
              X=COS(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Пример:
              PRINT COS(0)
               1
              Ok



     5.1.4. Функция TAN



      Функция вычисляет тангенс угла, заданного в радианах.

      Формат:
              X=TAN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Пример:
              100 PRINT "РАССТОЯНИЕ=";S;"УГОЛ=";A
              110 PRINT "ВЫСОТА=";S*TAN(A)



     5.1.5. Функция ATN


      Используется для вычисления арктангенса (в радианах).

      Формат:
              X=ATN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Эта  функция  вычисляет  арктангенс   выражения.   Результат
 функции указывается в радианах и находится между PI/2 и -PI/2.

      Пример:
              PRINT ATN(1)*4
               3.141593
              Ok

                              - 62 -

                       У1.00031-01 35 01


     5.1.6. Функция PI



      Результат функции - число "ПИ".

      Формат:
              X=PI

      Эта функция используется для обозначения числа "ПИ".

      Примеры:
               PRINT PI
                3.141593
               Ok
               PRINT SIN(PI/2)
                1
               Ok



     5.1.7. Функция EXP


      Результат функции - E в указанной степени.

      Формат:
              X=EXP(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ   ВЫРАЖЕНИЕ,  ПРИНИМАЮЩЕЕ
                    ЗНАЧЕНИЯ    ИЗ   ИНТЕРВАЛА
                    [-88.499999999999992,88.029685974121093].

      Функция  производит  возведение  E ( E = 2.7182818284590 ) в
 указанную   степень.  Применяется  главным  образом  для  научных
 вычислений.   Эта   функция  является  обратной к функции LOG( ),
 которая вычисляет натуральные логарифмы (с основанием E), поэтому
 X=EXP(LOG(X)).


      Нарушение указанных границ вызывает ошибку 6.

      Пример:
              PRINT EXP(LOG(3))
               2.999999
              Ok

                              - 63 -

                       У1.00031-01 35 01


     5.1.8. Функция LOG



      Результат функции - натуральный логарифм.

      Формат:
              X=LOG(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ  ВЫРАЖЕНИЕ,  ПРИНИМАЮЩЕЕ
                    ПОЛОЖИТЕЛЬНЫЕ ЗНАЧЕНИЯ.

      Функция используется для вычисления натурального  логарифма.
 Применение функции к аргументу, имеющему отрицательное или равное
 нулю значение, вызывает ошибку 5.
      LOG( ) можно использовать для вычисления логарифма  с  любым
 основанием. Например, для вычисления логарифмов с  основанием  10
 можно использовать формулу: LG(X)=LOG(X)/LOG(10).

      Пример:
              PRINT LOG(EXP(1))
               .999999
              Ok



     5.1.9. Функция ABS


      Результат функции - абсолютное значение аргумента.

      Формат:
              X=ABS(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Результатом   функции   является   значение   аргумента    с
 положительным знаком.

      Пример:
              X=-1/3
              Ok
              PRINT ABS(X*2) + 2
               2.666666
              Ok



    5.1.10. Функция FIX


      Результат функции - целая часть аргумента.

      Формат:
              X=FIX(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Функция   отбрасывает   дробную   часть    аргумента.    Для
 положительных аргументов FIX( ) и INT( ) являются тождественными,
 но для отрицательных значений аргументов результаты этих  функций
 различаются (см. INT( ) ).

                              - 64 -

                       У1.00031-01 35 01


      Пример:
              PRINT FIX(-5.3)
               -5
              Ok
              PRINT FIX(6.25)
               6
              Ok
              IF X/N=FIX(X/N) THEN PRINT "X ДЕЛИТСЯ НА N"
              Ok



    5.1.11. Функция INT


      Результат функции - целое значение, меньшее чем аргумент.

      Формат:
              X=INT(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Функция  выдает  значение  ближайшего   целого   числа,   не
 превосходящего аргумента. Функция INT( ) похожа на FIX( ), но,  в
 отличии от INT(  ),  FIX(  )  просто  отбрасывает  дробную  часть
 аргумента. Различия между функциями проявляются при отрицательных
 аргументах. Для описываемой  функции  выражения  X=ABS(INT(Z))  и
 X=ABS(INT(-Z)) для реальных Z дадут разные результаты.

      Пример:
              IF ABS(INT(Z))=ABS(INT(-Z)) THEN PRINT "Z-ЦЕЛОЕ"
              Ok
              PRINT INT(-5.3),FIX(-5.3)
               -6              -5
              Ok



    5.1.12. Функция SGN



      Результат функции равен минус 1, 0 или 1, в  зависимости  от
 знака аргумента.

      Формат:
              X=SGN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Функцию SGN( ) называют функцией  знака.  Эта  функция  дает
 следующие результаты:

        - если АРГУМЕНТ<0, результат минус 1;

        - если АРГУМЕНТ=0, результат 0;

        - если АРГУМЕНТ>0, результат +1.

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

                              - 65 -

                       У1.00031-01 35 01


      Пример:
              100 INPUT A
              110 PRINT B*SGN(A)



    5.1.13. Функция RND



      Результат функции RND - случайное число из интервала [0,1].

      Формат:
              X=RND(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Функция используется для  получения  псевдослучайных  чисел,
 имеющих равномерное распределение на интервале [0,1].  Ее  удобно
 использовать при создании игровых программ.
      Выдаваемые функцией значения зависят от знака аргумента:
        - если  значение  аргумента  положительно,  то   результат
          RND( )  -  очередное  значение   из   последовательности
          псевдослучайных чисел. Сама  последовательность  зависит
          от начального значения;
        - если аргумент  отрицательный,  то  изменяется  начальное
          значение   последовательности   псевдослучайных   чисел.
          Каждому отрицательному значению аргумента  соответствует
          одна  последовательность,  причем  она  не  зависит   от
          порядка аргумента;
        - если  используется  нулевое   значение   аргумента,   то
          результат функции тот же, что и в предыдущем обращении к
          ней.

      Пример:
              PRINT RND(1),RND(-5),RND(-50)
               .4709943
               .5336828
               .5336828
              Ok
              PRINT RND(3),RND(0)
               .6054241
               .6054241
              Ok



    5.1.14. Функция FRE


      Указывает, сколько осталось свободной памяти компьютера  для
 программы пользователя.

      Формат:
              X=FRE[(<АРГУМЕНТ>)]

      <АРГУМЕНТ>::= СИМВОЛЬНОЕ ИЛИ АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ
                    (ВАЖЕН ЕГО ТИП, А НЕ ЗНАЧЕНИЕ).

      Если аргумент - число или отсутствует, то  подсчитывается  и

                              - 66 -

                       У1.00031-01 35 01


 выдается объем памяти,  отведенной  под  программу  пользователя.
 Если же аргумент символьного типа, то  выдается  свободный  объем
 памяти, отведенной под символьные переменные (см. п.4.2.3). Таким
 образом, функция совершенно не  зависит  от  значения  аргумента,
 важен только его тип. С другой стороны, при обращении  к  функции
 значение  выражения   все   же   высчитывается,   и,   в   случае
 возникновения   ошибки   (например,   переполнения),   дальнейшее
 выполнение программы прекращается.

      Пример:
              PRINT FRE(" "),FRE(0)
               200             11000



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





     5.2.1. Функция CINT


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

      Формат:
              X=CINT(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ  ВЫРАЖЕНИЕ,  ПРИНИМАЮЩЕЕ
                    ЗНАЧЕНИЯ ИЗ ИНТЕРВАЛА [-32768,32767].

      Функция отбрасывает дробную часть арифметического  выражения
 также, как это делает функция FIX( ). Если  значение  выходит  за
 пределы  16-битного  целого  числа  [-32768,32767],  то  выдается
 ошибка переполнения. Функция  используется  по  умолчанию,  когда
 значение  арифметического  выражения   присваивается   переменной
 целого типа.

      Пример:
              PRINT CINT(5.93), CINT(-6.352)
               5               -6
              Ok

                              - 67 -

                       У1.00031-01 35 01


     5.2.2. Функция CSNG


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

      Формат:
              X=CSNG(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

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

      Пример:
              PRINT CSNG(PI)
               3.141593
              Ok



     5.2.3. Функция CDBL


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

      Формат:
              X=CSNG(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

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

      Пример:
              PRINT CDBL(2/3)
               .6666667
              Ok

                              - 68 -

                       У1.00031-01 35 01


       5.3. Функции непосредственного обращения к памяти

     5.3.1. Функция PEEK


      Позволяет прочесть содержимое любой ячейки памяти.

      Формат:
              X=PEEK(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ АДРЕС ЯЧЕЙКИ.

      Эта функция позволяет исследовать любое  определенное  место
 памяти  в  адресном  пространстве.  С  ее  помощью  можно  читать
 системные переменные драйверов и  БЕЙСИК-системы.  Также  функция
 PEEK удобна для ввода данных непосредственно с регистров  внешних
 устройств.
      Результатом функции является целое число - содержимое  слова
 памяти, адрес которого задается аргументом. Значения аргумента от
 минус 32768 до минус  1  обозначают  адреса  от  32768  до  65535
 соответственно.

      Пример:
              PRINT PEEK(&O176),PEEK(&O200)
               100             120
              Ok
      (печатаются значения координат графического курсора).


     5.3.2. Функция INP



      Разрешает чтение данных в оперативной памяти по маске.

      Формат:
              X=INP(<АДРЕС>,<МАСКА>)

      <АДРЕС>::= ЦЕЛОЕ ВЫРАЖЕНИЕ,  УКАЗЫВАЮЩЕЕ  ФИЗИЧЕСКИЙ
                 АДРЕС ЯЧЕЙКИ ОЗУ;

      <МАСКА>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,  УКАЗЫВАЮЩЕЕ,   КОТОРЫЕ
                 БИТЫ СЧИТЫВАЮТСЯ ИЗ СОДЕРЖИМОГО ЯЧЕЙКИ.

      При  помощи  функции  INP  можно  аналогично  функции   PEEK
 непосредственно читать содержимое ячеек оперативной  памяти,  при
 этом  можно  выбирать  только  необходимые  биты.  Функция   дает
 результат целого типа, в котором биты, соответствующие  ненулевым
 битам маски, читаются из указанной ячейки, а  другие  биты  имеют
 значение 0.

      Пример:
              POKE A%,&B10101
              Ok
              PRINT BIN¤(INP(A%,&B11001))
              10001
              Ok

                              - 69 -

                       У1.00031-01 35 01


      Функция удобна при работе с регистрами внешних устройств.

      Пример:
              10 OUT &O177560,&O100,0%
              20 IF INP(&O177560,&O200) THEN 30 ELSE 20
              30 A%=PEEK(&O177562)
              40 PRINT A%
              50 GOTO 20

      (программа печатает коды клавиш клавиатуры).



       5.4. Символьные функции





     5.4.1. Функция ASC


      Функция переводит один байт строки символов в код КОИ-7.

      Формат:
              X=ASC(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= НЕ ПУСТОЕ СИМВОЛЬНОЕ ВЫРАЖЕНИЕ.

      Эта  функция  обрабатывает  первый  байт  строки   символов.
 Значение этой функции выдается как целое число, которое  является
 кодом соответствующего символа по таблице  КОИ-7,  приведенной  в
 ПРИЛОЖЕНИИ 3. Поэтому  результат  функции  принадлежит  интервалу
 [0,255]. Обратной к функции ASC( ) является функция CHR¤( ).  Для
 получения информации о более  дальних  байтах  символьной  строки
 можно применять функцию MID¤.
      Если аргумент - пустая строка, то вызов функции  приводит  к
 ошибке 5.

      Пример:
              ZZ¤="ABC"
              Ok
              PRINT ASC¤(ZZ¤)
               65
              Ok
              PRINT ASC(MID¤(ZZ¤,2))
               66
              Ok

                              - 70 -

                       У1.00031-01 35 01


     5.4.2. Функция CHR¤



      Функция переводит  целое  число  (код  КОИ-7)  в  символьную
 строку из одного символа.

      Формат:
              X¤=CHR¤(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ,  ПРИНИМАЮЩЕЕ  ЗНАЧЕНИЯ
                    ИЗ ИНТЕРВАЛА [0,255].

      При вызове функции значение аргумента трактуется как код  из
 таблицы КОИ-7 и преобразовывается в символьную строку  из  одного
 символа, соответствующего этому коду. Таким образом CHR¤(65) и "A"
 тождественны. Функция CHR¤( )_является обратной к функции ASC( ).
 Если X попадает в необходимый диапазон, и переменная  X¤  состоит
 из одного символа, то всегда верно:

              X=ASC(CHR¤(X)) и X¤=CHR¤(ASC(X¤)).

      Если  значение  аргумента  выходит  за  пределы   указанного
 интервала, то фиксируется ошибка 5.
      Рассматриваемую функцию можно использовать и  при  работе  с
 многобайтовыми строками, например:

              10 OTVET¤=" "
              20 FOR I=1 TO 3
              30 PRINT "УКАЖИТЕ НОМЕР";I;"ОТВЕТА"
              40 INPUT NOMER
              50 OTVET¤=OTVET¤+CHR¤(NOMER)
              60 NEXT
              70 PRINT "ОТВЕТЫ="; OTVET¤

      Для многобайтных  строк  также  можно  использовать  функцию
 MID¤. Заметим, что существуют символы, которые  можно  занести  в
 строку только при помощи функции CHR¤, например:

              10 PRINT CHR¤(7);

      (выдается звуковой сигнал).



     5.4.3. Функция LEN



      Результат функции - длина символьной строки.

      Формат:
              X=LEN(<СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>)

      Функция LEN( ) подсчитывает  количество  символов  строки  и
 может дать любое число от 0 (если строка  пустая)  до  255  (если
 строка наибольшей допустимой длины). Эта функция позволяет узнать
 длину переменной до ее обработки.  Применение  некоторых  функций


                              - 71 -

                       У1.00031-01 35 01


 для "пустых" символьных переменных могут  привести  к  ошибке,  а
 использование функции LEN позволяет избежать этого, например:

              IF LEN(A¤)>0 THEN T¤=MID¤(A¤,1,1)

      Пример:
              100 IF LEN(S¤)>32-POS THEN PRINT CHR¤(10);
              110 PRINT S¤



     5.4.4. Функция MID¤



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

      Формат:
              X¤=MID¤(<АРГ1>,<АРГ2>[,<АРГ3>])
      или
              MID¤(<АРГ4>,<АРГ2>[,<АРГ3>])=
      =<СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>

      <АРГ1>::= СИМВОЛЬНОЕ ВЫРАЖЕНИЕ;

      <АРГ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ  ОТ
                1 ДО 255 И ОПРЕДЕЛЯЮЩЕЕ НОМЕР СИМВОЛА,  С
                КОТОРОГО НАЧИНАЕТСЯ ИСПОЛЬЗУЕМАЯ В ОПЕРА-
                ЦИИ ЧАСТЬ СИМВОЛЬНОЙ СТРОКИ;

      <АРГ3>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,  ПРИНИМАЮЩЕЕ  НЕОТРИЦА-
                ТЕЛЬНЫЕ  ЗНАЧЕНИЯ  И  ОПРЕДЕЛЯЮЩЕЕ  КОЛИ-
                ЧЕСТВО СИМВОЛОВ, УЧАВСТВУЮЩИХ В ОПЕРАЦИИ;

      <АРГ4>::= СИМВОЛЬНАЯ ПЕРЕМЕННАЯ.

      Функция MID¤ позволяет выбрать часть символьной  переменной.
 Это  единственная  функция,  которая  может  встречаться  по  обе
 стороны знака равенства.
      В первом варианте MID¤ используется для выбора подстроки  из
 результата  символьного  выражения  <АРГ1>,  начиная  с  символа,
 указанного вторым аргументом, причем выбирается столько символов,
 сколько задано третьим аргументом.
      Значение  второго  аргумента  не  должно   превышать   длину
 символьного выражения, указанного первым аргументом. Если  третий
 аргумент не указан или выходит за границы строки,  то  выделяется
 часть символьной строки от символа, указанного вторым аргументом,
 до конца.
      Заметим, что выделенная функцией MID¤ подстрока помещается в
 области памяти, отведенной под символьные переменные.
      Во втором варианте, когда функция MID¤( ) находится с  левой
 стороны  знака  равенства,  дополнительная  память  из   области,
 отведенной под символьные переменные,  не  используется.  В  этом
 случае обрабатываемые символьные данные присваиваются  символьной
 переменной, значение которой уже находится в указанной области. В
 этом случае аргументы <АРГ2> и <АРГ3> указывают изменяемое  место
 в символьной  переменной  и  должны  соответствовать  аналогичным
 требованиям, как и в первом случае.

                              - 72 -

                       У1.00031-01 35 01


      Пример:
              100 A¤="ФАЙЛ ПЕРВЫЙ"
              110 A1¤=STRING¤(20," ")
              120 MID¤(A1¤,1)=MID¤(A¤,6)
              130 MID¤(A1¤,7)=MID¤(A¤,1,4)
              140 PRINT A1¤
              RUN
              ПЕРВЫЙ ФАЙЛ
              Ok



     5.4.5. Функция STRING¤



      Функция инициализирует символьную переменную.

      Формат:
              X¤=STRING¤(<АРГУМЕНТ1>,<АРГУМЕНТ2>)
                                     <АРГУМЕНТ3>

      <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ
                     ОТ 0  ДО  255  И  ОПРЕДЕЛЯЮЩЕЕ  ДЛИНУ
                     СОЗДАВАЕМОЙ СИМВОЛЬНОЙ СТРОКИ;

      <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ
                     ОТ 0  ДО  255 , СООТВЕТСТВУЮЩИЕ  КОДУ
                     КОИ-7,  КОТОРЫМ   ЗАПОЛНЯЕТСЯ   НОВАЯ
                     СИМВОЛЬНАЯ СТРОКА;

      <АРГУМЕНТ3>::= СИМВОЛЬНОЕ ВЫРАЖЕНИЕ, ПЕРВЫМ СИМВОЛОМ
                     КОТОРОГО ЗАПОЛНЯЕТСЯ НОВАЯ СИМВОЛЬНАЯ
                     СТРОКА.

      Предназначением  функции  STRING¤(   )   является   создание
 символьной переменной любой длины, содержащей одинаковые символы.
 Вы можете определить этот символ либо задав его по таблице  КОИ-7
 кодов (см. ПРИЛОЖЕНИЕ 3), либо указав  нужный  символ  с  помощью
 символьного  выражения,  в  частности  текстовой  константы.  Тип
 второго  аргумента  функции  STRING¤   указывает,   каким   путем
 определяется   символ,   которым   инициализируется    символьная
 переменная. Например, выражения STRING¤(41,32) и  STRING¤(41," ")
 приводят к одинаковому результату.
      Будет  зафиксирована  ошибка  5,  если  один   из   числовых
 параметров выйдет за пределы интервала   [0,255].  Если  заданная
 вами длина символьной строки равна 0,  то  будет  создана  пустая
 строка, несмотря на инициализирующий символ.

      Пример:
              PRINT NAZV¤; STRING¤(50-LEN(NAZV¤),"."); NOM

                              - 73 -

                       У1.00031-01 35 01


      5.4.6. Функция VAL



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

      Формат:
              X=VAL(<СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>)

      Функция  применяется  к   символьному   выражению,   которое
 предположительно  содержит  действительное  число,  записанное  в
 кодах КОИ-7. Это число может включать знак,  десятичную  точку  и
 обозначение  порядка.  Функция  VAL(  )  дает  значение   двойной
 точности. Результат символьного выражения  просматривается  слева
 направо до недопустимого  для  чисел  кода.  Если  первый  символ
 строки нельзя  отнести  к  числу,  то  результат  будет  нулевой.
 Например, результат VAL("A12:") равен 0, но VAL("23A12:") - число
 23.
      Функция VAL является обратной к функции STR¤( ).

      Пример:
              PRINT VAL(MID¤("A12:",2))
               12
              Ok



     5.4.7. Функция INKEY¤



      Дает один символ, введенный с клавиатуры.

      Формат:
              X¤=INKEY¤

      Эта функция считывает символ с буфера ввода клавиатуры. Если
 не  было  введено  никакого  символа,  то  INKEY¤  выдает  пустую
 символьную строку (""). Если символ был введен, то он считывается
 из буфера и выдается через INKEY¤. После обращения к этой функции
 буфер очищается, поэтому надо заботиться о сохранении результата.
      Эта функция может быть применена везде в качестве символьной
 строки. Надо обратить внимание на  то,  что  результатом  функции
 может быть пустая строка, в некоторых случаях вызывающая  ошибку.
 Эта функция является главным способом считывания кодов клавиш.
      Достоинствами этой функции являются то, что она не повторяет
 считывания кода клавиши, а также не ждет символа,  если  не  было
 нажато ни на одну клавишу, что обеспечивает не  диалоговый  режим
 ввода с клавиатуры, применяемым,  например,  в  операторе  INPUT.
 INKEY¤ может прочитать коды не только алфавитно-цифровых  клавиш.
 Присчитывании не производится эхо-печать на экране.

      Пример:
              10 CH¤=INKEY¤
              20 IF CH¤="" THEN 10
              30 PRINT ASC(CH¤);
              40 GOTO 10

                              - 74 -

                       У1.00031-01 35 01


      (программа печатает коды клавиш).



     5.4.8. Функция STR¤



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

      Формат:
              X¤=STR¤(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)

      Эта функция переводит числа  в  строку  символов  аналогично
 оператору PRINT. Численное выражение вычисляется  как  обычно,  а
 результат "печатается" в новую временную строку в области  строк,
 что и является результатом функции STR¤. (Не спутайте STR¤(  )  с
 функцией STRING¤( )).  Например,  если  N=1/3,  то  STR¤(N)  даст
 строку ".33333333333333333" и каждое число 3 в  самом  деле  есть
 символ, определенный как "3" (восьмеричный код 63).
      Эта функция  является  обратной  к  функции  VAL.  Например,
 результат VAL(STR¤(N)) будет N,  а  STR¤(VAL(NM¤))  будет  строка
 NM¤, если NM¤ содержит действительное число.
      Функция удобна  для  форматирования  числовых  данных  перед
 выводом на экран, для вкомпоновки чисел  в  текст.  От  оператора
 PRINT функция отличается тем,  что  не  выдает  пробела  в  конце
 строки.

      Пример:
              A=123
              Ok
              PRINT MID¤(STR¤(A),LEN(STR¤(A))-1)
              23
              Ok



     5.4.9. Функция BIN¤



      Превращает целые числа в символы двоичного формата.

      Формат:
              X¤=BIN¤(<ЦЕЛОЕ ВЫРАЖЕНИЕ>)

      Результат выражения переводится в целый тип и превращается в
 символьную строку, представляющую  двоичный  его  код.  Например,
 аргумент с значением 3 даст результат "11", т. е., строку из двух
 символов "1" (восьмеричный код 61). Знака или пробелов функция не
 генерирует,  незначащие  нули  перед  числом  не  обрабатываются.
 Максимальная длина строки результата  функции  BIN¤(  )  есть  16
 байтов. Главным образом BIN¤( ) используется для печати двоичного
 представления чисел.
      Пример:
              PRINT BIN¤(44)
              101100
              Ok

                              - 75 -

                       У1.00031-01 35 01


    5.4.10. Функция OCT¤



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

      Формат:
              X¤=OCT¤(<ЦЕЛОЕ ВЫРАЖЕНИЕ>)

      Значение  аргумента  переводится  в  целый  тип,  полученный
 результат превращается в строку символов  в  соответствии  с  его
 значением в восьмеричной  системе  счисления  аналогично  функции
 BIN¤. Пробелов не создается, незначащие нули отбрасываются. Таким
 образом, аргумент 12 дает результат "14", т. е., строку  из  двух
 символов  "1"  и  "4"  (восьмеричные   коды   КОИ-7   61   и   64
 соответственно). Максимальная длина строки, полученной при помощи
 OCT¤, - шесть символов.
      Функция используется для печати  восьмеричного представления
 чисел.

      Пример:
              PRINT OCT¤(&HFFFF)
              177777
              Ok



    5.4.11. Функция HEX¤



      Превращает   численный   аргумент   в   символьную    строку
 шестнадцатеричного представления.

      Формат:
              X¤=HEX¤(<ЦЕЛОЕ ВЫРАЖЕНИЕ>)

      Функция HEX¤ переводит значение  аргумента  в  целый  тип  и
 результат  превращает  в   символьную   строку,   байты   которой
 представляют     значение     аргумента,     представленное     в
 шестнадцатеричном  формате.  Знак  и  пробелы  не   генерируются,
 незначащие нули отбрасываются. Это значит, что аргумент  43  дает
 результат "2B",  другими  словами,  строку  из  двух  символов  с
 восьмеричными кодами  КОИ-7  62  и  102.  Из  этого  следует, что
 максимальная длина значения функции HEX¤( ) - 4 байта.
      Функция  используется  для   распечатки   шестнадцатеричного
 представления числа.

      Пример:
              PRINT HEX¤(&H1A)
              1A
              Ok

                              - 76 -

                       У1.00031-01 35 01


       5.5. Вспомогательные функции ввода/вывода





     5.5.1. Функция CSRLIN



      Результат  функции  -  номер  строки  экрана,   на   которой
 находится курсор.

      Формат:
              X=CSRLIN[(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)]

      Результат функции  -  число  целого  типа,  указывающее,  на
 которой строке экрана  находится  курсор.  Верхняя  строка  имеет
 номер  0,  нижняя  -  23.  Заключенное  в  скобки  арифметическое
 выражение  не  используется,  хотя  подсчитывается,   что   может
 привести к ошибке.
      CSRLIN вместе с функцией  POS  применяется  для  определения
 места на экране, куда  будет  выводиться  информация.  Оператором
 LOCATE можно менять месторасположение курсора.

      Пример:
              ? CSRLIN
               10
              Ok
      (результат примера зависит от местонахождения курсора).



     5.5.2. Функция POS



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

      Формат:
              X=POS[(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)]

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

      Пример:
              1000 X=POS
              1010 Y=CSRLIN
              1020 LOCATE X1,Y1
              1030 GOSUB 2000
              1040 STOP
              2000 LOCATE X,Y
              2100 RETURN

                              - 77 -

                       У1.00031-01 35 01


     5.5.3. Функция LPOS



      Дает положение головки печатающего устройства.

      Формат:
              X=LPOS[(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)]
      Функция LPOS  выдает  значение  счетчика  положения  головки
 печатающего устройства. Первая  позиция  имеет  номер  1.  Каждый
 напечатанный символ  увеличивает  значение  счетчика,  переход  к
 новой строке очищает его, присваивая значение 1. Действие функции
 надежно только при  выводе  текста,  так  как  БЕЙСИК-система  не
 контролирует управляющих  символов,  которые  могут  повлиять  на
 положение головки.
      Функцию LPOS( ) можно  использовать  при  выводе  данных  на
 печать столбцами.

      Пример:
              250 IF LPOS>20 THEN LPRINT
              260 LPRINT TAB(20);A



     5.5.4. Функция EOF



      Проверяет достижение конца файла.

      Формат:
              X=EOF

      Функция проверяет,  равен  ли  следующий  еще  не  введенный
 оператором   INPUT#   символ   указателю   конца   файла   "СУ/Z"
 (восьмеричный код 32). Если нет, то  выдается  значение         1
 (TRUE), в противном случае - 0  (FALSE).  Если  при  обращении  к
 функции EOF буфер оказывается пустым, то вводится очередной  блок
 файла.
      Так как чтение метки конца  файла  вызывает  ошибку  55,  то
 целесообразно перед  каждым  INPUT#  проверять  достижение  конца
 файла при помощи функции EOF. Функция дает логический  результат,
 поэтому ее удобно использовать  в  операторе  IF.  Если  файл  не
 открыт, выдается сообщение об ошибке  59.  Если  открыт  выходной
 файл, то обращение к EOF приводит к ошибке 52.

      Пример:
              50 IF NOT EOF THEN 20
              60 CLOSE

                              - 78 -

                       У1.00031-01 35 01


       5.6. Функции оператора PRINT



     5.6.1. Функция AT



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

      Формат:
              PRINT AT(<АРГУМЕНТ1>,<АРГУМЕНТ2>)

      <АРГУМЕНТ1>::= ЦЕЛОЕ  ВЫРАЖЕНИЕ,  ЗНАЧЕНИЕ  КОТОРОГО
                     УКАЗЫВАЕТ КОЛОНКУ  ЭКРАНА,  НАЧИНАЯ С
                     КОТОРОЙ   БУДУТ   ВЫВОДИТСЯ   ДАННЫЕ;
                     ЧИСЛО ИЗ ИНТЕРВАЛА [0,255];

      <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ,  ЗНАЧЕНИЕ   КОТОРОГО
                     УКАЗЫВАЕТ СТРОКУ ЭКРАНА;
                     ЧИСЛО ИЗ ИНТЕРВАЛА [0,240].

      Действия  функции  AT(  )  аналогичны  действиям   оператора
 LOCATE. Отличие состоит  в  том,  что,  используя  AT(  ),  можно
 выводить текст в  произвольных  местах  экрана  одним  оператором
 PRINT.  Значение  первого  аргумента  задает  колонку  экрана,  а
 значение второго - строку. Тем самым задается позиция на  экране,
 с которой начинается вывод  последующих  данных.  Колонки  экрана
 нумеруются от 0 до 63 слева направо, строки - от 0 до  23  сверху
 вниз. Если значение первого аргумента превышает  63,  то  подсчет
 колонок продолжается с начала той же строки. Аналогичные действия
 происходят и со строками.
      Если значения аргументов выходят за допустимые  пределы,  то
 выдается сообщение об ошибке 5.

      Пример:
        PRINT AT(15,14);"A"
        Ok
        PRINT AT(15,38);"C"
        Ok



     5.6.2. Функция TAB



      Функция   помогает   организовать   построение   колонок   в
 операторах PRINT.

      Формат:
              PRINT TAB(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ НОМЕР ПО-
                    ЗИЦИИ, С КОТОРОЙ  ДОЛЖЕН  ПРОДОЛЖАТЬСЯ
                    ВЫВОД; ЧИСЛО ИЗ ИНТЕРВАЛА [0,255].

                              - 79 -

                       У1.00031-01 35 01




      Функция TAB( ) может применяться и в операторе  LPRINT.  Она
 выводит пробелы до тех пор, пока не будет  достигнута  колонка  с
 номером, равным значению  аргумента.  Если  курсор  находится  на
 позиции с большим номером, чем  значение  аргумента,  то  TAB(  )
 игнорируется.
      Позиции строки экрана нумеруются от 0 до 63  слева  направо.
 Если  значение  аргумента  превышает  63,  то   подсчет   колонок
 продолжается на той же строке, т.е., TAB(1) совпадает с TAB(65).
      Если значение аргумента выходит за  допустимые  пределы,  то
 фиксируется ошибка 5.

      Пример:
              100 CW=8
              110 PRINT A;TAB(CW);B;TAB(2*CW);C;TAB(3*CW);D



     5.6.3. Функция SPC



      В операторе PRINT выводит пробелы.

      Формат:
              PRINT SPC(<АРГУМЕНТ>)

      <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОЗНАЧАЮЩЕЕ ЧИСЛО ПРО-
                    БЕЛОВ И ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ В  ПРЕДЕ-
                    ЛАХ [0,255].

      Эта функция используется в операторах  PRINT  и  LPRINT  для
 вывода необходимого числа пробелов. Она не использует  символьной
 области.
      SPC( ) может употребляться  для  очистки  экрана  впереди  и
 после выводимых данных от "мусора",  возможно  оставшегося  после
 предыдущего вывода.

      Пример:
              220 ZZ=8
              230 PRINT SPC(ZZ);AX;SPC(ZZ);BX;SPC(ZZ)

                              - 80 -

                       У1.00031-01 35 01


       5.7. Функции, определенные пользователем





     5.7.1. Функции FN



      Обозначают место вызова пользовательских функций.

      Формат:
              X=FN <ИМЯ> [(<СПИСОК>)]

      <ИМЯ>::= ИМЯ ФУНКЦИИ, ОПРЕДЕЛЕННОЙ ОПЕРАТОРОМ DEF FN;

      <СПИСОК>::= ОДНО ИЛИ НЕСКОЛЬКО ВЫРАЖЕНИЙ, РАЗДЕЛЕННЫХ
                  ЗАПЯТЫМИ.

      Функции  FN  -  это  функции  БЕЙСИК-системы,   определенные
 пользователем.  Функция  должна  быть   определена   при   помощи
 оператора DEF FN раньше ее вызова. Выражения  в  списке  являются
 фактическими параметрами и должны по числу, расположению в списке
 и типу соответствовать списку формальных параметров  в  операторе
 DEF FN. Значения фактических параметров вставляются в выражение в
 определении  функции,  и  значение  этого   выражения   считается
 результатом функции.
      При появлении ошибок в вызове функции следует  проверить  ее
 определение, так как в операторе DEF FN ошибки не проверяются.

      Пример:
              10 DEF FN LG(X)=LOG(X)/LOG(10)
              20 PRINT FNLG(100)



     5.7.2. Функция USR



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

      Формат:
              X=USR[<ЦИФРА>](<АРГУМЕНТ>)

      <ЦИФРА>::= ЦЕЛАЯ КОНСТАНТА ИЗ ИНТЕРВАЛА [0,9], УКАЗЫ-
                 ВАЮЩАЯ НОМЕР ВЫЗЫВАЕМОЙ ФУНКЦИИ; ПО  УМОЛ-
                 ЧАНИЮ 0;

      <АРГУМЕНТ>::= ВЫРАЖЕНИЕ, ЗНАЧЕНИЕ КОТОРОГО ПЕРЕДАЕТСЯ
                    ФУНКЦИИ USR.

      Перед обращением к  функции  необходимо  определить  ее  при
 помощи оператора DEF USR. Одновременно могут быть  определены  10
 различных функций USR с номерами от 0 до 9.
      Вызов функций происходит при помощи машинной инструкции  JSR
 PC.  Подпрограмма  может  находиться  в  любом  месте  доступного

                              - 81 -

                       У1.00031-01 35 01


 адресного  пространства,  включая   также   подпрограммы   самого
 БЕЙСИКА. Возможны непосредственная передача  подпрограмме  одного
 аргумента любого типа и возврат одного значения обязательно  того
 же типа. После передачи управления подпрограмме в регистре общего
 назначения R5 находится адрес,  а  в  R3  -  тип  аргумента.  Тип
 закодирован следующим образом: единица в 15-ом  разряде  означает
 символьную строку; информация о других типах хранится  в  младшем
 байте и имеет значения:

              -1 - целый аргумент,
               0 - число с плавающей запятой
                   двойной точности,
               1 - число с плавающей запятой
                   одинарной точности.

      В случае символьной строки  в  качестве  значения  аргумента
 передаются два слова, в  первом  из  которых  хранится  длина,  в
 другом - начальный адрес строки.
      В вершине  стека  находится  адрес  возврата,  а  за  ним  -
 значение аргумента. Таким образом в R5  хранится  значение  SP+2.
 Вернуть  управление  вызвавшей  программе  возможно  при   помощи
 инструкции RTS PC, предварительно поместив  результат  функции  в
 ячейки, указываемые регистром R5. Если содержимое этих  ячеек  не
 будет изменяться, то результатом останется значение аргумента.
      Использование функций USR  позволяет  расширить  возможности
 БЕЙСИК-системы, выполнить невозможные или медленно выполняемые  в
 ней действия.
      Вызов неопределенной функции USR приводит к ошибке 5.

      Пример:
              10 PRINT USR(0%)
              20 A%=USR2(A%)

                              - 82 -

                       У1.00031-01 35 01


                                                  ПРИЛОЖЕНИЕ  1



                       СООБЩЕНИЯ ОБ ОШИБКАХ



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


     1    NEXT без FOR
          NEXT не предшествовал FOR или переменная, исполь-
          зованная  в  FOR,  не  соответствует  переменной,
          использованной в NEXT.


     2    Синтаксическая ошибка
          Неверное использование символов, например, число
          открывающих   скобок   не   соответствует  числу
          закрывающих, неправильная  запись операторов или
          их  составных частей,  неправильно  использована
          запятая и т.п.


     3    RETURN без GOSUB
          При выполнении RETURN  обнаружено, что  не  было
          выполнено GOSUB.


     4    Кончились DATA
          При выполнении  оператора  READ  обнаружено, что
          список оператора DATA исчерпан.


     5    Неправильный вызов функции
          Ошибка возникает в следующих случаях:
          - отрицательный индекс;
          - неправильный аргумент для LOG, SQR;
          - неправильные значения аргументов для графичес-
            ких и других операторов;
          - неопределенная с DEFUSR функция USR и др.


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


     7    Переполнение памяти
          Программа  не   помещается   в    памяти,   либо
          использовано слишком  много вложенных операторов
          FOR, GOSUB,  слишком  много  переменных, слишком

                              - 83 -

                       У1.00031-01 35 01


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


     8    Неопределен номер строки
          В GOTO, GOSUB, IF, RESTORE, RENUM, AUTO, ON  или
          DELETE использован номер несуществующей строки.


     9    Недопустимый индекс (за пределами)
          Ссылка на элемент  массива  с  индексом, который
          выходит  за  пределы  размерности  массива, либо
          указано неправильное число индексов.


    10    Повторное определение массива
          Массив    определен  двумя  операторами    DIM,
          или  массив  определен   оператором DIM   после
          того,   как  по   умолчанию для  этого массива
          была установлена размерность 10.


    11    Деление на нуль
          В выражении  встретилось   деление  на    нуль,
          или нуль  был возведен в отрицательную степень.


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


    13    Ошибка типов
          Попытка  присвоить символьной переменной числовое
          значение  или   наоборот;  функции,  использующей
          числовой  аргумент,  передается  символьный аргу-
          мент или наоборот.


    14    Не хватает места символьным переменным
          Превышено количество оставшейся  памяти,  которая
          была отведена символьным переменным по  умолчанию
          или оператором CLEAR.


    15    Слишком длинная строка
          Была  попытка   создать  строку    длиной   более
          чем 255 символов.


    16    Не определена


    17    Продолжение невозможно
          Была сделана   попытка   продолжить выполнение
          программы, которая:

                              - 84 -

                       У1.00031-01 35 01


          1. Была прервана из-за возникновения ошибки;
          2. Была изменена;
          3. Не существует.


    18    Не определена функция пользователя
          Попытка обратиться к функции FN до ее  определе-
          ния  оператором DEFFN.


    19    Ошибка устройства ввода/вывода
          Встречается при работе устройства ввода/вывода.


    20    Не определена


    21    Не определена


    22    Не определена


    23    Не определена


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


    25    Переполнение буфера ввода
          Была сделана   попытка  ввести  строку   длиной
          более чем 255 символов.


    26-51 Не определены


    52    Ошибочный номер файла
          Оператор   или   команда   ссылается на   файл,
          который  не  открыт или открыт с другой целью
          (не для записи или чтения).


    53    Не определена


    54    Файл уже открыт
          Применен  оператор  OPEN   для   файла,  который
          уже открыт.


    55    Конец файла
          Попытка прочитать запись окончания файла
          оператор  INPUT#  был  выполнен  после того, как
          все данные  из  файла были введены, или применен

                              - 85 -

                       У1.00031-01 35 01


          Для  пустого  файла. Чтобы избежать этой ошибки,
          для обнаружения окончания файла применяйте функ-
          цию EOF.


    56    Ошибочное имя файла
          В операторах LOAD, SAVE или OPEN  использовано
          неправильное имя файла  (имя файла  состоит из
          слишком большого количества символов).


    57    Строка без номера
          Команда непосредственного выполнения в программе
          во время загрузки КОИ-7 файла. Загрузка прерыва-
          ется.


    58    Не определена


    59    Файл не открыт
          Оператор ввода/вывода применен к файлу, который
          не был открыт.


    60    Не определена


    61    Не определена


    62    Ошибочное имя устройства
          Было использовано   ошибочное  имя  устройства
          (в данной версии языка отсутствует).

                              - 86 -

                       У1.00031-01 35 01


                                                  ПРИЛОЖЕНИЕ  2



                СПИСОК КОМАНД, ОПЕРАТОРОВ И ФУНКЦИЙ






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



               Модификация текста программы в памяти



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

   DELETE    Удаляет группы строк из текста программы.

   NEW       Удаляет всю программу и выполняет оператор
             CLEAR.

   LIST      Выводит текст программы на экран.

   LLIST     Выводит текст программы на печатающее
             устройство. На РМП.

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




                Хранение программ на магнитной ленте



   BLOAD     Загружает с ленты в оперативную память
             двоичные коды.

   BSAVE     Записывает  блок  памяти  на  ленту в
             двоичном коде.

   CLOAD     Загружает программу с кассетной магнитной
             ленты во внутреннем формате БЕЙСИК-системы.

   CSAVE     Записывает программу на магнитную ленту во
             внутреннем формате.

   LOAD      Загружает программу с ленты
             ( формат КОИ-7 ).

                              - 87 -

                       У1.00031-01 35 01

   SAVE      Записывает программу на ленту
             ( формат КОИ-7 ).

   MERGE     Загружает программу (файл в формате КОИ-7) с
             кассетной магнитной ленты и объединяет  ее с
             программой в ОЗУ.

   FILES     Фиктивное чтение или поиск файла с указанным
             именем.



                 Инициализация системных переменных



   CLEAR     Очищает все переменные, закрывает файлы и т.п.
             Резервирует память под символьные переменные,
             определяет верхний адрес ОЗУ для БЕЙСИКА.

   KEY       Переопределяет функциональные клавиши.

   TRON      Включает режим трассировки.

   TROFF     Выключает режим трассировки.



             Команды, влияющие на выполнение программы



   CONT      Продолжает выполнение программы после
             оператора STOP или клавиши "СТОП".

   RUN       Начинает выполнение программы.

   SYSTEM    Осуществляет переход в режим монитора машины.

   <СУ>A     Осуществляет шаговый режим выполнения
             программы.



                   Определение параметров системы



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

   DIM       Определяет, резервирует память и инициализирует
             массивы.

   DEF FN    Определение пользовательских функций.

   DEF USR   Определяет стартовые адреса пользовательских

                              - 88 -

                       У1.00031-01 35 01


             машинных подпрограмм-функций.



               Операторы, изменяющие значения переменных



   FOR       Оператор цикла. Меняет значение переменной
             цикла.

   LET       Основной оператор присвоения новых значений
             переменным. Слово LET не обязательно.



                           Числовые функции



   ABS( )    Абсолютное значение.

   ATN( )    Арктангенс. Результат выдается в радианах.

   CDBL( )   Преобразование результата выражения в тип
             двойной точности.

   CINT( )   Преобразование результата выражения в
             целый тип.

   COS( )    Косинус угла, заданного в радианах.

   CSNG( )   Преобразование результата выражения в тип
             одинарной точности.

   EXP( )    Возведение E в степень.

   FIX( )    Отбрасывает дробную часть аргумента.

   FRE( )    Результат в зависимости от типа аргумента -
   FRE       объем свободной области памяти (аргумент
             арифметический или отсутствует) или свободной
             области памяти, отведенной под символьные
             переменные (аргумент символьный).

   INT( )    Округляет аргумент до целого числа, не
             превосходящего аргумента.

   LOG( )    Натуральный логарифм.

   PI        Число "ПИ".

   RND( )    Псевдослучайное число.

   SGN( )    Функция знака.

   SIN( )    Синус угла, заданного в радианах.

                              - 89 -

                       У1.00031-01 35 01


   SQR( )    Квадратный корень.

   TAN( )    Тангенс угла, заданного в радианах.



                         Символьные функции



   ASC( )    Переводит символ в числовой код ASCII.

   BIN¤( )   Преобразование целого числа в строку,
             содержащую двоичное представление числа.

   CHR¤( )   Переводит числовой код ASCII в символ.

   HEX¤( )   Преобразование целого числа в строку,
             содержащую 16-ричное представление числа.

   LEN( )_   Текущая длина символьного выражения.

   MID¤( )   Выбор части символьного выражения.

   MID¤( )=  Присвоение результата символьного выражения
             части символьной переменной.

   OCT¤( )   Преобразование целого числа в строку,
             содержащую восьмеричное представление числа.

   SPC( )    Функция, входящая в команду PRINT. Выводит
             указанное количество пробелов.

   STRING¤() Формирует строку повторяющегося указанного
             символа.

   STR¤( )   Преобразует число в символьную строку,
             содержащую число.

   TAB( )    Функция, входящая в команду PRINT. Выводит
             пробелы до указанной позиции.

   VAL( )    Преобразует часть символьной переменной,
             содержащей цифры, в число.



            Операторы, управляющие выполнением программы



   END       Оканчивает выполнение программы.

   FOR       Начинает выполнение цикла.

   GOSUB     Вызов подпрограммы.

                              - 90 -

                       У1.00031-01 35 01


   GOTO      Переход на новую строку программы.

   IF        В зависимости от выполнения условия
             выполняется одна из ветвей оператора IF.

   NEXT      Оканчивает цикл, начатый оператор FOR.

   RETURN    Оканчивает подпрограмму и осуществляет возврат
             к следующему за GOSUB оператору.

   ON        Оператор выбора, выполняющий безусловный
             переход или вызывающий подпрограммы в
             зависимости от значения выражения.

   STOP      Временно приостанавливает выполнение программы
             и выдает сообщение.



                Операторы инициализации переменных



   DATA      Определяет список внутренних данных.

   READ      Ввод данных из операторов DATA в переменные.

   RESTORE   Устанавливает ввод с определенного оператора
             DATA.



                       Операторы комментария



   REM       Оператор для комментария.
   '         Весь текст в строке после этого знака
             рассматривается как комментарий.



          Работа с памятью и регистрами внешних устройств



   INP( )    Чтение данных по маске.

   OUT       Запись данных по маске.

   PEEK( )   Чтение данных из памяти.

   POKE      Запись данных в память.

   USR( )    Вызов пользовательской подпрограммы-функции
             в машинных кодах.

                              - 91 -

                       У1.00031-01 35 01


                     Управление экраном дисплея



   CLS       Очистка экрана.

   COLOR     Переключение цвета фона и текущего цвета
             букв.

   LOCATE    Передвигает курсор, высвечивая или
             гася его.

   PRINT     Выводит данные на экран.
   ?



                    Функции управления курсором



   AT( )     Функция, входящая в команду PRINT. Помещает
             курсор в произвольную позицию экрана.

   CSRLIN( ) Номер строки, на которой находится курсор.
   CSRLIN    Параметр фиктивный.


   POS( )    Номер столбца, на котором находится курсор.
   POS       Параметр фиктивный.

   SPC( )    Функция, входящая в команду PRINT. Выводит
             указанное количество пробелов.

   TAB( )    Функция, входящая в команду PRINT. Выводит
             пробелы до указанной позиции.



                         Операторы графики



   CIRCLE    Рисует окружности, овалы, дуги.

   DRAW      Выполняет строки графических команд.

   LINE      Чертит линии и прямоугольники.

   PAINT     Заполняет замкнутую область любым цветом.

   POINT( )  Дает номер цвета указанной точки экрана.

   PRESET    Окрашивает указанную точку в цвет
             фона.

   PSET      Окрашивает указанную точку в указанный
             цвет.

                              - 92 -

                       У1.00031-01 35 01


                         Управление звуком



   BEEP      Выдает звуковой сигнал.



                      Работа с файлами данных



   CLOSE     Заканчивает операции ввода (вывода)
             с файлом на МЛ.

   EOF       Функции проверки конца входного файла на
             магнитной ленте.

   INPUT#    Ввод данных из файла на магнитной ленте.

   OPEN      Инициализация обмена данными с файлом
             на МЛ для ввода (вывода).

   PRINT#    Вывод данных в файл на магнитной ленте.



                       Управление клавиатурой



   INKEY¤    Результат - введенный символ или
             пустая строка.

   INPUT     Вводит строку символов.



                  Вывод на печатающее устройство



   PRINT     Печать  данных  на   печатающем
             устройстве.




                             Операции



   AND,OR,NOT,EQV,IMP,XOR
            Логические операции
   ^, *, /, +, -, MOD, \
            Бинарные арифметические операции
   -, +     Унарные арифметические операции

                              - 93 -

                       У1.00031-01 35 01


   +        Бинарная символьная операция (конкатенация)

   =, <>, ><, <, >, <=, =<, =>, >=
            Логические операторы отношения

                              - 94 -

                       У1.00031-01 35 01


                                                 ПРИЛОЖЕНИЕ  3



            ТАБЛИЦА КОДОВ КОИ-7 "ЭЛЕКТРОНИКИ МС 0511"



==========================================================
  0   1   2   3   4   5   6   7   8   9   A  B C  D  E  F
==========================================================
0    СБР ПРО  0   @   P   '          ШАГ     -       Ю  П
     ТАБ БЕЛ
----------------------------------------------------------
1         !   1   A   Q        ПОВТ  К   -  --       А  Я
                                 **
----------------------------------------------------------
2         "   2   B   R         ИСУ  З      #        Б  Р
                                 *
----------------------------------------------------------
3 ГТ  !   #   3   C   S              С   -  !        Ц  С
----------------------------------------------------------
4     !   ¤   4   D   T         БЛР  Ч   =           Д  Т
----------------------------------------------------------
5    --   %   5   E   U             ГРАФ -  -        Е  У
----------------------------------------------------------
6    --   &   6   F   V              ЗАП -  !!       Ф  Ж
----------------------------------------------------------
7 ЗБ --   /   7   G   W             СТИР =  !        Г  В
----------------------------------------------------------
8 -- --   (   8   H   X                  =           Х  Ь
----------------------------------------------------------
9    --   )   9   I   Y         ТАБ СБР-    -        И  Ы
                                **
----------------------------------------------------------
AВВОД !   *   :   J   Z             ГАШ  -  =        Й  З
                                   КУРСОРА
                                    *
----------------------------------------------------------
B     !   +   ;   K   [             32/  -  -        К  Ш
                                    64
----------------------------------------------------------
CСБР      ,   <   L   \         РП  ИНВС - =         Л  Э
----------------------------------------------------------
DУСТ      -   =   M   ]             ИНВЭ ! =         М  Щ
 ТАБ
 **
----------------------------------------------------------
EРУС      .   >   N   ^             УСТ  - --        Н  Ч
 **                                 ИНД
                                     *
----------------------------------------------------------
FЛАТ      /   ?   O   _       ЗБ   ПОДЧ !!           О
 **
==========================================================

                              - 95 -

                       У1.00031-01 35 01


      П_Р_И_М_Е_Ч_А_Н_И_Е.  *  -  коды   передаются   с   драйвера
 клавиатуры на драйвер ТВ- приемника, минуя внешнюю программу.  **
 - коды используются только драйвером клавиатуры.

                              - 96 -

                       У1.00031-01 35 01


                                                  ПРИЛОЖЕНИЕ  4


             ЗАРЕЗЕРВИРОВАННЫЕ В БЕЙСИК-СИСТЕМЕ СЛОВА



      Приведенные   в   списке   слова   являются   ключевыми    в
 БЕЙСИК-системе,  поэтому  их  нельзя   использовать   как   имена
 переменных. Рядом указывается страница,  где  описывается  данное
 слово.


       ABS     63                BEEP     58
       AND     15                BLOAD    23
       ASC     69                BSAVE    24
       AT      78                BIN¤     74
       ATN     61
       AUTO    27


       CDBL    67                COLOR    48
       CHR¤    70                CONT     19
       CINT    66                COS      61
       CIRCLE  54                CSAVE    22
       CLEAR   38                CSNG     67
       CLOAD   22                CSRLIN   76
       CLS     48                CLOSE    46
                                 SCREEN   49


       DELETE  26                ELSE     31
       DIM     37                END      35
       DRAW    56                EOF      77
       DATA    39                EXP      62
       DEF     41


       FILES   22                GOSUB    29
       FIX     63                GOTO     29
       FOR     32
       FRE     65


       HEX¤    75                IF       31
                                 IMP      68
                                 INKEY¤   73
                                 INPUT    44
                                 INT      64


       KEY     37                LEN      70
                                 LIST     25
                                 LLIST
                                 LOAD     20
                                 LOCATE   50
                                 LOG      63
                                 LET      28

                              - 97 -

                       У1.00031-01 35 01


                                 LPOS     77
                                 LINE     53


       MID¤    71                NEW      28
       MOD                       NEXT     32
       MERGE   21                NOT      44


       ON      33                PAINT    55
       OR      15                PEEK     68
       OUT     47                PI       62
       OPEN    45                POINT    52
       OCT¤    75                POKE     46
                                 POS      76
                                 PRESET   52
                                 PRINT    43
                                 PSET     51


       REM     36                SAVE     21
       RENUM   26                SGN      64
       RETURN  30                SIN      60
       RND     65                SQR      60
       RUN     18                STEP
       READ    40                STOP     34
       RESTORE 40                STR¤     74
                                 SYSTEM   20
                                 STRING¤  72
                                 SPC      79


       TAB     78                VAL      73
       TAN     61
       THEN    31
       TO
       TROFF   59
       TRON    59


       XOR     15


      П_Р_И_М_Е_Ч_А_Н_И_Е. В более поздних версиях  БЕЙСИК-системы
 зарезервированных слов может быть больше.

                              - 98 -

                       У1.00031-01 35 01


  ------------------------------------------------------------------
 !                  ЛИСТ РЕГИСТРАЦИИ ИЗМЕНЕНИЙ                      !
 !------------------------------------------------------------------!
 !   ! НОМЕРА ЛИСТОВ (СТРАНИЦ) ! ВСЕГО   !        !ВХОДЯЩИЙ !    !  !
 !   !-------------------------! ЛИСТОВ  !   N    !N СОПРОВО!ПОДП!ДА!
 !   !ИЗМЕ !ЗАМЕ !НОВЫХ!АННУЛИ-!(СТРАНИЦ)!ДОКУМЕН-!ДИТЕЛЬНО-!    !ТА!
 !ИЗМ! НЕН ! НЕН !     !РОВАН- !В ДОКУМ. !  ТА.   !ГО ДОКУМ !    !  !
 !   ! НЫХ ! НЫХ !     ! НЫХ   !         !        ! И ДАТА  !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!
 !   !     !     !     !       !         !        !         !    !  !
 !---!-----!-----!-----!-------!---------!--------!---------!----!--!