Программирование на БК-0010-01/Глава 3: различия между версиями

Материал из Emuverse
(http://www.vak.ru/doku.php/proj/bk/bk3prog)
 
(Материал удален по требованию автора)
 
Строка 1: Строка 1:
{{ДИ}}
'''Материал удален по требованию автора.'''
{{TOCright}}
 
<pre>
   В данной  главе  приводится  описание языка программирования Бейсик
для БК-0010-01 (далее просто "Бейсик"). Авторы надеются, что эта глава
будет  полезна  прежде всего преподавателям и учащимся,  работающим на
КУВТах,  где одно руководство по  Бейсику  [1,2]  приходится  на  весь
дисплейный класс. Индивидуальным владельцам БК, имеющим эту литературу
в своем распоряжении, имеет смысл детально ознакомиться только с пунк-
тами 3.8,  3.9, которые рассказывают о приемах повышения эффективности
программирования на Бейсике и содержат различные примеры программ.
 
                          3.1. Алфавит языка
 
   Язык программирования Бейсик так же, как и любой естественный язык,
имеет свой алфавит. Алфавит языка Бейсик содержит следующие символы:
        1. Заглавные латинские буквы от А до Z.
        2. Арабские цифры от 0 до 9.
        3. Знаки, используемые в арифметических выражениях:
                *  - умножение;
                /  - деление;
                +  - сложение;
                -  - вычитание;
                ^  - возведение в степень ( например, 3^2=9 );
                \  - деление нацело ( например, 5\2=2 );
                (  - левая скобка;
                )  - правая скобка.
        4. Другие символы:
                &lt;  - меньше;
                &gt;  - больше;
                =  - равно;
                ;  - точка с запятой;
                !  - восклицательный знак;
                ?  - вопросительный знак;
                "  - кавычки;
                '  - апостроф;
                $  - "солнышко",   "клоп",   "жук"
                %  - процент;
                #  - номер  (  "решетка"  );
                @  - знак "относительно";
                &amp;  - амперсанд;
                   - пробел.
   Кроме вышеперечисленных символов, в текстовых константах могут
использоваться следующие символы:
        1. Строчные латинские буквы от a до z.
        2. Заглавные русские буквы от А до Я.
        3. Строчные русские буквы от а до я.
        4. Символы псевдографики (выводятся на экран при одновременном
нажатии клавиши "АР2" и соответствующих буквенных клавиш).
   Для отличия  от  буквы  "О"  цифра "0" ("ноль") при выводе на экран
перечеркивается наклонной чертой.
   Пробел, хотя и не имеет своего начертания, считается символом языка
Бейсик  и  используется  только  для  удобства чтения текста программы
человеком.
 
 
 
                    3.2. Программа на языке Бейсик
 
   Программа, написанная на языке Бейсик,  состоит из строк, каждая из
которых имеет свой номер.
   Приведем в качестве примера программу, состоящую из 3-х строк:
 
       1 CLS
        2 CIRCLE ( 120,120 ),30,1
        3 END
 
   Каждая строка представляет собой приказ для машины.  И  исполняются
эти приказы   машиной   (один   за   другим)   в  порядке  возрастания
соответствующих номеров строк.  Строки нумеруются  целыми  числами  из
интервала от 0 до 65535.
   Первое слово в строке  называется  оператором  и  указывает,  какое
действие  машина  должна  выполнить.  Оператор  CLS (строка 1) очищает
экран - стирает с  экрана  всю  информацию,  кроме  служебной  строки.
Оператор CIRCLE (строка 2) рисует окружность. Выражение (120,120),30,1
(после оператора CIRCLE) определяет координаты центра,  радиус и  цвет
окружности. Оператор END (строка 3) указывает на конец программы.
   Когда программа полностью набрана, ее можно запустить на выполнение
командой  RUN.  Ввод команды или строки программы всегда заканчивается
нажатием клавиши "ВК".  Команды набираются на  клавиатуре  без  номера
строки.   В  отличие  от  операторов  программы,  команды  исполняются
незамедлительно (сразу же после нажатия клавиши "ВК").
   Операторы и команды представляют собою либо целые английские слова,
либо их сокращения,  как,  например,  оператор  CLS  (Clear  Screen  -
очистить экран).
   Номера соседних строк не обязательно должны отличаться на  единицу.
Рекомендуется  нумеровать  строки  числами,  кратными  5  или 10.  Это
позволяет  при  необходимости  вставлять  в   промежутки   между   уже
имеющимися строками новые строки.
   Если необходимо удалить из программы какую-либо строку,  достаточно
набрать ее номер и нажать клавишу "ВК".
   Одна строка программы (логическая строка) может занимать  несколько
символьных строк экрана (физических строк) и состоять не более, чем из
255 символов.  Логическая строка принимается транслятором Бейсика  для
обработки  только  после  нажатия  клавиши  "ВК".  До  этого  ее можно
редактировать, используя клавиши управления курсором.
   Приняв строку,  транслятор  либо  сразу  выполняет  указанные в ней
действия (если нет номера строки), либо запоминает информацию строки в
ОЗУ (если есть номер строки).  Первый режим работы транслятора называ-
ется непосредственным, второй - косвенным (режим ввода программы).
 
                           3.3. Типы данных
 
   Для решения любой задачи требуются данные (числовые и другие),  над
которыми выполняются определенные действия для  получения  результата.
Классификация типов   данных,   с   которыми  может  работать  Бейсик,
приведена на рис.8.  По способу работы с ними  данные  разделяются  на
постоянные (константы) и переменные.
 
                          3.3.1. Константы
 
   Постоянные величины  принято называть константами.  Константы - это
такие данные,  значения которых в  программе  известны  заранее  и  на
протяжении  работы  всей  программы  не  меняются.  Например,  если  в
 
                          &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
                          &#9474;  данные   &#9474;
                          &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                          &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
                     &#9484;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;         &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9558;
                     &#9474; числовые &#9474;         &#9474; строковые &#9553;
                     &#9492;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;         &#9560;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9565;
                &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
         &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9558;    &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
         &#9474; целого типа &#9553;    &#9474; вещественного типа       &#9474;
         &#9560;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9565;    &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
                 &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9558;     &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9558;
                 &#9474; одинарной точности &#9553;     &#9474; двойной точности &#9553;
                 &#9560;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9565;     &#9560;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9552;&#9565;
 
             Рис.8. Классификация типов данных в Бейсике
 
программе есть число 47, то оно и будет числом 47 на протяжении работы
всей программы.
   Строковая константа может  быть  образована  из  последовательности
любых символов (букв,  цифр и других знаков). Такая последовательность
обычно заключается в кавычки для указания границ строковой  константы.
Ниже приводятся примеры строковых констант:
 
        "ПРИВЕТ"
        "ЭВМ БК-0010-01"
        "***ПРОГРАММА***"
 
  Числовая константа  целого  типа  - это целое число из интервала от
-32768 до 32767.
   Числовые константы  вещественного  типа - это действительные числа,
то есть числа,  которые могут  принимать  дробные  значения.  Во  всех
языках  программирования принято отделять дробную часть числа от целой
точкой (а не запятой,  как принято в  математике).  Дело  в  том,  что
родина  вычислительной  техники - США,  а там принято использовать при
записи чисел десятичную точку.  Числовые константы можно записывать  в
экспоненциальной форме (с указанием порядка числа).
   В Бейсике БК данные вещественного типа могут быть одинарной  (около
7  значащих  десятичных  цифр) или двойной точности (около 17 значащих
цифр). В таблице 2 приведены примеры записи числовых констант.
   Константы целого типа занимают меньше места в памяти, чем константы
вещественного типа.  Поэтому при  составлении  программ  к  константам
целого   типа  рекомендуется  приписывать  символ  "%",  к  константам
вещественого типа одинарной точности - символ "!".
   При этом машина будет отводить для каждой константы соответствующее
количество байт (см. таблицу 2).
 
 
                        Таблица 2. Примеры записи числовых констант
  &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
  &#9474; Числовая константа &#9474; Занимает памяти, &#9474; Примеры записи        &#9474;
  &#9474;                    &#9474; байт             &#9474; констант              &#9474;
  &#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
  &#9474;  Целая             &#9474;       2          &#9474;        47%            &#9474;
  &#9474;                    &#9474;                  &#9474;        -2%            &#9474;
  &#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
  &#9474;  Одинарной         &#9474;       4          &#9474;        47!            &#9474;
  &#9474;   точности         &#9474;                  &#9474; -123.4!  или -1.234Е2 &#9474;
  &#9474;                    &#9474;                  &#9474; 0.0013!  или  1.3Е-3  &#9474;
  &#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
  &#9474;  Двойной           &#9474;       8          &#9474;   47                  &#9474;
  &#9474;  точности          &#9474;                  &#9474; 0.0013   или  1.3D-3  &#9474;
  &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
 
   Числовую константу  целого  типа  можно  записывать  не  только   в
десятичной  системе  счисления,  но  и  в  двоичной,  восьмеричной или
шестнадцатеричной системе.  Для этого перед ней ставится  знак  "&amp;"  и
одна из следующих букв:
        В - для двоичных чисел (например: &amp;В100101011101),
        О - для восьмеричных чисел (например: &amp;О156743),
        Н - для шестнадцатеричных чисел (например: &amp;Н9А8В).
 
                          3.3.2. Переменные
 
   Переменными называются   данные,   которые  в  процессе  выполнения
программы могут принимать различные допустимые  значения.  Числовые  и
строковые  переменные могут быть простыми или индексированными.  Здесь
мы рассмотрим только простые типы переменных.
   Для обозначения  переменных  используются  имена  (идентификаторы).
Идентификатор переменной представляет собой последовательность из букв
и цифр, но начинается с буквы:
        Х%  - числовая переменная Х целого типа;
        А2! - числовая переменная А2 одинарной точности;
        Х3  - числовая переменная Х3 двойной точности;
        Н$  - строковая переменная Н.
   Переменные числовых типов (рис.8) занимают в ОЗУ столько же  места,
как  и  константы  (табл.2),  плюс еще место для имени переменной.  Из
соображений экономии  памяти  Бейсик  БК  использует только первые два
символа идентификатора,  поэтому "PRIWET" и  "PROBA"  будут  считаться
одинаковыми именами.
   Числовой переменной   любого   типа  могут  присваиваться  числовые
константы,  переменные и выражения с данными любого типа.  Но при этом
тип  результата  вычисления  выражения преобразуется в тип переменной.
Например,  если переменной целого типа Х%  присваивается  вещественное
число 23.16, то Х% будет иметь значение 23% (дробная часть числа будет
отброшена).
 
                           3.3.3. Выражения
 
   В Бейсике используются 2 типа выражений:
        - арифметические выражения;
        - строковые (символьные) выражения.
   Арифметическое выражение задает порядок  выполнения  арифметических
операций над числовыми данными и состоит из констант, имен переменных,
обозначений  математических   функций,   круглых   скобок   и   знаков
арифметических  операций.  В  частном  случае арифметическое выражение
может  состоять  только  из  одной   константы   (или   одного   имени
переменной). Ниже приведены примеры арифметических выражений:
 
        (47+Х)/Р
        Х!
        23.134
 
   Целым выражением   мы   будем  называть  арифметическое  выражение,
принимающее значение целого типа (из интервала от -32768 до 32767).
   Кроме известных   из  школьного  курса  арифметических  операций  в
Бейсике используются операция деления нацело (обозначается знаком "\")
и операция деления по модулю (обозначается "MOD"). Например, результат
5\2 равен 2 (целой части результата деления 5 на 2), а результат 5MOD2
равен 1 (остатку от деления 5 на 2).
   Строковое выражение задает последовательность  выполнения  действий
над строковыми  данными  и может состоять из строковых констант,  имен
строковых переменных и  строковых  (символьных)  функций,  соединенных
знаком   конкатенации   (объединения   строковых   данных).  Результат
строкового выражения - строковая константа.  Например:  "МА"+"ШИНА"  -
конкатенация двух   строковых   констант   (результат  конкатенации  -
строковая константа "МАШИНА").
 
                      3.4. Команды языка Бейсик
 
   Команды набираются  на  клавиатуре  без номера строки и исполняются
сразу же после нажатия клавиши "ВК".
 
                         3.4.1. Команда RUN
 
   Команда RUN производит запуск программы на  выполнение.  Если  есть
необходимость запуска программы с определенной строки,  то за командой
RUN указывается номер соответствующей строки. Например, RUN 150.
 
                         3.4.2. Команда CONT
 
   Выполнение программы останавливается,  если в программе встретились
операторы STOP или END, а также при нажатии клавиши "СТОП". По команде
CONT выполнение программы продолжится  с  того  места,  где  она  была
остановлена оператором STOP или нажатием клавиши "СТОП".
   Эта команда в  сочетании  с  оператором  STOP  используется  в  том
случае,  если  есть  необходимость  в определенном месте приостановить
выполнение  программы  (оператором  STOP),  вывести  на   экран   (или
изменить)  значения некоторых переменных и затем продолжить выполнение
прерванной программы со строки, следующей за оператором STOP.
 
                     3.4.3. Команды CSAVE, CLOAD
 
   Команда CSAVE записывает программу на Бейсике,  хранящуюся в памяти
компьютера,  на  магнитную  ленту.  После  команды  CSAVE  в  кавычках
указывается имя файла  (программы),  состоящее  не  более,  чем  из  6
символов. Например, команда CSAVE "МАКС" записывает на магнитныю ленту
файл под именем "МАКС". Этот файл можно считать ( загрузить ) в память
компьютера с магнитной ленты командой  CLOAD "МАКС".
 
                      3.4.4. Команды LIST и "."
 
   По команде LIST на экран выводится  текст  программы  (листинг).  В
таблице 3 приведены примеры использования команды LIST.
   Если количество строк выводимого текста больше 23,  то текст  будет
перемещаться  вверх  по  экрану,  пока  не  будут выведены все строки.
Остановить движение строк вверх по экрану можно одновременным нажатием
клавиш "СУ" и "Ю". Повторное нажатие возобновит перемещение строк.
   Для редактирования  строки  используется   команда   "."   (точка).
Например,  команда  .117  (за  точкой следует номер строки) выводит на
экран строку 117, которую можно изменить и ввести заново.
 
                        Таблица 3. Примеры использования команды LIST
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474; Формат команды  &#9474;         На экран выводится                       &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474; LIST            &#9474; весь текст программы                             &#9474;
&#9474; LIST -110       &#9474; часть текста программы - от начала до строки 110 &#9474;
&#9474; LIST 125-       &#9474; часть текста программы - от строки 125 до конца  &#9474;
&#9474; LIST 115-295    &#9474; часть текста программы - от строки 115 до строки &#9474;
&#9474;                 &#9474; 295                                              &#9474;
&#9474; LIST 195        &#9474; строка 195                                       &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
 
                        3.4.5. Команда DELETE
 
   Командой DELETE можно удалить из текста программы несколько  строк.
В таблице 4 приведены примеры использования команды DELETE.
 
                     Таблица 4. Примеры использования команды DELETE.
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474; Формат команды  &#9474;    Какие строки программы удаляются              &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474; DELETE          &#9474; все                                              &#9474;
&#9474; DELETE -55      &#9474; от начальной строки до строки 55 (включительно)  &#9474;
&#9474; DELETE 245-     &#9474; от строки 245 до конечной строки программы       &#9474;
&#9474; DELETE 135-145  &#9474; от строки 135 до строки 145                      &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
 
   Для удаления  из  памяти одной строки достаточно набрать ее номер и
нажать клавишу "ВК".
 
                          3.4.6. Команда NEW
 
   Командой  NEW  удаляется   из   памяти   вся   программа,   поэтому
пользоваться этой командой надо осторожно.
 
                         3.4.7. Команда RENUM
 
   Команда  RENUM  перенумеровывает  строки  (изменяет  номера  строк)
текста программы. Формат команды:
 
        RENUM L1,L2,S
 
где  L1 - номер первой строки перенумерованной части программы (после
          перенумерации),
     L2 - номер строки, с которой начинается перенумерация (до пере-
          нумерации),
     S  - шаг перенумерации, число из интервала от 0 до 65535.
   Например, команда  RENUM 10,3,5  перенумеровывает строки программы,
начиная  со  строки  3,  которой  присваивается  новый  номер  10,   а
последующие строки нумеруются с шагом 5 (то есть разность номеров двух
соседних строк будет равна 5).
 
                         3.4.8. Команда AUTO
 
   Команда AUTO  включает  режим  автонумерации  строк.   Этот   режим
избавляет   программиста   от   необходимасти  набирать  номера  строк
программы - процесс набора программы при этом ускоряется.
   В режиме  автонумерации  машина  печатает  на  экране  номер каждой
следующей строки.  Программисту остается набрать текст строки и нажать
клавишу  "ВК".  После  этого машина печатает на экране номер следующей
строки, полученный прибавлением шага автонумерации к номеру предыдущей
строки.
   Формат команды:
 
        AUTO L,S
 
где   L - номер строки, начиная с которого включится автонумерация,
      S - приращение номера строки (шаг автонумерации), число из
          интервала от 0 до 65535.
   Например, после  подачи  команды  AUTO 25,5   машина будет печатать
номера строк,  начиная с 25. Далее номера строк увеличиваются с шагом,
равным 5.
  Для выхода из режима автонумерации достаточно нажать клавишу "СТОП".
 
                   3.5. Операторы языка Бейсик
 
   Здесь приводятся лишь наиболее употребляемые операторы языка
Бейсик.
 
                3.5.1. Операторы, задающие цвет
 
                   3.5.1.1. Оператор COLOR
 
   БК может  выводить  изображение  на экран черно-белого или цветного
видеомонитора  (телевизора).  Далее  предполагается,  что  изображение
выводится на цветной экран.
   Символы, выводимые на экран,  могут быть красного, зеленого, синего
или  черного  цвета.  Под  черным  цветом  подразумевается цвет экрана
выключенного телевизора. Каждый цвет имеет свой номер:
        0 - цвет фона (прозрачный);
        1 - красный;
        2 - зеленый;
        3 - синий;
        4 - черный.
   Оператор COLOR устанавливает цвет экрана (фона) и цвет изображения:
 
        COLOR C,F
 
где     С - номер цвета символов, выводимых на экран,
        F - номер цвета экрана, на фоне которого будут   высвечиваться
            символы.
   Например, после выполнения оператора  COLOR 1,3    все выводимые на
экран символы  будут  красного  цвета  на синем фоне.  В данном случае
текущий цвет изображения - красный,  а текущий цвет  фона  (экрана)  -
синий.
   Оператор COLOR 0,1 включает  красный  цвет  фона  (цифра  1).  Цвет
символа  будет такой же,  как и цвет фона (цифра 0),  то есть красный.
Разумеется,  эти символы красного цвета на красном фоне будут невидимы
(прозрачного цвета).
   Номер 0 для фона означает черный цвет. Например, оператор COLOR 1,0
устанавливает исходный режим - красные буквы на черном фоне.
 
                        3.5.1.2. Оператор CLS
 
   Оператор CLS окрашивает весь экран в текущий цвет фона.
   Если текущий  цвет  фона  черный,  то  этот оператор просто очищает
экран ("окрашивает" в черный цвет).
 
                       3.5.2. Операторы графики
 
   Графические операторы позволяют изображать на экране точки,  линии,
окружности,   эллипсы,   дуги.   Изображения  всех  фигур  формируются
высвечиванием (или гашением) точек в определенных строках экрана.
   Местонахождение любой точки на экране определяется соответствующими
ей номером точечной позиции (координатой Х) и номером точечной  строки
(координатой Y), как показано на рис. 6.
 
                        3.5.2.1. Оператор PSET
 
   Чтобы окрасить  точку  на  экране в определенный цвет,  применяется
оператор
 
        PSET (X,Y),C
 
где  Х и Y - целые выражения, задающие координаты точки;
     С -  целое выражение,  задающее цвет точки и принимающее значение
          из интервала от 0 до 4.
   Пример:
 
        1 CLS
        2 PSET (120,120),0
        3 PSET (1,33),2
 
   Точка с  координатами (120,120) станет прозрачной (невидимой),  так
как примет цвет фона, а точка (1,33) будет зеленого цвета.
 
                        3.5.2.2. Оператор LINE
 
   Оператор
 
        LINE (X1,Y1)-(X2,Y2),C
 
рисует линию от точки с координатами (Х1,Y1) до точки  с  координатами
(X2,Y2).  Цвет  линии  определяется целым выражением С.  X1,Y1,X2,Y2 -
целые выражения. Пример:
 
        1 CLS
        2 LINE (10,15)-(210,223),3
 
   С помощью  оператора  LINE  можно  начертить и прямоугольник.  Если
стороны прямоугольника параллельны осям Х и Y, то его можно начертить,
зная  расположение  диагонали,  которое  можно задать оператором LINE.
Чтобы машина "знала",  что рисовать нужно прямоугольник,  а  не  линию
(диагональ), к  списку  аргументов  оператора LINE приписывается буква
"В".   Например,   оператор     LINE (12,15)-(143,147),3,B      чертит
прямоугольник,  стороны  которого параллельны осям Х и Y,  и диагональ
которого расположена между точками с координатами (12,15) и (143,147).
Стороны прямоугольника чертятся здесь синим цветом.
 
                       3.5.2.3. Оператор CIRCLE
 
   Оператор
 
        CIRCLE (X,Y),R,C
 
рисует окружность с центром в точке с координатами (Х,Y),  радиусом R.
Номер цвета окружности определяется целым выражением С.  Х,Y,R - целые
выражения. Пример:
 
        1 CLS
        2 CIRCLE (150,150),20,1
 
   Программа рисует  окружность  с  центром  в  точке  с  координатами
(150,150), радиус окружности - 20 точек, цвет - красный.
   Оператор
 
        CIRCLE (X,Y),R,C,F1,F2
 
рисует часть  окружности  (дугу).  Здесь  F1  и  F2  -  арифметические
выражения,   значения  которых  равны  углам,  определяющим  положения
соответственно начальной и конечной точек дуги. Отсчет углов ведется в
радианах (не в градусах !). Пример:
 
        1 CLS
        2 CIRCLE (X,Y),20,2,1.57,3.14
 
   С помощью оператора CIRCLE можно рисовать также эллипсы. Оператор
 
        CIRCLE (X,Y),R,C,,,S
 
рисует эллипс.  Отсутствие параметров F1 и F2 означает,  что  рисуется
целый  эллипс.  Арифметическое  выражение S,  называемое коэффициентом
сжатия, определяет отношение высоты эллипса к его ширине. Пример:
 
        1 CLS
        2 CIRCLE (100,100),20,1,,,0.4
 
   Если нужно  рисовать  часть  эллипса (дугу эллипса),  то необходимо
указать параметры F1 и F2, например:
 
        1 CLS
        2 CIRCLE (100,100),20,1,1.57,3.14,5
 
                       3.5.2.4. Оператор PAINT
 
   Любую замкнутую  фигуру  на  экране  можно закрасить в определенный
цвет оператором
 
        PAINT (X,Y),C1,C2
где (X,Y) - координаты любой точки внутри закрашиваемой области;
    С1    - номер цвета закрашивания;
    С2    - номер цвета границы закрашиваемой области (по умолчанию
            равен С1);   X,Y,С1,С2 - целые выражения.
 
                        3.5.2.5. Оператор DRAW
 
   Оператор DRAW позволяет изображать на экране рисунки,  составленные
из прямых линий.  Начиная от последней обработанной оператором графики
точки (высвеченной или погашенной),  с помощью  оператора  DRAW  можно
провести отрезок определенной длины в любом из восьми направлений.  От
конца этого отрезка можно провести другой отрезок и так далее.
   Команды оператора  DRAW  представлены на рисунке 9.  Каждой команде
соответствует луч, показывающий направление черчения от текущей точки.
Все углы между лучами равны 45 градусам.
 
                                  U
 
                              H   &#9474;   E
                                  &#9474;
                           L  &#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;  R
                                  &#9474;
                              G   &#9474;   F
 
                                  D
 
                    Рис.9. Команды оператора DRAW
 
   После оператора   DRAW  в  кавычках  указывается  список  команд  с
аргументами.  Например,  команда U5 рисует линию от текущей (последней
обработанной оператором  графики)  точки  вверх.  Цифра  5 - аргумент,
задающий длину линии.  Аргументом может быть целое число из  интервала
от 0 до 32767. Пример:
 
        215 CLS
        220 PSET (100,100),1
        225 DRAW "R20D20L20U20"
 
   На экране отображаются только те точки, координаты которых не
выходят за пределы экрана.
   Для черчения   с   указанием   координат  используется  команда  М.
Например, команда М100,120 чертит линию от текущей точки  до  точки  с
координатами (100,120).  Если в этой команде перед первым аргуметом (в
данном случае,  числом 100) поставить знак "+" или "-",  то координаты
будут подсчитываться относительно координат текущей точки.
   Имеются команды,  используемые непосредственно перед перечисленными
командами, изменяющие их действие:
    В - указывает, что команда должна передвигать текущую точку,
        но линия при этом чертиться не будет;
    N - указывает,что после выполнения команды восстанавливаются
        бывшие координаты текущей точки.
   Команда С с аргументом из интервала от 0 до  4  задает  новый  цвет
черчения.
   Использование команды Х поясним на примере:
        5 CLS
        10 K$="U5R5D5L5"
        15 PSET (104,123),1
        20 DRAW"D45R70XK$;"
 
В строке  20  после  оператора DRAW команда Х к списку команд "D45R70"
добавляет список команд, заданный в переменной К$ (в строке 10). После
имени переменной К$ обязательно ставится точка с запятой.
   Здесь приводится краткое описание оператора DRAW. Более подробное
описание приводится в [5].
   Еще один пример с оператором DRAW:
 
        5 CLS
        10 COLOR 1,3
        15 DRAW "BM70,80 R15 D25 L15 U25"
        20 DRAW "BM75,85 C2 R5 D15 L5 U15"
 
                  3.5.2.6. Относительность координат
 
   В операторах  PSET, LINE, CIRCLE, PAINT   отсчет координат точек мы
вели от точки с координатами (0,0) - от верхнего левого угла экрана.
   Однако в некоторых случаях координаты, указанные в этих операторах,
удобнее подсчитывать относительно  последней  обработанной  оператором
графики  точки  (текущей точки).  Для этого необходимо перед указанием
координат точки поставить символ "@". Пример:
 
        1 CLS
        2 PSET (100,100),1
        3 PSET @(2,2),1
 
   Программа рисует две точки: первую с координатами (100,100),
вторую с координатами (102,102).
 
                      3.5.3. Основные операторы
 
                        3.5.3.1. Оператор LET
 
   Оператор LET присваивает переменной,  записанной  слева  от  знака
равенства, значение выражения, указанного справа от знака равенства.
   Пример:
 
        1 LET X%=22
        2 LET K%=17+X%
        3 PRINT X%,K%
        4 END
 
   Переменная Х%  получает значение 22 (строка 1),  а переменная К%  -
значение  арифметического выражения 17+Х%  (строка 2).  Оператор PRINT
(строка 3) выводит значения переменных Х% и К% на экран.
   Слово  LET  в операторе присваивания писать необязательно.
   Рассмотрим другой пример с оператором присваивания (слова LET далее
писать не будем):
 
        1 CLS
        2 А$="МА"
        3 В$="ШИНА"
        4 С$=А$+В$
        5 PRINT C$
        6 END
 
   В строке  4  строковой  переменной   С$   присваивается   результат
конкатенации (объединения) значений двух строковых переменных А$ и В$:
"МАШИНА".
                        3.5.3.2. Оператор GOTO
 
   Оператор безусловного перехода GOTO передает  управление  строке  с
указанным номером:
                    GOTO L
 
где  L - номер строки программы (число из интервала от 0 до 65535).
   Например, после  выполнения оператора GOTO 185 программа продолжает
работу со строки 185 (управление передается на строку с номером 185).
   Пример:
                    1 ВЕЕР
                    2 GOTO 1
 
   В строке 1 стоит оператор ВЕЕР,  дающий  короткий  звуковой  сигнал
("бип").  Кстати,  такой  же  сигнал  издает  машина  при  нажатии  на
определенные клавиши.  Эта  программа  будет  воспроизводить  звуковой
сигнал "бип" до тех пор, пока не будет нажата клавиша "СТОП".
 
                       3.5.3.3. Оператор PRINT
 
   Оператор PRINT  предназначен  для  вывода  на  дисплей   сообщений,
значений переменных и выражений. Вместо "PRINT" разрешается записывать
"?", что короче и удобнее.
   За словом "PRINT" (или "?") обычно следует список выражений (любого
типа), значения которых выводятся на экран. Для разделения выражений в
списке используются запятая или точка с запятой.
   Значения двух  числовых  выражений,  разделенных  точкой с запятой,
выводятся на экран через пробелы, причем один пробел ставится слева от
выводимого значения, а другой справа:
 
        10 X%=5
        20 PRINT X%;2/X%
 
   Значения двух строковых выражений,  разделенных точкой  с  запятой,
выводятся одно за другим (без пробела):
 
        10 А$="МА"
        20 В$="ШИНА"
        30 PRINT A$;B$
 
   Если два выражения в списке разделены запятой, то их значения будут
выводиться на экран зонами,  то есть для вывода каждого значения будет
отведено  16  символьных  позиций  экрана.  Если  значение  выражения,
выводимое на экран,  не помещается в одной зоне,  то берется следующая
зона:
        10 X%=12
        20 PRINT X%,2^X%
 
   Список выражений  после оператора PRINT может заканчиватся точкой с
запятой или запятой - тогда следующий оператор  PRINT  будет  выводить
данные в той же строке экрана, иначе данные будут выводиться от начала
следующей символьной строки:
 
        10 ? "*******";
        20 ? " BASIC ";
        30 ? "*******"
 
   Список оператора PRINT может быть пустым -  в  этом  случае  машина
печатает пустую строку:
 
        10 ? "ЭВМ"
        20 ?
        30 ? "БК-0010-01"
 
   Есть две функции оператора PRINT,  позволяющие  выводить информацию
в определенном месте экрана:
 
        10 CLS
        20 ? AT(3,17)"МИР"
 
   В данном случае функция АТ оператора  PRINT  указывает,  что  слово
"МИР"  выводится  на  экран  начиная  с  3-ей позиции 17-ой символьной
строки.
   Следующая функция  оператора  PRINT  TAB(X)  выводит  информацию на
экран начиная с позиции, равной значению выражения Х:
 
        10 CLS
        20 ? ТАВ(7)"ТАБУЛЯЦИЯ"
 
  Слово "ТАБУЛЯЦИЯ"  выводится  на экран,  начиная с 7-ой позиции той
строки, где находился курсор.
   Аргументами функции  АТ и ТАВ могут быть выражения со значениями от
0 до 255.
   Напомним, что символьные позиции экрана нумеруются от 0 до 31 слева
направо,  а символьные строки - от 0 до 23 сверху вниз.  Если значение
номера  позиции больше 31,  тогда номер позиции будет равен остатку от
деления первоначального значения на 32,  то есть  ТАВ(3)  совпадает  с
ТАВ(35),  ТАВ(67) и так далее.  Так же АТ(3,22) совпадает с АТ(35,22),
АТ(67,22) и так далее.  Аналогичные действия происходят и со  строками
(для функции АТ) - например, АТ(17,3) совпадает с АТ(17,27), АТ(17,51)
и так далее.
 
                       3.5.3.4. Оператор INPUT
 
   Для начала рассмотрим пример:
 
        1 А=126
        2 В=145
        3 ?"ПРОИЗВЕДЕНИЕ ЧИСЕЛ РАВНО:";А*В
 
   Программа печатает результат произведения двух чисел(126 и 145). Но
программу можно переписать таким образом, что после ее запуска пользо-
ватель сам сможет выбрать произвольные значения для переменных А и В:
 
        1 INPUT"ВВЕДИТЕ ДВА ЧИСЛА";А,В
        2 ?"ПРОИЗВЕДЕНИЕ ЧИСЕЛ РАВНО:";А*В
   После запуска этой программы на экране появится надпись:
        ВВЕДИТЕ ДВА ЧИСЛА?
 
   В ответ  на  это  приглашение  пользователь  набирает на клавиатуре
числовое значение для переменной А,  а затем через запятую -  числовое
значение для переменной В.  После этого пользователю достаточно нажать
клавишу "ВК",  и программа продолжит свою работу со строки,  следующей
за строкой с оператором INPUT.
   В данном случае выражение "ВВЕДИТЕ ДВА ЧИСЛА"  является  подсказкой
пользователю.   Подсказка   в  операторе  INPUT  может  отсутствовать.
Например,  при выполнении оператора INPUT P$,H%,E%  машина в  качестве
приглашения вводить значения (для переменных Р$,Н%,Е%) печатает только
знак вопроса "?".  Если при вводе значений клавиша "ВК" нажата  раньше
конца  списка  переменных,  то на экране печатаются два вопросительных
знака "??",  указывающие пользователю на  то,  что  ввод  значений  не
закончен.
   За оператором INPUT может стоять  список  имен  переменных  разного
типа. Строковые  константы  (для  строковых переменных) можно набирать
без кавычек, если константы не содержат запятых.
   Еще один пример с оператором INPUT:
 
        10 INPUT "ВВЕДИТЕ ПУТЬ И СКОРОСТЬ";S,V
        20 ? "ВРЕМЯ В ПУТИ = ";S/V
 
                    3.5.3.5. Операторы FOR и NEXT
 
   Рассмотрим конкретный пример:
 
        1 CLS
        2 FOR X%=1% TO 30% STEP 2%
        3 ? AT(X%,1%);"*"
        4 ? AT(X%,20%);"*"
        5 NEXT X%
 
   Строки 2,3,4,5 составляют цикл. После запуска программа выполняется
следующим  образом.  Параметру  цикла  (переменной  Х%)  присваивается
значение 1 (аргумент,  стоящий после знака "="), затем выполняются все
операторы, заключенные  между  операторами  FOR  и  NEXT),  после чего
значение параметра Х% увеличивается на шаг цикла - на число 2, стоящее
после служебного слова STEP). Если полученное значение параметра цикла
Х%  больше 30 (значения,  стоящего после  слова  ТО),  то  выполняются
операторы,  следующие  за  оператором  NEXT.  Иначе  выполнение  цикла
повторяется со строки с оператором FOR.
   В общем  случае  вместо  чисел  1,30,2  (см.  строку  2) в качестве
аргументов цикла  могут  использоваться  арифметические  выражения,  а
вместо переменной Х% - любая другая числовая переменная.
   Результаты выполнения нижеследующей и предыдущей программ одинако-
вы:
        1 CLS
        2 FOR X%=30% TO 1% STEP -2%
        3 ? AT(X%,1%);"*"
        4 ? AT(X%,20%);"*"
        5 NEXT X%
 
   В данном примере шаг цикла равен -2.  Если же шаг равен 1,  то  его
можно не указывать. Например:
 
 
        10 CLS
        20 FOR K%=0% TO 100%
        30 LINE (K%,100%-K%)-(100%-K%,K%),1,B
        40 NEXT K%
 
   Возможен досрочный выход из цикла при помощи оператора GOTO,  минуя
оператор NEXT. Вход в цикл, минуя оператор FOR, приводит к ошибке 1.
   Циклы могут  быть  вложены  друг  в  друга.  Ниже  приведен  пример
программы,  где  один  цикл  (строки  25-55)  вложен  в другой (строки
15-60):
        10 CLS
        15 FOR C=1 TO 3                  'НАЧАЛО ВНЕШНЕГО ЦИКЛА
        20    ? CHR$(157);CHR$(157);
        25    FOR R=0 TO 100 STEP 5         'НАЧАЛО ВЛОЖЕННОГО ЦИКЛА
        30       CIRCLE (128,120),R,C
        35       CIRCLE (64,60),R,C
        40       CIRCLE (196,60),R,C
        45       CIRCLE (64,180),R,C
        50       CIRCLE (196,180),R,C
        55    NEXT R                        'КОНЕЦ ВЛОЖЕННОГО ЦИКЛА
        60 NEXT C                        'КОНЕЦ ВНЕШНЕГО ЦИКЛА
        65 END
 
   Рекомендуется для удобства чтения программы  выделять  входящие  в
циклы операторы отступами, но на Бейсике-БК такой текст программы все
равно подровняется к левому  краю.  Однако,  если  Вы  при  написании
программы на бумаге будете делать  эти  отступы,  Ваша  программа  не
только  будет  выглядеть  более  культурно,  но  такой  стиль  работы
убережет Вас от возможных ошибок. Например, труднее будет  перепутать
строки 55 и 60 (тогда произойдет ошибка, так как все внутренние циклы
должны полностью находиться внутри внешних циклов).
 
                        3.5.3.6. Оператор REM
 
   Оператор REM  применяется  для  включения  в  текст программы строк
комментариев,  облегчающих  понимание  текста  программы  при  чтении.
Строка  с  оператором REM не выполняется и на работу всей программы не
влияет:
        1 REM КОРОТКИЙ СВИСТОК
        2 FOR I%=1 TO 25
        3 BEEP
        4 NEXT I%
 
   Пояснения также  можно  разместить  в  любой   строке,   за   любым
оператором  (кроме  оператора  DATA),  отделяя пояснительную запись от
оператора апострофом (см. предыдущий пример).
 
                3.5.3.7. Операторы DATA, READ, RESTORE
 
   После оператора DATA перечисляется список  данных  -  числовых  или
строковых констант.  Строковые  константы  в  кавычках или без кавычек
(если не содержат запятых):
 
        10 DATA 48,16
        20 READ X%,A%,B%
        30 READ E$,K$,P%
        40 DATA 17,ПРИВЕТ,ЭВМ,23
        50 RESTORE 40
        60 READ H%,T$
 
   В строках  10  и  40  перечислены  данные  -  числовые  и строковые
константы,  значения которых присваиваются  переменным,  перечисленным
после операторов READ в строках 20,30 и 60.
   Рассмотрим правила,  по которым  происходит  присваивание  значений
констант  переменным.  Представим,  что есть указатель,  который после
запуска программы указывает на первую константу после оператора DATA с
наименьшим  номером  строки.  В  нашем  примере  - это оператор DATA в
строке 10.  Значит, после запуска данной программы указатель указывает
на  число  48.  Каждой  переменной,  указанной  после  оператора READ,
присваивается значение константы, на которую в данный момент указывает
указатель.  В строке 20 переменной Х% присваивается значение 48. Затем
указатель смещается на число 16,  которое будет  присвоено  переменной
А%.  Затем  указатель  указывает  на  число 17 (после оператора DATA в
строке 40),  и переменной В%  будет присвоено значение  17.  Таким  же
образом переменной Е$ будет присвоено слово "ПРИВЕТ",  переменной К$ -
слово "ЭВМ", а переменной Р% число 23.
   Данные, перечисленные    после   операторов   DATA   можно   читать
(присваивать переменным)  повторно.  Для  этого  применяется  оператор
RESTORE.  В нашем примере строка 50 RESTORE 40 возвращает указатель на
строку 40,  то есть указатель будет указывать на число 17.  Поэтому  в
строке 60 переменной Н%  будет присвоено значение 17 (которое в строке
20 уже присваивалось переменной В%).
   Переменные после   выполнения   программы   будут  иметь  следующие
значения:
        Х%=48%
        А%=16%
        В%=17%
        Е$="ПРИВЕТ"
        К$="ЭВМ"
        Р%=23%
        Н%=17%
        Т$="ПРИВЕТ"
 
                        3.5.3.8. Оператор DIM
 
   В некоторых программах приходится  работать  с  группой  (массивом)
чисел.   Но   для   того,  чтобы  работать  с  массивом  чисел,  нужно
зарезервировать (оставить) место в памяти машины для  размещения  этих
чисел. В таких случаях применяется оператор DIM:
 
        10 DIM A%(15)
        20 FOR K%=0 TO 15
        30 INPUT "ВВЕДИТЕ ЧИСЛО";A%(K%)
        40 NEXT K%
 
   В строке 10 резервируется место в памяти для массива целых чисел  с
именем  А%  (знак  "%"  указывает  на то,  что числа в массиве целые).
Каждый элемент (число) массива имеет свой номер (индекс).  В операторе
DIM  после  имени  массива  в  скобках записывается максимальный номер
элемента  массива.  Если  учесть,  что  нумерация  элементов   массива
начинается  с  0,  то в нашем примере резервируется место в памяти для
16-ти целых чисел.
   Значение каждого элемента массива - переменная величина.  Например,
А%(3) - это переменная,  значение которой равно  значению  элемента  с
номером   3  массива  А%.  Такие  переменные  с  номерами  (индексами)
называются  индексированными  (в  отличие  от   простых   переменных).
Значения   числовых   индексированных   переменных   сразу   же  после
резервирования памяти оператором DIM равны 0.
   В строках 20,30 и 40 происходит заполнение массива числами.
   Рассмотренный выше массив - одномерный.
   В Бейсике используются также и двумерные массивы,  элементы которых
имеют по два индекса.  Индексы двумерного массива также записываются в
скобках  и  разделяются запятой.  Двумерный массив можно представить в
виде таблицы,  где номер строки  задается  первым  индексом,  а  номер
столбца - вторым, при этом считается, что элементы массива расположены
на пересечении строк и столбцов. Пример:
 
        10 DIM B%(3,2)
        20 DATA 23,45,51,27,53,17,48,56,89,42,17,188
        30 FOR Y%=0 TO 3 ' ЦИКЛ ПО НОМЕРУ СТРОКИ
        40   FOR X%=0 TO 2 ' ЦИКЛ ПО НОМЕРУ СТОЛБЦА
        50     READ B%(Y%,X%)
        60   NEXT X%
        70 NEXT Y%
        80 END
 
   В данном  примере  описывается  и  заполняется значениями двумерный
массив В%, который можно представить в виде таблицы:
              &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
              &#9474; В%(0,0)=23 &#9474; В%(0,1)=45 &#9474; В%(0,2)=51  &#9474;
              &#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
              &#9474; В%(1,0)=27 &#9474; В%(1,1)=53 &#9474; В%(1,2)=17  &#9474;
              &#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
              &#9474; В%(2,0)=48 &#9474; В%(2,1)=56 &#9474; В%(2,2)=89  &#9474;
             &#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
              &#9474; В%(3,0)=42 &#9474; В%(3,1)=17 &#9474; В%(3,2)=188 &#9474;
              &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
   В качестве  индекса   допускается   использование   арифметического
выражения, принимающего значение от 0 до 255.
   Оператор DIM  может  резервировать  место  в  памяти  также  и  для
строковых массивов,  элементами которых являются строковые переменные,
но работает Бейсик со строковыми массивами очень медленно.
 
                         3.5.3.9. Оператор IF
 
   До изучения этого оператора полезно запомнить перевод с английского
следующих слов:
                        IF - если
                        THEN - то, тогда
                        ELSE - иначе
                        AND - и
                        OR - или
 
   Почти в любой программе есть такие места,  где необходимо проверить
выполнение какого-либо  условия (истинность какого-либо высказывания).
Такие действия задаются условным оператором следующего формата:
 
        IF B THEN O1 ELSE O2
 
где   В       - условие;
      О1 и О2 - операторы.
   Если условие  В  выполняется  (если  высказывание  В  истинно),  то
выполняется оператор О1, иначе выполняется оператор О2.
   Для записи условий используются операции  отношения,  записываемые,
почти как в математике:  "&gt;" - больше, "&lt;" - меньше, "=" - равно, "&lt;&gt;"
- не равно, "&gt;=" - больше или равно, "&lt;=" - меньше или равно.
   В качестве оператора О1 или О2 может быть любой оператор  Бейсика.
Если в качестве оператора используется оператор GOTO, то слово "GOTO"
можно пропускать - например, вместо THEN GOTO 15 можно писать THEN 15.
   Условный оператор может иметь и короткий формат:
 
        IF B THEN O1
 
   Пример:
 
        10 ? "ВВЕДИТЕ ДВА ПОЛОЖИТЕЛЬНЫХ ЧИСЛА"
        20 INPUT "ПЕРВОЕ ЧИСЛО";A
        30 IF A&lt;0 THEN 20            ' КОНТРОЛЬ ПРАВИЛЬНОСТИ ВВОДА
        40 INPUT "ВТОРОЕ ЧИСЛО";B
        50 IF B&lt;0 THEN 40            ' КОНТРОЛЬ ПРАВИЛЬНОСТИ ВВОДА
        60 IF A&gt;B THEN M=A ELSE M=B
        70 ? "НАИБОЛЬШЕЕ ИЗ ДВУХ ЧИСЕЛ РАВНО";М
 
   В этом примере оператор IF применяется 3 раза.  В строке  30,  если
высказывание  А&lt;0 истинно,  управление передается на строку 20,  иначе
(если высказывание А&lt;0 ложно) программа выполняется дальше (со  строки
40).  Строка 50 выполняется аналогично. В строке 60, если высказывание
А&gt;В истинно, переменной М присваивается значение переменной А, иначе -
значение переменной В.
   Если нужно проверить истинность сразу нескольких  высказываний,  то
на  помощь  приходят так называемые логические операции.  Приведем два
типа логических операций, применяемых в Бейсике - OR и AND.
   Представим, что  есть два высказывания В1 и В2,  тогда выражение В1
OR В2 рассматривается как одно  высказывание,  которое  истинно,  если
хотя бы одно из этих высказываний (В1 или В2) истинно. Высказывание В1
AND В2 истинно, если истинны одновременно оба высказывания (В1 и В2).
   Пример:
 
        10 INPUT "ВВЕДИТЕ 3 РАЗНЫХ ЧИСЛА";A,B,C
        20 IF A&gt;B AND A&gt;C THEN M=A ELSE IF B&gt;A AND B&gt;C THEN M=B
        ELSE M=C
        30 ? "НАИБОЛЬШЕЕ ИЗ 3-х ЧИСЕЛ РАВНО";M
        40 END
 
                  3.5.3.10. Операторы GOSUB и RETURN
 
   Если в  нескольких местах программы необходимо проделаать одну и ту
же последовательность операторов,  то эту  последовательность  выгодно
оформить   в   виде  подпрограммы,  к  которой  управление  передается
оператором GOSUB.  Возврщение из  подпрограммы  в  основную  программу
производится  оператором  RETURN,  который  возвращает  управление  из
подпрограммы на строку, следующую за строкой с оператором GOSUB.
   Пример:
 
        1  CLS
        2  INPUT X%,Y%
        3  GOSUB 9
        4  INPUT X%,Y%
        5  GOSUB 9
        6  END
        9  FOR I%=10 TO 20 STEP 2
        10   CIRCLE ( X%,Y% ),I%,3
        11 NEXT I%
        12 RETURN
 
   В строке 3 оператором GOSUB 9 управление  передается  на  строку  9
(подпрограмме,  состоящей  из строк 9,10,11,12).  В строке 12 оператор
RETURN производит возврат из подпрограммы (на строку 4).  В  строке  5
происходит  повторное  обращение  к  той  же подпрограмме.  Возврат из
подпрограммы произойдет на строку 6.
 
                        3.5.3.11. Оператор ON
 
   Формат оператора:
                        ON B GOTO C
где
В - целое выражение, принимающее значение из интервала от 0 до 32767;
С - список номеров существующих строк, разделенных запятыми.
   Оператор ON вычисляет значение выражения В и передает управление на
строку,  порядковый номер которой в списке равен вычисленному значению
выражения   В.  Например,  если  значение  выражения  В  равно  1,  то
управление будет передано на строку,  номер которой в списке  С  стоит
первым. Пример:
 
        10 CLS
        20 ? "ВВЕДИТЕ ЧИСЛО:"
        30 ? "1-ПРЯМОУГОЛЬНИК"
        40 ? "2-ОКРУЖНОСТЬ"
        50 INPUT X%
        55 IF X%&lt;&gt;1 AND X%&lt;&gt;2 THEN 50
        60 ON X% GOTO 80,100
        80 LINE (100,100)-@(10,10),1,B
        90 END
        100 CIRCLE (170,170),20,1
        110 END
 
   В строке  60 управление будет передано на строку 80 (если Х%=1) или
на строку 100 (если Х%=2).
   В операторе  ON вместо служебного слова GOTO возможно использование
слова GOSUB:
 
        10 CLS
        20 ? "ВВЕДИТЕ ЧИСЛО:"
        30 ? "1-ПРЯМОУГОЛЬНИК"
        40 ? "2-ОКРУЖНОСТЬ"
        50 INPUT X%
        55 IF X%&lt;&gt;1 AND X%&lt;&gt;2 THEN 50
        60 ON X% GOSUB 80,100
        70 END
        80 LINE ( 100,100)-@(10,10),1,B
        90 RETURN
        100 CIRCLE ( 170,170 ),20,1
        110 RETURN
 
                        3.5.3.12. Оператор KEY
 
   Сразу же  после  включения компьютера в служебной строке появляется
надпись из 10 символов: "CAGLRCCC.R". Каждый из этих символов - первый
символ оператора  (или  команды),  для  набора  которого на клавиатуре
достаточно одновременно  нажать  клавишу   "АР2"   и   соответствующую
цифровую   клавишу.   В   таблице   5   указаны   цифровые  клавиши  и
соответствующие им операторы и команды.  Выражения  "&lt;СБР&gt;"  и  "&lt;ВК&gt;"
означают  соответственно  очистку  экрана  и  действия  компьютера при
нажатии клавиши "ВК".
 
     Таблица 5. Применение цифровых клавиш в качестве функциональных
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474; Цифровая клавиша &#9474; Оператор (или команда) и действия компьютера   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;    1             &#9474;            COLOR                               &#9474;
&#9474;    2             &#9474;            AUTO                                &#9474;
&#9474;    3             &#9474;            GOTO                                &#9474;
&#9474;    4             &#9474;            LIST                                &#9474;
&#9474;    5             &#9474;            RUN &lt;BK&gt;                            &#9474;
&#9474;    6             &#9474;            COLOR 1,0 &lt;BK&gt;                      &#9474;
&#9474;    7             &#9474;            CLOAD"                              &#9474;
&#9474;    8             &#9474;            CONT &lt;BK&gt;                           &#9474;
&#9474;    9             &#9474;            . &lt;BK&gt;                              &#9474;
&#9474;    0             &#9474;            &lt;СБР&gt; RUN &lt;BK&gt;                      &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
 
   Например, вместо того,  чтобы набрать  оператор  COLOR  по  буквам,
достаточно  одновременно  нажать  клавиши  "АР2" и "1".  Одновременное
нажатие клавиш "АР2" и "0" производит сброс (очистку) экрана и  запуск
программы.
   Текст, выводимый  на  экран  при  одновременном  нажатии   цифровой
клавиши  и  клавиши  "АР2",  можно  изменить  оператором  KEY:
 
        KEY K,O$
 
где К - целое выражение, задающее цифровую клавишу (число из интервала
        от 1 до 10); при этом число 10 соответствует клавише "0";
    О$ - строковое выражение, определяющее выводимый на экран текст.
   Цифровая клавиша при  нажатой  клавише  "АР2"  рассматривается  как
программируемый ключ с соответствующим номером.
   Оператор использует только первые 16 символов строкового  выражения
О$. Например, после выполнения оператора KEY 1,"PRINT" клавише 1 будет
соответствовать слово "PRINT".
   Возможность вывода  на  экран целого слова (оператора,  команды или
другого  строкового  выражения)  одновременным  нажатием  2-х   клавиш
облегчает  работу  на  компьютере - особенно,  при составлении длинных
программ.
 
                            3.6. Функции
 
                       3.6.1. Числовые функции
 
   Большинство стандартных числовых функций применяется для вычисления
элементарных математических функций. Имя функции, как правило, состоит
из 3-х букв. Например, SIN(X) вычисляет синус угла Х.
   В таблице 6 приведены стандартные числовые функции (далее функции).
Аргумент  каждой  функции  задается  арифметическим  выражением  Х   в
скобках.  Функция EXP(X) вычисляет значение е=2.718282,  возведенное в
степень Х.  Аргумент Х задается арифметическим выражением, принимающим
значения из интервала от -88.4999999999999992 до 88.029685974121092.
   Функцию LOG можно использовать для  вычисления  логарифма  с  любым
основанием.  Например,  десятичный  логарифм  числа  Х равен отношению
LOG(X)/LOG(10) .
   Функции FIX(X)  и  INT(X)  вычисляют  целую  часть от числа X путем
отбрасывания дробной части (а не округления до ближайшего).
   При  одинаковых  положительных  значениях   аргумента   результаты
функций  FIX  и  INT  равны. Различия  между  двумя  этими  функциями
проявляются  при  отрицательных  результатах  -  функция  INT  всегда
округляет результат в меньшую сторону. Проверьте это сами на примере:
 
        10 ? INT(8.2);FIX(8.2)
        20 ? INT(-8.2);FIX(-8.2)
 
   Аргументом функции  FRE  может  быть  символьное или арифметическое
выражение. Если аргумент функции числовой, то ее результат - свободный
объем памяти (в байтах) для программы пользователя,  а иначе результат
функции  -  свободный  объем   памяти,   отведенной   под   символьные
переменные. Результат функции не зависит от значения аргумента:
 
        10 ? FRE("A")
        20 ? FRE(2)
 
   Здесь же  рассмотрим  числовую  функцию  POINT.  Результат  функции
POINT(X,Y)  равен номеру цвета точки с координатами Х,Y.  X,Y  - целые
выражения:
 
        10 CLS
        20 PSET (15,15),2
        30 PSET (120,120),POINT(15,15)
 
   Точка с  координатами  (120,120)  закрашивается в такой же цвет,  в
какой закрашена точка с координатами (15,15).
   Если координаты  точки выходят за пределы экрана,  то функция POINT
выдает значение, равное -1.
   С помощью   функции   POINT   можно  определить,  вычерчивалось  ли
что-нибудь в указанном месте экрана.
   Приведем пример программы, рисующей графики функций SIN и COS:
 
        5  REM графики функций синус и косинус
        10 LINE (0,100)-(200,100),1
        20 LINE (0,50)-(0,150),1
        30 FOR X%=0 TO 200
        40   Y1%=30*SIN(X%/10)+100
        50   Y2%=30*COS(X%/10)+100
        60   PSET (X%,Y1%),2
        70   PSET (X%,Y2%),3
        80 NEXT X%
                                        Таблица 6. Числовые функции
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  Обозначение  &#9474;  Результат функции             &#9474;   Примечание      &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;    SQR(X)     &#9474;  квадратный корень от Х        &#9474; Х&gt;=0              &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;    SIN(X)     &#9474;  синус Х                       &#9474;Значение Х задается&#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;в радианах         &#9474;
&#9474;    COS(X)     &#9474;  косинус Х                     &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;                   &#9474;
&#9474;    TAN(X)     &#9474;  тангенс Х                     &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;    ATN(X)     &#9474;  арктангенс Х                  &#9474; Результат функции &#9474;
&#9474;               &#9474;                                &#9474; в радианах        &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;    EXP(X)     &#9474;  число е в степени Х           &#9474; е=2,718282.       &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;    LOG(X)     &#9474; логарифм по основанию, равному &#9474; Х&gt;0               &#9474;
&#9474;               &#9474; числу е(натуральный логарифм). &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;    ABS(X)     &#9474;  абсолютное значение           &#9474;                   &#9474;
&#9474;               &#9474;  ( модуль ) Х                  &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;                   &#9474;
&#9474;    FIX(X)     &#9474;  целая часть Х                 &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;                   &#9474;
&#9474;    INT(X)     &#9474;   математически целая часть Х  &#9474;                   &#9474;
&#9474;               &#9474;  ( ближайшее целое число,      &#9474;                   &#9474;
&#9474;               &#9474;   меньшее или равное Х).       &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;                   &#9474;
&#9474;    SGN(X)     &#9474;  -1, если Х&lt;0;                 &#9474;                   &#9474;
&#9474;               &#9474;   0, если Х=0;                 &#9474;                   &#9474;
&#9474;               &#9474;   1, если Х&gt;0.                 &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;                   &#9474;
&#9474;    RND(X)     &#9474;  случайное число из интервала  &#9474;                   &#9474;
&#9474;               &#9474;  от 0 до 1                     &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;                   &#9474;
&#9474;    FRE(0)     &#9474;  объем свободной памяти        &#9474;                   &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;                   &#9474;
&#9474;    FRE("")    &#9474;  объем свободной памяти для    &#9474;                   &#9474;
&#9474;               &#9474;  строковых переменных          &#9474;                   &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
 
                       3.6.2. Строковые функции
 
   Строковые (символьные)  функции  служат  для  выполнения  различных
операций над строковыми переменными и константами.  Если имя строковой
функции   оканчивается   знаком  "$",  то  ее  результат  -  строковая
константа, а иначе - целое число.
   Каждый символ  имеет  свой  код  -  число из интервала от 0 до 255.
Например,  код латинской буквы "А" равен 65. Коды символов приведены в
Приложении 1.
                  3.6.2.1. Функции BIN$, OCT$, HEX$
 
   Аргумент каждой из этих трех функций - целое выражение. Результат -
строковая   константа,   изображающая   представление   аргумента    в
соответствующей системе счисления:
        10 INPUT "ВВЕДИТЕ ЦЕЛОЕ ЧИСЛО ";X%
        20 ? BIN$(X%);"  -ДВОИЧНОЕ ПРЕДСТАВЛЕНИЕ"
        30 ? OCT$(X%);"  -ВОСЬМЕРИЧНОЕ ПРЕДСТАВЛЕНИЕ"
        40 ? HEX$(X%);"  -ШЕСТНАДЦАТЕРИЧНОЕ ПРЕДСТАВЛЕНИЕ"
        50 END
 
                     3.6.2.2. Функции CHR$ и ASC
 
   Аргументом функции   CHR$  является  целое  выражение,  принимающее
значение из интервала от 0 до 255.  Результат функции  -  символ,  код
которого  равен  аргументу  функции.  Если  значение аргумента (целого
выражения) выходит за пределы интервала  от  0  до  255,  то  выдается
сообщение об ошибке 5. Пример:
 
          10 INPUT "ВВЕДИТЕ КОД СИМВОЛА";K%
          20 IF K%&gt;255 OR K%&lt;=0 THEN 10
          30 ? CHR$(K%)
          40 GOTO 10
 
   Программа печатает символ, код которого вводится в строке 10.
   Используя функцию  CHR$  можно  включать  (выключать)  определенные
режимы работы компьютера:
 
          10 ? CHR$(&amp;O237)
          20 ? "ПЕЧАТЬ С ПОДЧЕРКИВАНИЕМ"
          30 ? CHR$(&amp;O237)
          40 ? "ПЕЧАТЬ БЕЗ ПОДЧЕРКИВАНИЯ"
 
   Режим включения подчеркивания символов имеет свой восьмеричный код,
равный  237.  Оператором  PRINT  CHR$(&amp;O237)  производится   включение
(строка 10) и выключение (строка 30) режима подчеркивания символов.
   Функция ASC  является  обратной  по  отношению  к   функции   CHR$.
Аргументом  функции  ASC  является  строковое  выражение.    Результат
функции - код первого символа аргумента:
 
        10 INPUT "ВВЕДИТЕ СИМВОЛ";K$
        20 ? ASC(K$)
        30 GOTO 10
 
   Программа выводит на экран код символа  К$,  введенного  оператором
INPUT в строке 10.
   Если аргумент - пустая  строка,  то  при  вызове  функции  выдается
сообщение об ошибке 5.
 
                         3.6.2.3. Функция LEN
 
   Аргументом функции  LEN  является  символьное выражение.  Результат
функции - длина символьного выражения (количество символов в нем):
 
        10 INPUT "ВВЕДИТЕ СЛОВО";A$
        20 ? "ВЫ ВВЕЛИ СЛОВО ДЛИНОЙ";LEN(A$);"СИМВОЛОВ"
 
                       3.6.2.4. Функция STRING$
 
  Результатом этой  функции  является  строка,  содержащая одинаковые
символы:
        10 ? STRING$(17,"+")
 
   Эта программа печатает знак "+" 17 раз. В общем случае вместо числа
17 может стоять целое выражение,  принимающее значение от 0 до 255,  а
вместо знака  "+"  -  символьное  выражение,  первый  символ  которого
берется для создания строки, содержащей одинаковые символы.
   Вместо символьного  выражения  можно  указать  код  символа   целым
выражением, принимающим значение от 0 до 255:
 
        10 INPUT"ДЛИНА СИМВОЛА";L%
        20 INPUT"КОД СИМВОЛА";K%
        40 ? STRING$(L%,K%)
        50 GOTO 10
 
                       3.6.2.5. Функция INKEY$
 
   Рассмотрим пример:
 
        10 CLS
        20 I$=INKEY$
        30 IF I$="" THEN 20
        40 ? ASC(I$)
        50 GOTO 20
 
   Оператор I$=INKEY$ подобен оператору  INPUT I$,  но  в  отличие  от
последнего  не  ждет  ввода  символа  с клавиатуры (нажатия какой-либо
клавиши). Если к моменту выполнения функции клавиша не была нажата, то
результатом функции INKEY$ будет пустая строка "".
   В строке 40 печатается код нажатой клавиши.
   Рассмотрим пример, где с помощью функции INKEY$ организовано
управление перемещением точки:
 
        10  CLS
        20  X=100
        30  Y=100
        50  I$=INKEY$
        60  IF I$="" THEN 50
        70  PSET (X,Y),0
        80  IF I$=CHR$(&amp;O31) THEN X=X+5
        90  IF I$=CHR$(&amp;O10) THEN X=X-5
        100 IF I$=CHR$(&amp;O32) THEN Y=Y-5
        110 IF I$=CHR$(&amp;O33) THEN Y=Y+5
        120 PSET (X,Y),1
        130 GOTO 50
 
   В строках 20 и 30 устанавливаются первоначальные значения координат
точки.  В строках 50 и 60 переменной I$ присваивается символ,  клавиша
которого  будет  нажата.  Если  нажата  клавиша  "курсор  вправо",  то
координата Х увеличивается (строка  80)  -  восьмеричный  код  клавиши
"курсор  вправо" равен 31.  Аналогично работают строки 90,100,110 (см.
таблицу кодов символов в приложении 1).  Затем рисуется точка с новыми
координатами (строка 120).  Со строки 130 управление будет передано на
строку 50. Как только будет нажата одна из клавиш управления курсором,
стирается  точка,  изменяется  одна  из  координат  (в  зависимости от
нажатой клавиши) и точка высветится  на  новом  месте.  Точка  как  бы
двигается при нажатии на одну из клавиш управления курсором.
 
                     3.6.2.6. Функции STR$ и VAL
 
   Функция STR$ превращает значение арифметического выражения в строку
цифровых символов (строковую  константу).  Например,  если  Х=125,  то
результат функции STR$(X) - строковая константа "125".
   Функция VAL  является  обратной  по  отношению  к   функции   STR$.
Аргументом этой функции является символьное выражение, а результатом -
число. Например, результат функции VAL("125") - число 125.
 
                        3.6.2.7. Функция MID$
 
   Результат функции - строковая константа. Формат функции:
 
        MID$(A$,H,K)
где
   А$ - строковое выражение, из которого выделяется результат функции;
   Н  - целое выражение, принимающее значение из интервала от 1 до 255
        и задающее номер символа (в выражении А$), с которого
        начинается выделение результата функции;
   К  - целое выражение, принимающее неотрицательное значение, и
        задающее количество символов, выделяемых из выражения А$
        (длина результата).
   Значение Н не должно превышать длину строкового выражения А$.  Если
аргумент К не указан или выходит за правую границу  выражения  А$,  то
выделяется часть строки от символа,  указанного аргументом Н, до конца
строки А$.
   Пример:
            10 А$="ТРАКТОР"
            20 ? MID$(A$,5,3)
 
   В строке 20 из слова "ТРАКТОР", начиная с 5-ого символа, выделяется
слово,  состоящее из 3-х букв.  Результат (слово "ТОР")  выводится  на
экран.
   MID$ - единственная функция,  которая может стоять слева  от  знака
равенства. При этом формат функции следующий:
 
        MID$(A$,H,K)=P$
 
   В этом  случае  часть  строкового выражения А$ длиной К,  начиная с
символа с номером Н, заменяется строковым выражением Р$. Пример:
 
        10 А$="РАКЕТА"
        20 MID$(A$,4) = STRING$(3," ")
        30 ? A$
 
   Значение переменной А$ после преобразования в строке 20 будет равно
строковой константе "РАК   " - часть слова "РАКЕТА",  начиная с  4-ого
символа, заменяется тремя пробелами - результатом функции
STRING$(3," ") .
 
              3.6.3. Функции, определяемые пользователем
 
   Иногда в  разных местах программы нужно вычислить значение одного и
того же арифметического выражения при различных значениях  переменных,
входящих  в  это  выражение.  В  таких  случаях рекомендуется в начале
программы с помощью оператора DEF обозначить это выражение  каким-либо
именем  -  то  есть  определить  новую  функцию  и  обращться к ней по
необходимости из любого места программы.
   Формат оператора следующий:
 
        DEF FN&lt;имя&gt;(список)=&lt;выражение&gt;
где
   &lt;имя&gt; - любое допустимое имя переменной;
   список - список аргументов функции, разделенных запятыми;
   &lt;выражение&gt; - выражение того же типа, что и &lt;имя&gt; - формула для
                 получения результата функции.
 
   Аргументы функции назовем формальными,  так  как  при  обращении  к
функции,  определенной  оператором  DEF,  они  заменяются выражениями,
имеющими определенное значение.
   Формат обращения к функции следующий:
 
        Y=FN&lt;имя&gt;(список)
где
   &lt;имя&gt; - имя переменной, указанное в операторе DEF;
   список - список выражений, разделенных запятыми и заменяющих
            формальные аргументы функции при определении ее значения.
            При этом эти выражения становятся фактическими аргументами
            функции.
   Пример:
 
        10 DEF FNG(X,Y)=SQR(X*X+Y*Y)
        20 INPUT A,B
        30 G1=FNG(A,B)
        40 G2=FNG(2*A,2*B)
        50 G3=FNG(3*A,3*B)
        60 ? G1;G2;G3
 
   В строке 10 определяется (объявляется) функция FNG(X,Y).  В строках
30,40 и 50 вычисляется значение этой функции  при  разных  аргументах.
Значения переменных  G1,  G2  и  G3 определяются по следующим формулам
(лишние скобки проставлены для большей наглядности):
 
        G1=SQR(A*A+B*B),
        G2=SQR((2*A)*(2*A)+(2*B)*(2*B)),
        G3=SQR((3*A)*(3*A)+(3*B)*(3*B)).
 
                3.7. Непосредственный доступ к памяти
 
   Целые числа в памяти машины хранятся в виде  16-разрядных  двоичных
чисел.  Например,  десятичное  число 27 хранится в виде двоичного кода
0000000000011011.
   Для записи целого числа в ОЗУ машина отводит две 8-разрядные ячейки
памяти (2 байта),  образующие одно 16-разрядное слово. Рассматриваемые
здесь  операторы  и  функции  предназначены  для  работы  с отдельными
словами памяти.
   Каждая ячейка   имеет  свой  адрес  (номер).  Так  как  одно  слово
образуется из  двух  ячеек,  то  адреса  слов  - целые четные числа из
интервала от &amp;O0 до  &amp;O177776  (адреса  обычно  пишут  в  восьмеричной
системе счисления).
   Аргументы рассматриваемых   здесь  операторов  и  функций  -  целые
выражения.
 
                         3.7.1. Оператор РОКЕ
 
   Оператор РОКЕ А,В записывает числовое значение В в память машины по
адресу А. Если значение адреса нечетное, то оно уменьшается на 1.
   Данный оператор удобно  использовать  при  составлении  подпрограмм
(или программ) в машинных кодах.
 
                         3.7.2. Оператор  OUT
 
   Оператор  OUT  A,M,K   позволяет  обнулить  или  установить  в  "1"
определенные разряды числа, хранящегося по адресу А. Числовое значение
М,  называемое  маской,  определяет  разряды двоичного числа,  которые
обнуляются (если К=0), или устанавливаются в "1" (если К не равно 0).
   Пример:
 
        145 OUT &amp;O7010,&amp;B1111,0%
 
   В этом  примере  оператор  OUT обнуляет 4 младших разряда двоичного
числа, хранящегося по адресу &amp;О7010.
 
                         3.7.3. Функция РЕЕК
 
   Результат функции РЕЕК(А) - целое число, хранящееся по адресу А.
   Пример:
 
        10  X1=12
        20  Y1=12
        30  X=X1
        40  Y=Y1
        50  ? AT(X1,Y1);" "
        60  ? AT(X,Y);"$"
        70  X1=X
        80  Y1=Y
        90  K=PEEK(&amp;O177662)
        100 IF K=&amp;О10 THEN X=X-1
        110 IF K=&amp;O31 THEN X=X+1
        120 IF K=&amp;O32 THEN Y=Y-1
        130 IF K=&amp;O33 THEN Y=Y+1
        140 FOR I=1 TO 200 ' ЗАДЕРЖКА ДЛЯ ЗАМЕДЛЕНИЯ
        150 NEXT I         ' ДВИЖЕНИЯ
        160 GOTO 50
 
   По адресу &amp;О177662 хранится код последней нажатой клавиши. В строке
90   код   нажатой   клавиши   (результат   функции  РЕЕК(&amp;О177662)  )
присваивается переменной К.  В зависимости  от  кода  нажатой  клавиши
определяется направление перемещения символа "$" (строки 100 - 130).
 
                         3.7.4. Функция  INP
 
   Результат функции  с  форматом  INP(A,M) - целое число,  в двоичном
представлении которого  разряды,  соответствующие  ненулевым  двоичным
разрядам  маски  М,  равны значениям соответствующих двоичных разрядов
числа,  хранящегося по адресу  А.  Остальные  разряды  двоичного  кода
результата нулевые.
 
                3.8. Предложения и советы программисту
 
   Если программирование - Ваше хобби или призвание, то Вы со временем
поймете  (и очень быстро),  что,  даже хорошо зная Бейсик,  невозможно
создать эффективную программу без учета ряда особенностей той ЭВМ,  на
которой   Вы  работаете.  Можно  с  уверенностью  перечислить  все  те
трудности, с которыми Вы встретитесь в процессе своей работы:
   1. Не хватает памяти на вводимую программу.
   2. Программа выполняется слишком медленно.
   3. Всего три цвета, нет операторов звукового сопровождения,
      спрайтов, прокрутки экрана (рулонного сдвига), таймера,
      и так далее.
   Существует много способов и "хитрых" приемов в решении данных задач
на языке Бейсик.
 
   1. Ваша  программа  не  помещается  в  памяти БК.  Есть два способа
"борьбы"  с  такой  неприятностью  -  или  сократить  программу,   или
увеличить память, используемую программой.
   Первый способ  наиболее  простой.  Как  сказал  один   из   великих
программистов: "Нет   такой  программы,  которую  невозможно  было  бы
сократить хотя бы на одну строчку".  И он же сказал:  "Не сокращай  на
одну строчку, сокращай сразу на пятьдесят".
   Общепризнанные рецепты   сокращения   объема   памяти,   занимаемой
программой:
   а) убедитесь, что лучшего алгоритма Вы уже не придумаете;
   б) выделяйте одинаковые части программы в подпрограмму;
   в) используйте  по   возможности   целые   переменные,   для   чего
дописывайте символ "%" (например, А%=5%, V%(I%)=C%, FOR I%=1% TO 100%,
и так далее) - переменные целого типа занимают в памяти места в 4 раза
меньше,  чем переменные двойной точности. При этом необходимо помнить,
что сам символ "%" занимает в  памяти  1  байт  -  поэтому,  если  имя
переменной  встречается  в  программе  часто,  то  такой  прием  может
привести к обратному эффекту (увеличению объема программы);
   г) и  последний отчаянный шаг - это сокращенное написание служебных
слов операторов IF и FOR.  Ниже приведены эти служебные слова;  справа
от каждого слова - его допустимое сокращение в листинге программы:
 
        THEN - TH
        ELSE - EL
        STEP - ST
 
   Если и теперь Ваша программа не умещается в отведенной области ОЗУ,
то  Вы  можете  увеличить  объем  памяти,  используемой  программой  -
включить режим расширенной памяти (режим "РП"). При этом объем рабочей
области ОЗУ увеличивается с 16К до 28К за счет уменьшения  объема  ОЗУ
экрана.  В нормальном режиме ОЗУ экрана занимает адресное пространство
от 40000 до 77777.  После  включения  режима  "РП"  объем  ОЗУ  экрана
уменьшится с 16К до 4К - на экране будут отображаться только служебная
строка  и  4  информационные  строки.  Включить   режим   "РП"   можно
одновременным   нажатием   клавиш  "АР2"   и   "СБР"   или  оператором
PRINT CHR$(140).
   ОЗУ экрана   можно   также   использовать   для  размещения  данных
(организации  массивов).  При  этом,  правда,  придется   пожертвовать
красотой  части  экрана.  Ниже  приводится пример записи 200 случайных
чисел в область ОЗУ,  отведенную для хранения "изображения"  служебной
строки  (строки 10-40).  Строки 100-160 производят вывод этих чисел на
экран -  при  этом  экран  не  должен  "сдвигаться"  вверх  (для  чего
применена  функция  AT   оператора  PRINT), и не должно быть изменения
изображения  служебной  строки  (например,   достаточно   переключения
регистров "РУС" и "ЛАТ", чтобы испортить содержимое массива).
 
        10  ? CHR$(140)CHR$(140)
        20  FOR I%=0 TO 199
        30    POKE &amp;O40000+2*I%, RND(1)*99+1
        40  NEXT I%
        . . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . . .
        100 FOR K%=0 TO 199
        110   ? AT(X,Y)PEEK(&amp;O40000+2*K%)
        120   Y=Y+1
        130   IF Y&lt;23 THEN 160
        140   X=X+3
        150   Y=0
        160 NEXT K%
 
  Аналогично можно  размещать значения любых целочисленных переменных
в любой области экрана,  заранее предусмотрев невозможность  наложения
текстовой  или  графической  информации  на  полученную картину данной
области ОЗУ.  Следует иметь в виду, что в памяти, выделенной для одной
точечной строки,  можно разместить 32 целых числа (например, в области
ОЗУ,  отведенной для хранения "изображения"  служебной  строки,  можно
разместить 512 целых чисел).
   Рассмотрим еще один пример использования ОЗУ экрана для  размещения
данных:
 
   10 INPUT "КОЛИЧЕСТВО ИНФОРМАЦИОННЫХ СТРОК(18-23)";N
   20 ? CHR$(140)CHR$(140)
   30 FOR I%=0 TO 149 ' запись 150 целых чисел в ОЗУ экрана
   40   POKE &amp;O42000+N*640+2*I%, RND(1)*99+1
   50 NEXT I%
   . . . . . . . . . . . . . . . . . . . .
   . . . . . . . . . . . . . . . . . . . .
   160 FOR I%=0 TO 149  ' считывание чисел из ОЗУ экрана
   170   ? AT(X,Y)PEEK(&amp;O42000+N*640+2*I%)
   180   Y=Y+1
   190   IF Y&lt;18 THEN 220
   200   X=X+3
   210   Y=0
   220 NEXT I%
 
   В строке  10  задается  количество  информационных  строк   экрана,
используемых программой (каждая строка занимает 640 байт).
   В строке 20 производится включение и выключение  режима  "РП",  что
нужно для того,  чтобы настроить начало информационной части экрана на
адрес 42000.  Во время выполнения этой программы экран также не должен
"сдвигаться" вверх.
   Разумеется, все  сказанное  здесь  не  исчерпывает   весь   арсенал
способов экономии памяти.
 
   2. Первый  вопрос  мы  успешно решили и Ваша программа благополучно
заняла свое место в БК.  Теперь нужно ее  заставить  быстро  работать.
Понятие  быстро/медленно  - относительно,  поэтому будем считать,  что
если Ваша программа работает почти как программа в машинных кодах,  то
это быстро, иначе - медленно.
   Для увеличения скорости работы программы очень важно знать скорость
выполнения  каждого оператора и делать так,  чтобы в циклах,  особенно
вложенных, находились самые "быстрые" операторы и операнды.
   В таблице   7   приводится   сравнение   быстродействия   некоторых
операторов (время выполнения  каждого  оператора  в  микросекундах)  и
объем памяти, используемой каждым оператором в байтах.
 
                     Таблица 7 . Сравнение быстродействия операторов
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;               &#9474;время, &#9474;память,&#9474;&#9474;                  &#9474;время, &#9474;память,&#9474;
&#9474;   ОПЕРАЦИЯ    &#9474; мкс   &#9474; байт  &#9474;&#9474;   ОПЕРАЦИЯ       &#9474; мкс   &#9474; байт  &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474; P=22+33       &#9474;   950 &#9474;  52   &#9474;&#9474; P%=22%+11%       &#9474;    82 &#9474;   36  &#9474;
&#9474; P=22-33       &#9474;   950 &#9474;  52   &#9474;&#9474; P%=22%-33%       &#9474;    82 &#9474;   36  &#9474;
&#9474; P=2*3         &#9474;  7360 &#9474;  52   &#9474;&#9474; P%=2%*3%         &#9474;   328 &#9474;   36  &#9474;
&#9474; P=A*B         &#9474;  7360 &#9474;  52   &#9474;&#9474; P%=A%*B%         &#9474;   328 &#9474;   36  &#9474;
&#9474; P=8/2         &#9474;  9631 &#9474;  52   &#9474;&#9474; P%=8%/2%         &#9474;  7032 &#9474;   42  &#9474;
&#9474; P=2^3         &#9474; 94837 &#9474;  52   &#9474;&#9474; P%=2%^3%         &#9474;  4788 &#9474;   40  &#9474;
&#9474; P=TAN(3.14)   &#9474;190166 &#9474;  44   &#9474;&#9474; P=SIN(3.14)      &#9474; 90897 &#9474;   44  &#9474;
&#9474; P=SQR(3)      &#9474; 28200 &#9474;  42   &#9474;&#9474; P=SQR(3%)        &#9474; 28200 &#9474;   38  &#9474;
&#9474; P=A           &#9474;   600 &#9474;  36   &#9474;&#9474; P%=A%            &#9474;    55 &#9474;   28  &#9474;
&#9474; V(1)=10       &#9474;   574 &#9474; 140   &#9474;&#9474; V%(1%)=10        &#9474;   274 &#9474;   64  &#9474;
&#9474; POKE 16384%,1%&#9474;    55 &#9474;  26   &#9474;&#9474; PEEK(16384%)     &#9474;    55 &#9474;   26  &#9474;
&#9474; PSET (10%,10%)&#9474;   629 &#9474;  28   &#9474;&#9474; PSET (10%,10%),1%&#9474;  1368 &#9474;   40  &#9474;
&#9474; COLOR 1%      &#9474;   739 &#9474;  16   &#9474;&#9474; P=RND(1)         &#9474;   684 &#9474;   42  &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
 
   Если алгоритм Вашей программы построен рационально,  то,  используя
таблицу 7 и правила "хорошего тона"  в  программировании,  Вы  сможете
увеличить  скорость  выполнения программы как минимум на порядок (в 10
раз). К правилам "хорошего тона" относятся:
   а) везде,  где  можно  (и  где есть смысл),  используйте переменные
целого типа. Это всегда увеличивает скорость и экономит память;
   б) старайтесь  всегда  по возможности заменять возведение в степень
произведением; например: A^2 на A*A , C^3 на C*C*C;
   в) как  можно  реже пользуйтесь оператором PRINT.  Старайтесь одним
оператором  PRINT  вывести  всю   нужную   информацию;   например:
? AT(1%,9%)"V="V%" Z="Z" Y="Y ;
   г) запоминайте одномерные массивы через операторы POKE - PEEK,  как
делалось в двух предыдущих примерах;
   д) если  вам  нужно  многократно  использовать   тригонометрическую
функцию (а они работают ужасно медленно!), то в самом начале программы
в цикле запишите в массив значения Y=f(X). Например:
 
      10 DIM V(90%)
      20 FOR I%=0% TO  90%    ' углы от 0 до 90 градусов
      30 V(I%)=SIN(I%/57.3)   ' перевод град. в радианы
      40 NEXT I%
 
   Теперь в  программе  для I%=от 0 до 90 град.  значение синуса можно
вывести из массива в 100 раз быстрее.  Аналогичную операцию Вы сможете
проделать с любой функцией.
 
   3. Ниже   описываются  небольшие  программы,  имеющие  практическую
ценность в смысле  раскрытия  потенциальных  возможностей  БК.  Авторы
рекомендуют  Вам  поэкспериментировать  с  ними,  поэтому  ограничатся
только их листингом.
         А. Сброс служебной строки
 
   10 ? CHR$(148%)CHR$(158%)CHR$(140%)CHR$(140%)CHR$(145%)
 
        Б. Рулонный сдвиг экрана (прокрутка)
 
   10 REM ПРОКРУТКА ВВЕРХ
   20 X%=PEEK(&amp;O177664)
   30 FOR I%=X% TO 255%+X%
   40 POKE &amp;O177664,I%
   50 A=4/2 ' ПАУЗА
   60 NEXT I%
 
   Для включения прокрутки экрана вниз достаточно исправить строку 30:
 
   30 FOR I%=X%+255% TO X% ST -1%
 
        В. Звук различной высоты и длительности
 
   10 FOR I%=0% TO 1000%
   20 POKE &amp;O177716,0%
   30 POKE &amp;O177716,64%
   40 X=2*2 ' ПАУЗА
   50 NEXT I%
 
   Заменив 1000%  на другое число,  Вы измените длительность звука,  а
изменив длительность паузы - высоту звука.
 
 
        Г. Работа с таймером
 
   Подробное описние  таймера  (счетчика  времени)  БК  с  интересными
примерами  приводится  в  [6]  и [12].  Здесь лишь приведем простейший
пример работы с ним и порекомендуем читателю поэкспериментировать, так
как в БК разных заводов таймер может работать по-разному.  Посмотрите,
что получится,  если вместо &amp;O160 записать 0,  &amp;O20, &amp;O60, &amp;O120 и как
зависит период Т от начального значения S0 (рис.10):
 
   10 POKE &amp;O177706,32767%        'установка длительности периода S0
   20 POKE &amp;O177712,&amp;O160         'запуск таймера
   30 ? AT(0,0)PEEK(&amp;O177710)     'смотрим, как он работает
   40 GOTO 30
 
        содержимое счетчика
  S0 &#9472;&#9508;
      &#9474;
      &#9474;
      &#9474;
      &#9474;
      &#9474;
      &#9474;                                                    время
    0 &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;
                     T             2*T            3*T      c
 
                 Рис.10. Иллюстрация работы таймера.
   Таймер работает независимо от работы программы. Содержимое счетчика
времени  определяется   как   результат   функции   PEEK(&amp;O177710)   и
периодически уменьшается от S0 до 0 (рис.10).
   В приведенном примере при S0=32767 период счетчика Т=89,657 с [6].
 
         Д. Чтение кодов клавиатуры
 
   Чтение кода последней нажатой клавиши производится оператором:
 
   P%=PEEK(&amp;O177662)
 
   В следующем примере при нажатии на определенную клавишу выдается ее
код:
     10 POKE &amp;O177660,&amp;O100   'запрещение прерывания от клавиатуры
     20 IF INP(&amp;O177660,&amp;O200)=0 THEN 20 'если клавиши отжаты, ждать
     30 ? PEEK(&amp;O177662)      'вывод кода клавиши на экран
     40 GOTO 20
 
         Е. Запись символов в служебной строке.
 
     10 ? CHR$(140)CHR$(140)
     20 POKE &amp;O160,&amp;O40000
     30 ? "ТЕКСТ"
 
   Здесь же скажем несколько слов  о  том,  как  облегчить  работу  на
клавиатуре.  Прежде  всего рекомендуем набирать оператор (или команду)
не полностью,  а только несколько (2 - 4) первых символов. Например, в
операторе  ввода вместо слова INPUT достаточно набрать IN.  По команде
LIST операторы выводятся на экран полностью. Ниже в алфавитном порядке
приведены    некоторые   операторы   и   команды   Бейсика.   Скобками
ограничивается та часть оператора, которую при наборе программы писать
необязательно.
 
        AU(TO)                DI(M)                 PA(INT)
        BE(EP)                DR(AW)                PO(KE)
        BL(OAD)               FO(R)                 PRI(NT)
        BS(AVE)               GOS(UB)               PS(ET)
        CI(RCLE)              IN(PUT)               REA(D)
        CLE(AR)               KE(Y)                 REN(UM)
        COL(OR)               LIN(E)                RES(TORE)
        CS(AVE)               MO(NIT)               RET(URN)
        DA(TA)                NEX(T)                ST(OP)
        DEL(ETE)              OU(T)
 
   Полезно также  помнить,  что  при  наборе  программы  необязательно
ставить  пробелы  между  номером  строки  и оператором,  а также между
оператором и аргументами. Например, вместо строки
        145 FOR X=1 TO 25
можно писать
        145FORX=1 TO 25
   По команде  LIST  машина  выводит  на   экран   строки   программы,
расставляя  слева  и  справа  от  каждого  оператора по одному пробелу
(независимо от того, как они были набраны пользователем).
 
                3.9. Примеры программ на языке Бейсик
 
   Приводимые здесь тексты (листинги) игровых программ на языке Бейсик
являются примерами практического применения рассмотренных операторов.
 
   Пример 1:
 
     5   REM УГАДАЙ ЧИСЛО
     10  CLS
     15  ? "Нажми любую клавишу, и я задумаю число от 0 до 100"
    20  X%=RND(1)*100%'Начальная установка генератора случайных чисел
     30  IF INKEY$="" THEN 20
     40  N%=0%      'счетчик числа попыток
     50  INPUT "Угадай, какое число я задумала"; A%
     55  N%=N%+1%
     60  IF A%=X% THEN 90
     70  IF A%&gt;X% THEN ?"Много !" ELSE ?"Мало !"
     80  GOTO 50
     90  IF N%&lt;7% THEN ?"Тебе очень повезло !"
     100 IF N%=7% THEN ?"Точно. Молодец !"
     110 IF N%&gt;7% THEN ?"Тебе надо еще потренироваться !"
 
   В игре  "Угадай   число"   игроку   предлагается   угадать   число,
"задуманное" машиной.
   В Бейсике БК отсутствует оператор RANDOMIZE,  который есть в других
Бейсиках  (он  настраивает  функцию  RND  на  новую последовательность
"случайных" чисел).  Однако заменить  отсутствующий  в  данной  версии
Бейсика   оператор   можно  последовательностью  других  операторов  -
например, так, как это сделано в строках 15-30.
 
   Пример 2:
 
     10  REM МАКСИТ
     20  CLS
     30  DIM A%(6,6)
     40  INPUT "Имя 1-го игрока";L$
     50  INPUT "Имя 2-го игрока";R$
     60  R%=RND(-LEN(L$+R$)) 'RANDOMIZE
     70  CLS
     80  FOR Y=1 TO 6
     90    ? AT(0,2*Y);Y
     100   FOR X=1 TO 6
     110     A%(X,Y)=RND(1)*99+1
     120     S%=S%+A%(X,Y)
     130     ? AT(4*X-1,2*Y);A%(X,Y)
     140   NEXT X
     150 NEXT Y
     160 ? AT(0,0);"    1   2   3   4   5   6"
     170 DRAW "BM20,145 U133 R205"
     180 N=0
     190 Y=1
     200 ? AT(0,16);L$;", введите номер столбца      "
     210 INPUT X
     220 IF X&lt;1 OR X&gt;6 THEN 200
     230 IF N=0 THEN 250
     240 ? AT(4*X1,2*Y);"--"
     250 Y1=Y
     260 L%=L%+A%(X,Y) 'Очки 1-го игрока
     270 A%(X,Y)=0
     280 ? AT(4*X,2*Y);CHR$(173);CHR$(179)
     290 ? AT(0,16);R$;", введите номер строки       "
     300 INPUT Y
     310 IF Y&lt;1 OR Y&gt;6 THEN 290
     320 ? AT(4*X,2*Y1);"--"
     330 X1=X
     340 R%=R%+A%(X,Y) 'Очки 2-го игрока
     350 A%(X,Y)=0
     360 ? AT(4*X,2*Y);CHR$(177);CHR$(190)
     370 N=1
     380 ? AT(0,20);"очки: ";L%;"      очки: ";R%
     390 IF L%+R%=S% THEN END  ELSE 200
 
   Максит - известная игра для двух игроков.  В начале игры на  экране
видны  6  строк чисел (номера строк проставлены в левой части экрана).
Эти же числа образуют 6 столбцов (номера столбцов  указаны  в  верхней
части  экрана).  Игра  начинается в первой строке чисел - первый игрок
выбирает  столбец  -  точнее,  число,  расположенное  на   пересечении
выбранного  столбца  и  текущей (первой) строки.  Затем второй игрок в
столбце,  выбранном первым игроком,  выбирает строку - точнее,  число,
расположенное  на  пересечении  выбранной  строки  и текущего столбца.
Теперь в выбранной (текущей) строке первый игрок  выбирает  столбец  и
так далее. Выбранное число увеличивает очки игрока.
 
   Пример 3:
 
     10  REM ХАНОЙСКАЯ БАШНЯ
     20  CLS
     30  DIM S(3),X(3)
     40  S(1)=&amp;O30002
     50  S(2)=&amp;O30036
     60  S(3)=&amp;O30056
     70  FOR I=&amp;O30002 TO &amp;O30016 STEP 2
     80    POKE I,(I-&amp;O30000)/2
     90  NEXT I
     100 POKE &amp;O30036,7
     110 POKE &amp;O30056,7
     120 X(1)=50
     130 X(2)=130
     140 X(3)=210
     150 P=0
     160 INPUT "СКОЛЬКО КОЛЕЦ (2-6)";N
     170 CLS
     180 FOR K=1 TO N 'Рисуются кольца
     190   LINE (50-5*K,96+4*K)-(50+5*K,96+4*K)
     200 NEXT K
     210 LINE (10,124)-(250,124)
     220 FOR J=1 TO 3 'Рисуются 3 стержня
     230   LINE (X(J),97)-(X(J),124)
     240 NEXT J
     250 ? AT(1,17);"ОТКУДА,КУДА"
     260 INPUT FROM,TO
     270 IF FROM=TO THEN 400 'Выход из игры
     280 X1=PEEK(S(FROM))
     290 X2=PEEK(S(TO))
     300 IF X1=&gt;X2 THEN 250
     310 S(TO)=S(TO)-2
     320 POKE S(TO),X1
     330 S(FROM)=S(FROM)+2
     340 Y=96+4*X1
     350 LINE (X(FROM)-5*X1,Y)-(X(FROM)+5*X1,Y),0 'Снятие кольца
     360 LINE (X(FROM),97)-(X(FROM),124)
     370 LINE (X(TO)-5*X1,Y)-(X(TO)+5*X1,Y) 'Укладывание кольца
     380 P=P+1
     390 GOTO 250
     400 ? "СДЕЛАНО ХОДОВ";P
     410 END
 
   Ханойская башня - популярная логическая игра.  Правила игры просты.
Имеются  3  вертикальных стержня - левый,  промежуточный и правый.  На
левый стержень нанизаны кольца.  Требуется  перенести  все  кольца  на
правый стержень,  чтобы в конце игры они были расположены так же,  как
первоначально на левом.  За одно действие можно переносить только одно
кольцо.  Любое кольцо можно укладывать либо на большее кольцо, либо на
свободный стержень. Количество колец задается в начале игры.
 
   Пример 4:
 
      10  CLS
      20  O=0
      30  DIM A$(30),B$(20),C$(20)
      40  DATA БЛОК,БАНК,ВАЛ,ВОДА,ДРУГ,ВЕСНА,ВЕТЕР,ГУЛ,ДЕНЬ,ДОМ
      50  DATA ЗЕМЛЯ,ИВА,КОТ,КИТ,КОНЬ,ЛЕТО,ЛИСТ,МИР,МОРЕ,ОСЕНЬ
      60  DATA ПИР,РОСТ,РЕКА,САД,СЫР,СНЕГ,ХЛЕБ,ЦЕЛЬ,ШАР,ЮЛА
      80  INPUT "КОЛИЧЕСТВО СЛОВ(1-20)";N
      90  FOR I=1 TO 30
      100   READ A$(I)
      110 NEXT I
     120 FOR K=1 TO N
      130   P%=RND(3)*31+1
      140   B$(K)=A$(P%)
      150   ? B$(K)
      160 NEXT K
      170 FOR P=1 TO 1500
      180 NEXT P
      190 CLS
      200 ? "ВВЕДИТЕ ЭТИ ЖЕ СЛОВА"
      210 FOR J=1 TO N
      220   INPUT C$(J)
      230   IF C$(J)&lt;&gt;B$(J) THEN O=O+1
      240 NEXT J
      250 IF O=0 THEN ? "ВЫ БЕЗОШИБОЧНО НАБРАЛИ ВСЕ СЛОВА"
                 ELSE ? "ВЫ ДОПУСТИЛИ ОШИБОК:";O
      260 END
 
   На экран выводятся несколько слов (их количество задается в  начале
игры).  Через  определенное время экран очищается ,  и игрок по памяти
вводит эти же слова и в такой же  последовательности.  Игра  развивает
память игрока.
 
   Пример 5:
 
10  CLS
20  COLOR 3,0
30  FOR I=1 TO 3 'РИСУЮТСЯ ЗМЕИ
40    GOSUB 360
50    PSET (XR%,YR%),1
60    DRAW "C1 R47 D1 L47 D1 R47 D1 L47 D1 R47 D1 L47 D1 R47 D1 L47 D1
            R47 D1 L47"
70  NEXT I
80  N=0
90  O=0
100 GOSUB 360
110 LINE (XR%+3,YR%+4)-(XR%+4,YR%+5),2,B 'РИСУЕТСЯ МУХА
120 IF N=1 THEN 160
130 GOSUB 360
140 X%=XR%
150 Y%=YR%
160 PSET (X%,Y%),2
170 DRAW "C2 R7 D1 L7 D1 R7 D1 L7 D1 R7 D1 L7 D1 R7 D1 L7 D1 R7 D1 L7"
180 IF N=0 THEN 210
190 PSET (X1%,Y1%),0
200 DRAW "C0 R7 D1 L7 D1 R7 D1 L7 D1 R7 D1 L7 D1 R7 D1 L7 D1 R7 D1 L7"
210 N=1
220 X1%=X%
230 Y1%=Y%
240 K=PEEK(&amp;O177662)
250 IF K=8 THEN X%=X%-8
260 IF K=25 THEN X%=X%+8
270 IF K=26 THEN Y%=Y%-10
280 IF K=27 THEN Y%=Y%+10
290 IF K&lt;&gt;8 AND (K&lt;25 OR K&gt;27) THEN 240
300 IF POINT(X%,Y%)=1 THEN END
310 IF POINT(X%+3,Y%+4)&lt;&gt;2 THEN 160
320 LINE (X%+3,Y%+4)-(X%+4,Y%+5),0,B
330 O=O+1
340 ? AT(0,22);"ОЧКИ:";O
350 GOTO 100
360 XR%=RND(1)*200
370 YR%=RND(1)*200
380 XR%=XR%-XR%MOD8
390 YR%=YR%-YR%MOD10
400 IF POINT(XR%+3,YR%+4)&lt;&gt;4 THEN 360
410 RETURN
 
   В этой игре на экране постоянно отображаются три "змеи",  "лягушка"
и "муха". Игрок, нажимая на клавиши управления курсором, перемещает по
экрану "лягушку",  ловящую "муху". Игра заканчивается при столкновении
"лягушки" со "змеей".
 
                      3.10. Сообщения об ошибках
 
   После запуска  программы  на  Бейсике  машина,  обнаружив  ошибку в
какой-либо строке, выдает сообщение в следующем формате:
 
        ОШИБКА ХХХ В СТРОКЕ ННННН
где
   ХХХ   - код ошибки;
   ННННН - номер строки, содержащей ошибку.
   Ниже приводятся коды ошибок и их описания:
    1   - вход в цикл не через оператор FOR, или переменная,
          использованная в FOR, не  соответствует  переменной,
          использованной в NEXT.
    2   - синтаксическая ошибка: неправильная запись операторов,
          неправильное использование символов (скобок, запятых и
          других символов).
    3   - оператор RETURN был обнаружен без выполнения GOSUB.
    4   - при выполнении оператора READ обнаружено, что список
          оператора DATA исчерпан.
    5   - значение аргумента оператора (или функции) выходит за
          пределы допустимого интервала. Неправильная запись команд
          оператора DRAW.
    6   - результат арифметической операции не может быть записан
          в формате, принятом для чисел в Бейсике.
    7   - переполнение памяти: не хватает места в памяти для программы
          (или для размещения переменных).
    8   - в операторе перехода используется номер несуществующей
          строки.
    9   - неправильно указаны индексы элементов массива.
    10  - попытка повторного определения массива.
    11  - деление на нуль или возведение нуля в отрицательную степень.
    12  - использование команды в тексте программы.
    13  - неправильное использование типов данных. Например, попытка
          присвоить строковой переменной числовое значение.
    14  - в памяти не хватает места строковым переменным.
    15  - попытка создать строку длиной более 255 символов.
    17  - продолжение выполнения программы невозможно.
    18  - неопределена функция пользователя оператором DEF.
    19  - ошибка устройства ввода/вывода.
    24  - в выражении отсутствует операнд (число или переменная).
 
</pre>


[[Категория:Программирование на БК-0010-01‎]]
[[Категория:Программирование на БК-0010-01‎]]

Текущая версия от 19:28, 23 августа 2010

Материал удален по требованию автора.