УКНЦ Бейсик Описание языка
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. |
УТВЕРЖДЕН У1.00031-01 35 01-ЛУ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЛЕКСА ВЫЧИСЛИТЕЛЬНОГО УЧЕБНОГО "ЭЛЕКТРОНИКА МС 0202" БЕЙСИК ОПИСАНИЕ ЯЗЫКА У1.00031-01 35 01 ЛИСТОВ 98 1987 ЛИТЕРА 0 - 2 - У1.00031-01 35 01 АННОТАЦИЯ Данный документ представляет собой руководство по языку программирования БЕЙСИК (версия 1985.11.01.) и предназначен для пользователей микро-ЭВМ <Электроника МС 0511>. Язык БЕЙСИК создан для решения математических и инженерных задач в режиме диалога человек-ЭВМ. Он позволяет создавать программы для большого круга задач, сочетая в себе простоту использования и легкость изучения. Описываемая версия БЕЙСИК- системы существенно расширена по сравнению с ядром языка БЕЙСИК. Она включает операторы, которые позволяют создавать программы по обработке текстовой информации, использовать этот язык для программирования систем управления технологическими установками, а также игровых задач и т.д.. В настоящем документе приводятся сведения о синтаксисе и семантике операторов, функций языка и команд системы. В приложении 1 приведены сообщения об ошибках. Список команд, операторов и функций приведен в приложении 2. В приложении 3 приведена таблица кодов КОИ-7 <Электроника МС 0511>. Приложение 4 содержит список слов, зарезервированных в БЕЙСИК-системе. Перед изучением описания языка БЕЙСИК необходимо ознакомиться с руководством по эксплуатации микро-ЭВМ <Электроника МС 0511>, руководством оператора У1.00031-01 34 02. - 3 - У1.00031-01 35 01 СОДЕРЖАНИЕ 1. ОБЩИЕ СВЕДЕНИЯ............................................ 6 1.1. Косвенный режим........................................ 6 1.2. Непосредственный режим................................. 6 1.3. Сообщения об ошибках................................... 7 1.4. Способ описания языка БЕЙСИК........................... 7 1.5. Основные символы языка................................. 8 2. ДАННЫЕ И ОПЕРАЦИИ НАД НИМИ................................ 9 2.1. Константы.............................................. 9 2.1.1. Числовые константы................................... 9 2.1.2. Типы числовых констант............................... 10 2.1.3. Текстовая константа.................................. 11 2.2. Переменные............................................. 11 2.2.1. Определение переменной............................... 11 2.3. Выражения и операции................................... 12 2.3.1. Арифметическое выражение............................. 12 2.3.2. Арифметические операции.............................. 13 2.3.3. Операции отношения................................... 14 2.3.4. Логические операции.................................. 14 2.3.5. Функции.............................................. 16 2.3.6. Преобразование типов................................. 16 2.3.7. Операции над строками символов....................... 17 3. КОМАНДЫ СИСТЕМЫ........................................... 18 3.1. Команды пуска программы................................ 18 3.1.1. Команда RUN.......................................... 18 3.1.2. Команда CONT......................................... 19 3.1.3. Клавиша (команда) <СУ> <A>........................... 19 3.1.4. Команда SYSTEM....................................... 20 3.2. Хранение программ на кассетной магнитной ленте......... 20 3.2.1. Команда LOAD......................................... 20 3.2.2. Команда SAVE......................................... 21 3.2.3. Команда MERGE........................................ 21 3.2.4. Команда CLOAD........................................ 22 3.2.5. Команда CSAVE........................................ 22 3.2.6. Команда FILES........................................ 22 3.2.7. Команда BLOAD........................................ 23 3.2.8. Команда BSAVE........................................ 24 3.3. Работа с текстами программ............................. 24 3.3.1. Команда LIST......................................... 25 3.3.2. Команда DELETE....................................... 26 3.3.3. Команда RENUM........................................ 26 3.3.4. Команда AUTO......................................... 27 3.3.5. Команда NEW.......................................... 28 4. ОПЕРАТОРЫ.................................................. 28 - 4 - У1.00031-01 35 01 4.1. Основные операторы..................................... 28 4.1.1. Оператор LET......................................... 28 4.1.2. Оператор GOTO........................................ 29 4.1.3. Оператор GOSUB....................................... 29 4.1.4. Оператор RETURN...................................... 30 4.1.5. Оператор IF.......................................... 31 4.1.6. Оператор FOR......................................... 32 4.1.7. Оператор NEXT........................................ 32 4.1.8. Оператор ON.......................................... 33 4.1.9. Оператор STOP........................................ 34 4.1.10. Оператор END......................................... 35 4.1.11. Оператор REM......................................... 36 4.2. Операторы описания, резервирования памяти и установки начальных значений........................... 36 4.2.1. Оператор DIM......................................... 37 4.2.2. Оператор KEY......................................... 37 4.2.3. Оператор CLEAR....................................... 38 4.2.4. Оператор DATA........................................ 39 4.2.5. Оператор READ........................................ 40 4.2.6. Оператор RESTORE..................................... 40 4.2.7. Оператор DEF......................................... 41 4.2.7.1. Оператор DEF USR..................................... 41 4.2.7.2. Оператор DEF FN...................................... 42 4.3. Операторы ввода/вывода................................. 43 4.3.1. Оператор PRINT....................................... 43 4.3.2. Оператор INPUT....................................... 44 4.3.3. Оператор OPEN........................................ 45 4.3.4. Оператор CLOSE....................................... 46 4.4. Операторы непосредственного доступа к памяти........... 46 4.4.1. Оператор POKE........................................ 46 4.4.2. Оператор OUT......................................... 47 4.5. Операторы управления экраном телевизора................ 48 4.5.1. Оператор CLS......................................... 48 4.5.2. Оператор COLOR....................................... 48 4.5.3. Оператор SCREEN...................................... 49 4.5.4. Оператор LOCATE...................................... 50 4.6. Операторы и функции графики............................ 51 4.6.1. Оператор PSET........................................ 51 4.6.2. Оператор PRESET...................................... 52 4.6.3. Функция POINT........................................ 52 4.6.4. Оператор LINE........................................ 53 4.6.5. Оператор CIRCLE...................................... 54 4.6.6. Оператор PAINT....................................... 55 4.6.7. Оператор DRAW........................................ 56 4.7. Оператор управления звуком............................. 58 4.7.1. Оператор BEEP........................................ 58 4.8. Операторы трассировки программы........................ 59 4.8.1. Оператор TRON........................................ 59 4.8.2. Оператор TROFF....................................... 59 5. ФУНКЦИИ................................................... 60 5.1. Числовые функции....................................... 60 5.1.1. Функция SQR.......................................... 60 5.1.2. Функция SIN.......................................... 60 5.1.3. Функция COS.......................................... 61 5.1.4. Функция TAN.......................................... 61 5.1.5. Функция ATN.......................................... 61 - 5 - У1.00031-01 35 01 5.1.6. Функция PI........................................... 62 5.1.7. Функция EXP.......................................... 62 5.1.8. Функция LOG.......................................... 63 5.1.9. Функция ABS.......................................... 63 5.1.10. Функция FIX.......................................... 63 5.1.11. Функция INT.......................................... 64 5.1.12. Функция SGN.......................................... 64 5.1.13. Функция RND.......................................... 65 5.1.14. Функция FRE.......................................... 65 5.2. Функции преобразования типов........................... 66 5.2.1. Функция CINT......................................... 66 5.2.2. Функция CSNG......................................... 67 5.2.3. Функция CDBL......................................... 67 5.3. Функции непосредственного обращения к памяти........... 67 5.3.1. Функция PEEK......................................... 68 5.3.2. Функция INP.......................................... 68 5.4. Символьные функции..................................... 69 5.4.1. Функция ASC.......................................... 69 5.4.2. Функция CHR¤......................................... 70 5.4.3. Функция LEN.......................................... 70 5.4.4. Функция MID¤......................................... 71 5.4.5. Функция STRING¤...................................... 72 5.4.6. Функция VAL.......................................... 73 5.4.7. Функция INKEY¤....................................... 73 5.4.8. Функция STR¤......................................... 74 5.4.9. Функция BIN¤......................................... 74 5.4.10. Функция OCT¤......................................... 75 5.4.11. Функция HEX¤......................................... 75 5.5. Вспомогательные функции ввода/вывода................... 76 5.5.1. Функция CSRLIN....................................... 76 5.5.2. Функция POS.......................................... 76 5.5.3. Функция LPOS......................................... 77 5.5.4. Функция EOF.......................................... 77 5.6. Функции оператора PRINT................................ 78 5.6.1. Функция AT........................................... 78 5.6.2. Функция TAB.......................................... 78 5.6.3. Функция SPC.......................................... 79 5.7. Функции, определенные пользователем.................... 80 5.7.1. Функции FN........................................... 80 5.7.2. Функции USR.......................................... 80 ПРИЛОЖЕНИЕ 1. СООБЩЕНИЯ ОБ ОШИБКАХ.......................... 82 ПРИЛОЖЕНИЕ 2. СПИСОК КОМАНД, ОПЕРАТОРОВ И ФУНКЦИЙ........... 86 ПРИЛОЖЕНИЕ 3. ТАБЛИЦА КОДОВ КОИ-7 "ЭЛЕКТРОНИКИ МС 0511".... 94 ПРИЛОЖЕНИЕ 4. ЗАРЕЗЕРВИРОВАННЫЕ В БЕЙСИК-СИСТЕМЕ СЛОВА...... 96 - 6 - У1.00031-01 35 01 1. ОБЩИЕ СВЕДЕНИЯ Программа на языке БЕЙСИК состоит из строк, которые могут содержать операторы и команды. Программа может вводиться и выполняться в одном из двух режимов: косвенном и непосредственном. 1.1. Косвенный режим Чаще всего программа на языке БЕЙСИК записывается в косвенном режиме. В этом случае каждая строка начинается с номера строки. За номером строки следует оператор. Завершается строка управляющим символом <ПС> (перевод строки), получаемым при нажатии на клавишу <ВВОД>. Номер строки должен быть в диапазоне от 0 до 65535. Номер строки выполняет две функции: во-первых, он служит меткой оператора и может быть использован для ссылки на данный оператор; во-вторых, номер строки определяет обычный порядок выполнения операторов. Кроме того, наличие номеров строк облегчает отладку программы, т.к. в сообщении об ошибке указывается номер строки, в которой встретилась ошибка. Любой из операторов языка БЕЙСИК должен размещаться на одной строке, максимальная длина строки - 255 символов. Номер строки используется и при редактировании программы. Ввод строки, номер которой уже существует, приводит к замене прежней строки. Ввод только номера строки ( пустая строка ) вызывает стирание соответствующей строки. 1.2. Непосредственный режим В зависимости от наличия или отсутствия номера строки БЕЙСИК-система отличает строки, вводимые в косвенном режиме, от строк, вводимых для непосредственного выполнения. Операторы, которые начинаются с номера строки, запоминаются, операторы без номера строки выполняются непосредственно по мере их ввода в систему, т.е. осуществляется выполнение операторов в непосредственном режиме. Следовательно, при вводе строки 10 PRINT "ЭЛЕКТРОНИКА МС 0511" строка заносится в текст программы, тогда как ввод строки PRINT "ЭЛЕКТРОНИКА МС 0511" вызывает его непосредственное выполнение и в результате осуществляется немедленный вывод сообщения ЭЛЕКТРОНИКА МС 0511 Непосредственный режим БЕЙСИК-системы позволяет использовать - 7 - У1.00031-01 35 01 вычислительную машину как очень мощный калькулятор. 1.3. Сообщения об ошибках При обнаружении ошибки во время ввода, синтаксического анализа или выполнения программы БЕЙСИК-система выдает сообщение об ошибке. Формат сообщения следующий: <ОШИБ> в строке YYYYY где <ОШИБ> - сокращенное название ошибки, YYYYY - номер строки, содержащей ошибку. В режиме непосредственного выполнения номер строки не указывается. Виды сообщений об ошибках приведены в приложении 1. 1.4. Способ описания языка БЕЙСИК Для формального описания языка используется ряд обозначений, которые необходимо понимать в следующем смысле: - информация, записанная прописными буквами латинского алфавита, постоянна; - информация, записанная буквами русского алфавита и заключенная в треугольные скобки "< >" - переменная; - информация, заключенная в квадратные скобки "[ ]", при использовании может быть опущена; - из параметров, размещенных друг под другом, должен быть выбран только один; - параметр, заключенный в квадратные скобки [<ПАРАМЕТР>...]N, сопровождаемый многоточием, используется для обозначения многократности; N указывает верхний предел возможных повторений параметра; если N не указано, то число повторений параметра не определено. П_Р_И_М_Е_Ч_А_Н_И_Е. В операторах с несколькими операндами в случае, если указаны более дальние операнды, пропущенным операндам должны соответствовать запятые, например: CIRCLE (100,100),50,,,,2 - 8 - У1.00031-01 35 01 1.5. Основные символы языка Все языковые конструкции могут быть выражены с помощью основных символов: - прописные и строчные буквы латинского алфавита: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; - цифры: 0 1 2 3 4 5 6 7 8 9; - специальные символы, приведенные в ТАБЛ 1. СПЕЦИАЛЬНЫЕ СИМВОЛЫ ТАБЛИЦА 1 ------------------------------------------------------------ СИМВОЛ ! НАЗВАНИЕ СИМВОЛА ------------------------------------------------------------ Пробел : Двоеточие = Равно + Плюс - Минус * Звездочка / Наклонная черта ^ Надчеркивание или знак возведения в степень ( Открывающая скобка ) Закрывающая скобка , Запятая ; Точка с запятой . Точка " Кавычки ' Апостроф ¤ Знак денежной единицы < Меньше > Больше ? Знак вопроса @ Знак "относительно" \ Символ целого деления & Амперсанд ! Восклицательный знак % Процент # Знак числа _ Знак подчеркивания ------------------------------------------------------------ БЕЙСИК-система использует ряд слов для обозначения команд, операторов, имен функций и т.п. Изменять значения этих слов пользователь не может, поэтому такие слова называются зарезервированными. К ним в БЕЙСИК-системе относятся: - имена команд, например: LIST, SAVE, LOAD, RUN; - имена операторов и разделителей, например: LET, IF, THEN, GOTO, GOSUB, FOR, NEXT; - имена стандартных и символьных функций, например: SIN, COS, TAN, EXP, LOG, SQR. Полный список зарезервированных слов приведен в приложении 4. - 9 - У1.00031-01 35 01 Символ пробела не является значащим и поэтому может свободно использоваться для улучшения наглядности программы. Исключение составляет случай записи символа пробела в текстовой константе. П_Р_И_М_Е_Ч_А_Н_И_Е. Не допускается использование пробела внутри зарезервированных слов, чисел и имен переменных. 2. ДАННЫЕ И ОПЕРАЦИИ НАД НИМИ 2.1. Константы В БЕЙСИК-системе используются числовые и текстовые константы. 2.1.1. Числовые константы В БЕЙСИК-системе допустимы шесть форм записи числовых констант: 1) Целые константы имеют вид десятичных целых чисел со знаком или без него. Примеры: 123 -2345 2) Вещественные константы, представленные в форме чисел с фиксированной запятой - это положительные или отрицательные числа, имеющие десятичную точку. Примеры: 2.45 -102.36 3) Вещественные константы, записываемые в экспоненциальной форме, состоят из мантиссы и порядка, отделенного от мантиссы буквой E. Примеры: 235.988E-7=.0000235988 2359E6=2359000000 Для обозначения констант двойной точности вместо буквы E используется буква D. 4) Шестнадцатеричные константы обозначаются &H. Основа счисления этих чисел - 16. Для обозначения цифр от 10 до 15 - 10 - У1.00031-01 35 01 используются буквы от A до F. Примеры: &H76 &HA2F 5) Восьмеричные константы обозначаются &O (буква O). Основа счисления для этих чисел - 8, поэтому константы не могут содержать цифр 8 и 9. Примеры: &O347 &O177700 6) Двоичные константы - это двоичные числа, для обозначения которых используется &B. Эти числа содержат только цифры 1 и 0. Примеры: &B01110110 &B10101101 2.1.2. Типы числовых констант По внутреннему представлению числовые константы подразделяются на целые, вещественные одинарной точности и вещественные двойной точности. Для внутреннего представления констант целого типа используется одно слово памяти (16 бит). Это обеспечивает скорость обработки и экономию памяти для их хранения. Целый тип константы указывает знак % после десятичной константы, например: 156% -3000% Целый тип имеют также двоичные, восьмеричные и шестнадцатеричные константы. Вещественные числовые константы могут быть представлены с одинарной или двойной точностью. Для констант одинарной точности хранятся 7 десятичных цифр, а для двойной - 17 и выделяются соответственно 2 или 4 машинных слова. По умолчанию в БЕЙСИК- системе точность для констант принимается одинарной. Константа одинарной точности различается по признакам: - для ее записи используется экспоненциальная форма с буквой E; - при ее записи используется восклицательный знак <!>; - любая запись числа без указания типа. Примеры: 3451415.92 -1.09E-09 23.567! Константа двойной точности различается по признакам: - экспоненциальная форма записи с буквой D; - 11 - У1.00031-01 35 01 - признак числа двойной точности #. Примеры: -1.09432D-09 348.9# 2.1.3. Текстовая константа Формальное описание текстовой константы: <ТЕКСТОВАЯ КОНСТАНТА>::="[<СИМВОЛ>...]255" Текстовая константа - последовательность символов (цепочка знаков), заключенная в кавычки. Количество символов не должно превышать 255. Символ пробела внутри цепочки знаков является значащим. Примеры: "Привет" "ЭЛЕКТРОНИКА МС 0511" 2.2. Переменные 2.2.1. Определение переменной Формальное определение переменной: <ПЕРЕМЕННАЯ>::=<ПРОСТАЯ ПЕРЕМЕННАЯ> <ИНДЕКСИРОВАННАЯ ПЕРЕМЕННАЯ> <ПРОСТАЯ ПЕРЕМЕННАЯ>::=<ИМЯ ПЕРЕМЕННОЙ> <ИНДЕКСИРОВАННАЯ ПЕРЕМЕННАЯ>::= <ИМЯ ПЕРЕМЕННОЙ>(<ИНДЕКС>[,<ИНДЕКС>...]) Переменные, идентифицирующие числовые данные, называются числовыми переменными; переменные, идентифицирующие текстовые данные, называются символьными переменными. Максимальная длина значения символьной переменной может быть 255 символов. Переменные имеют символическое имя - идентификатор, состоящий из любого количества букв латинского алфавита и цифр; из них учитываются только две первые. Имя переменной обязательно должно начинаться буквой. Имя переменной в конце может иметь знак, определяющий тип переменной: ¤ символьные; - 12 - У1.00031-01 35 01 % целые; ! вещественные одинарной точности; # двойной точности. При отсутствии знака считается, что переменная одинарной точности. Целые переменные могут принимать значения из интервала [-32768,32767]. Примеры: L# MINIMUM! K% ABC N¤ Различают простые и индексированные переменные. Простые переменные однозначно обозначают один элемент данных. Индексированные переменные идентифицируют элемент упорядоченного набора данных - массива. Каждый элемент массива идентифицируется именем массива и индексами, заключенными в круглые скобки. Индексы - это целые выражения, принимающие положительные значения. Число индексных выражений должно соответствовать числу измерений массива. Индексные выражения разделяются запятыми. Указание отрицательного индекса приводит к ошибке 5. Для объявления массивов используется оператор DIM. 2.3. Выражения и операции Выражение может состоять из текстовых или числовых констант и переменных или из комбинаций этих элементов, соединенных знаками операций, что приводит при выполнении к вычислению значения выражения. Операции в БЕЙСИК-системе делятся на - арифметические; - отношения; - логические; - функции. 2.3.1. Арифметическое выражение <АРИФМЕТИЧЕСКОЕ ::= [+]<ТЕРМ>[[+]<ТЕРМ>...] ВЫРАЖЕНИЕ> [-] [-] [*] <ТЕРМ>::=<МНОЖИТЕЛЬ>[[/]<МНОЖИТЕЛЬ>...] [^] <ПЕРЕМЕННАЯ> <МНОЖИТЕЛЬ> ::= <ЧИСЛОВАЯ КОНСТАНТА> - 13 - У1.00031-01 35 01 (<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) <ФУНКЦИЯ> Арифметическое выражение используется в операторах присваивания, цикла, условия, печати, определения функции. Элементами арифметического выражения могут быть переменные, функции, числовые константы или комбинации этих элементов, соединенных круглыми скобками, знаками арифметических операций, знаками отношения и логическими операциями. В выражении могут использоваться произвольное число круглых скобок. При нарушении соответствия числа открывающих и закрывающих скобок выдается сообщение об ошибке 2. Далее используется понятие целого выражения. Это арифметическое выражение, принимающее значения из интервала [-32768,32767]. 2.3.2. Арифметические операции Для обозначения арифметических операций используются символы, приведенные в ТАБЛ 2. СИМВОЛЫ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ ТАБЛИЦА 2 ----------------------------------------------------------- СИМВОЛ ! ОБОЗНАЧЕНИЕ ! ПРИМЕР ОПЕРАЦИИ ! ! ----------------------------------------------------------- ^ !Возведение в степень (A в степени B) ! A^B * !Умножение (A умножить на B) ! A*B / !Деление (A делить на B) ! A/B \ !Целочисленное деление (A делить на B)! A\B MOD !Деление по модулю (остаток от ! ! деления A на B) ! A MOD B + !Сложение (A плюс B) ! A+B - !Вычитание (A минус B) ! A-B ( !Открывающая скобка ! ) !Закрывающая скобка !B/(A*(B+C)) ------------------------------------------------------------ При вычислении арифметических выражений соблюдается следующий приоритет выполнения арифметических операций и скобок: 1) действие в скобках; 2) возведение в степень; 3) умножение и деление; 4) целочисленное деление; 5) деление по модулю; 6) сложение и вычитание Примеры: PRINT 10\4 2 Ok PRINT 10.4 MOD 4 - 14 - У1.00031-01 35 01 2 Ok 2.3.3. Операции отношения Операции отношения используются для сравнения двух величин в операторах условного перехода. Можно рассматривать, что результат сравнения принимает два значения целого типа: "ИСТИНА" - во всех битах единицы, что соответствует -1 (минус 1), а "ЛОЖЬ" - во всех битах нули, что соответствует 0. Как "ИСТИНА" трактуется также любое ненулевое значение. Операции отношения приведены в ТАБЛ 3. ТАБЛИЦА 3 --------------------------------------------- ! ОПЕРАЦИЯ ! ПРОВЕРЯЕМОЕ ! ПРИМЕР ! ! ! ОТНОШЕНИЕ ! ! !----------!---------------!----------------! ! = ! Равенство ! X=Y ! ! <> >< ! Неравенство ! X<>Y или X><Y ! ! = ! Меньше ! X<Y ! ! = ! Больше ! X>Y ! ! = ! Меньше или ! X<=Y ! ! = ! равно ! ! ! = ! Больше или ! X>=Y ! ! = ! Равно ! ! --------------------------------------------- Операции отношений являются менее приоритетными по отношению к арифметическим. Например, значение выражения X+Y=X*Y равно минус 1, когда X+Y равно X*Y. 2.3.4. Логические операции. Логические операции используются для работы с наборами битов, представленными в виде 16-битных целых чисел. Значение каждого бита результата зависит от значений соответствующих битов операндов. Приведем таблицы, определяющие логические операции: NOT X NOT X 0 1 1 0 - 15 - У1.00031-01 35 01 AND X Y X AND Y 0 0 0 0 1 0 1 0 0 1 1 1 OR X Y X OR Y 0 0 0 0 1 1 1 0 1 1 1 1 XOR X Y X XOR Y 0 0 0 0 1 1 1 0 1 1 1 0 EQV X Y X EQV Y 0 0 1 0 1 0 1 0 0 1 1 1 IMP X Y X IMP Y 0 0 1 0 1 1 1 0 0 1 1 1 Результат логических операций можно рассматривать как "ИСТИНУ" (ненулевой результат) или "ЛОЖЬ" (нуль), поэтому их удобно применять для объединения нескольких операций отношения в операторах условного перехода. Примеры: IF A=200 AND F<4 THEN 80 IF I=10 OR K>=0 THEN 50 IF NOT P THEN 100 В смешанных выражениях логические операции менее приоритетны, чем арифметические и операции отношений. Очередность выполнения логических операций осуществляется согласно следующему приоритету: 1. NOT ; 2. AND ; 3. OR ; 4. XOR и EQV ; 5. IMP . Примеры работы логических операций: - 16 - У1.00031-01 35 01 В десятичном В двоичном представлении представлении 63 111111 AND 16 10000 = 16 10000 -1 1111111111111111 AND 8 1000 = 8 1000 4 100 OR 2 10 = 6 110 2.3.5. Функции Функции - это заранее определенные операции над данными. БЕЙСИК-система имеет "встроенные" функции, которые называются стандартными. Примером таких функций могут служить SQR( ) - квадратный корень или SIN( ) - синус. Более подробно стандартные функции описываются далее. 2.3.6. Преобразование типов Преобразование типов в БЕЙСИК-системе определяют несколько правил: 1) если значение арифметического выражения одного типа присваивается переменной другого типа, то производится преобразование в тип переменной. Пример: 10 A%=23.42 20 PRINT A% RUN 23 Ok 2) во время вычисления значения арифметического выражения все операнды преобразуются в один тип данных - тот, к которому относится операнд, имеющий наибольшую точность. - 17 - У1.00031-01 35 01 Пример: 10 D#=6/7! 20 PRINT D# RUN .85714285714285714 Ok (арифметическое выражение было подсчитано с двойной точностью). Пример: 10 D!=6/7! 20 PRINT D! RUN .8571429 Ok (при присвоении результата арифметического выражения переменной D! произошло округление из-за разницы в типах). 3) логические операции преобразуют свои операнды в целый тип и дают целочисленный результат. 4) при преобразовании типов из двойной точности в одинарную происходит округление. При преобразовании в целый тип отбрасывается дробная часть. Пример: 10 C%=55.88 20 C!=1.23456789 30 PRINT C% 40 PRINT C! RUN 55 1.234568 Ok При преобразовании в целый тип значения, выходящего из пределов [-32768,32767], происходит ошибка 6. 2.3.7. Операции над строками символов Для работы с символьными переменными в БЕЙСИК-систему включен ряд функций (подробное описание - далее). Кроме того, символьные данные могут быть объединены операцией + (конкатенация строк). Пример: 10 A¤="ИМЯ" 20 B¤=" ФАЙЛА" 30 PRINT A¤+B¤ 40 PRINT "НОВОЕ "+ A¤+B¤ RUN ИМЯ ФАЙЛА НОВОЕ ИМЯ ФАЙЛА Ok - 18 - У1.00031-01 35 01 Строки можно сравнивать операциями отношений = <> >< < > <= >= Сравнение производится над кодами КОИ-7, взятыми из соответствующих строк. Если все коды совпадают, значит строки равны. Если коды КОИ-7 символов различаются, то меньше та строка, у которой код рассматриваемого символа меньше. Если одна строка кончается, а другая - нет, то более короткая строка меньше (пробелы учитываются). Примеры (результат всех выражений - "ИСТИНА"): "AA" <> "AB" "A" = "A" "X&" > "X " "CL " > "CL" B¤ < "9.12.84" , ЕСЛИ B¤="8.12.8" "AAC" < "ABB" 3. КОМАНДЫ СИСТЕМЫ Команды БЕЙСИКа служат для связи программиста с системой. Они не имеют номера вводимой строки и выполняются только в непосредственном режиме. 3.1. Команды пуска программы 3.1.1. Команда RUN Команда начинает выполнение программы. Формат: RUN [<АРГУМЕНТ>] Команда RUN позволяет выполнить загруженную в ОЗУ программу. По этой команде сначала создается объектный код программы, производится распределение памяти, а затем объектный код запускается на выполнение. Обычно выполнение начинается с первой строки программы. Если используется аргумент, то он указывает, с какой строки программы следует начать ее выполнение. При каждом новом вводе команды RUN старый объектный код и таблица имен полностью стираются и формируются заново. Пример: RUN RUN 100 - 19 - У1.00031-01 35 01 (начинает выполнение программы со строки с номером 100). 3.1.2. Команда CONT Команда продолжает выполнение программы с того места, на котором оно было прервано. Формат: CONT Выполнение программы приостанавливается всякий раз, когда встречаются операторы STOP, END или при нажатии клавиши <СТОП>. Команда CONT продолжает выполнение программы с того места, на котором оно было прервано. На самом деле выполняется команда GOTO по номеру "старой" строки. Если после прерывания программы производятся действия, после которых ее выполнение невозможно (например, была отредактирована строка текста программы), попытка продолжить ее выполнение при помощи команды CONT приводит к ошибке 17. Команда CONT в сочетании с оператором STOP и клавишей <СТОП> широко используется во время отладки программы. После приостановки программы можно распечатать текущие значения переменных, даже изменить их и продолжить выполнение программы. Пример: 1050 STOP RUN СТОП в строке 1050 Ok ? A¤ ПЕРВЫЙ Ok CONT 3.1.3. Клавиша (команда) <СУ> <A> Клавишами <СУ> <A> программу можно выполнить в пошаговом режиме, т. е., по одной строке (см. Руководство оператора. У1.00031-01 34 02). - 20 - У1.00031-01 35 01 3.1.4. Команда SYSTEM Команда осуществляет переход в мониторную систему микро-ЭВМ "Электроника МС 0511". Формат: SYSTEM Команда используется для передачи управления мониторной системе микро-ЭВМ. 3.2. Хранение программ на кассетной магнитной ленте Тексты программ пользователей "Электроника МС 0511" хранятся на кассетной магнитной ленте. Описываемые дальше команды предназначены для чтения (записи) текста программы с (на) магнитной ленты. Также имеются команды для хранения на магнитной ленте двоичной информации. Для идентификации программ используется спецификация файла - текстовая константа, содержащая символическое имя файла. Имя файла может состоять не более чем из шести символов. В командах BLOAD и BSAVE границы областей памяти указываются при помощи адреса - целой константы из интервала [0,65535]. Для удобства адрес также можно задавать шестнадцатеричными, восьмеричными и двоичными константами. 3.2.1. Команда LOAD Команда загружает текст программы пользователя (в кодах КОИ-7). Формат: LOAD <СПЕЦИФИКАЦИЯ ФАЙЛА>[,R] При наличии R программа после ее загрузки запускается на выполнение. Команда используется для загрузки текста программы, размещенного на кассетной магнитной ленте с помощью команды SAVE. Наличие параметра R приводит к немедленному запуску программы после ее загрузки. Текст программы представлен на магнитной ленте в кодах КОИ-7. Пример: LOAD "MOD2",R MOD2 .ASC 003 Ok - 21 - У1.00031-01 35 01 3.2.2. Команда SAVE По этой команде текст программы пользователя записывается на кассетную магнитную ленту ( в кодах КОИ-7). Формат: SAVE <СПЕЦИФИКАЦИЯ ФАЙЛА> Эта команда предназначена для записи текста программы на кассетную магнитную ленту в кодах КОИ-7. Главное применение команды SAVE - сохранить текст программы пользователя на магнитной ленте. Пример: FILES "ПЕРВЫЙ.COD" ПЕРВЫЙ.COD Ok SAVE "ВТОРОЙ" Ok 3.2.3. Команда MERGE Команда объединяет текст программы в памяти ЭВМ с текстом программы, загружаемым с кассетной магнитной ленты. Формат: MERGE <СПЕЦИФИКАЦИЯ ФАЙЛА> При выполнении этой команды загружается программа с магнитной ленты и объединяется с программой, хранящейся в памяти. Загружаемая программа должна быть в формате КОИ-7. В случае совпадения номера загружаемой строки с номером строки, хранящейся в памяти, при объединении текстов оставляется загруженная строка. Команда позволяет при помощи DELETE, RENUM и SAVE запомнить часть одной программы, а потом объединить ее с другой программой. MERGE всегда портит объектный код и аннулирует все определения имен, что требует новой компиляции всей программы. Наличие этой команды в системе позволяет хранить на магнитной ленте набор типовых программ. Пример: LOAD "ПЕРВЫЙ" ПЕРВЫЙ.ASC 005 Ok MERGE "ВТОРОЙ" ВТОРОЙ.ASC 001 Ok - 22 - У1.00031-01 35 01 3.2.4. Команда CLOAD Команда загружает с кассетной магнитной ленты программу пользователя, записанную во внутреннем формате. Формат: CLOAD <СПЕЦИФИКАЦИЯ ФАЙЛА> Команда загружает с магнитной ленты текст программы, хранящейся во внутреннем представлении системы. Текст программы должен быть записан командой CSAVE. Пример: CLOAD "ПЕРВЫЙ" ПЕРВЫЙ.COD Ok 3.2.5. Команда CSAVE Команда записывает текст программы на магнитную ленту во внутреннем формате системы. Формат: CSAVE <СПЕЦИФИКАЦИЯ ФАЙЛА> По этой команде текст программы записывается во внутреннем представлении системы на магнитную ленту. Пример: CSAVE "1001" Ok 3.2.6. Команда FILES Команда предназначена для поиска файла, записанного на кассетную магнитную ленту. Формат: FILES [<СПЕЦИФИКАЦИЯ ФАЙЛА>] Команда FILES позволяет вывести на экран список файлов на магнитной ленте. Имя нужного файла указывается аргументом. Команду удобно использовать при указании свободного участка магнитной ленты для записи нового файла. Как и команда LOAD, эта команда при чтении выдает на экран - 23 - У1.00031-01 35 01 имена всех обнаруженных файлов и их типы. Если имя файла не указано, то команда просто выдает на экран имена всех считанных файлов. При выполнении команды содержание ОЗУ не меняется. Выполнение команды можно прервать нажатием клавиши <СТОП>. Пример: FILES "ПЕРВЫЙ" ПЕРВЫЙ.DAT Ok SAVE "ВТОРОЙ" Ok 3.2.7. Команда BLOAD Загружает "двоичный" файл (машинный код или данные) в память. Формат: BLOAD <АРГУМЕНТ1>[,R][<АРГУМЕНТ2>] <АРГУМЕНТ1>::= СПЕЦИФИКАЦИЯ ФАЙЛА; R ЯВЛЯЕТСЯ ПРИЗНАКОМ НЕМЕДЛЕННОГО ЗАПУСКА ПРОГРАММЫ ПОСЛЕ ЕЕ ЗАГРУЗКИ; <АРГУМЕНТ2>::= АДРЕС НАЧАЛЬНОЙ ЗАГРУЗКИ ФАЙЛА. Команда загружает содержимое файла, записанного на кассетную магнитную ленту с помощью команды BSAVE. В файле хранятся начальный адрес и длина массива, согласно которым содержимое файла размещается в памяти машины. При наличии второго аргумента, т.е. R, после загрузки содержимого файла происходит немедленный запуск программы с начального адреса загрузки. Указав третий аргумент, можно разместить содержимое файла в памяти, начиная с произвольного адреса оперативной памяти. При отсутствии аргумента R для указания АРГУМЕНТА 2 дополнительная запятая не требуется. Загрузку можно прервать нажатием клавиши <СТОП>. Во время загрузки на экран выдается имя файла. Команда позволяет загрузить программы в машинном представлении в оперативную память с целью их дальнейшего использования посредством функции USR. Пример: CLEAR 200,&HF40 Ok BLOAD "DATA",&HF40 DATA .BIN Ok BLOAD "PROG",R PROG .BIN (файл PROG загружен и запущен с начала). - 24 - У1.00031-01 35 01 3.2.8. Команда BSAVE Записывает содержимое оперативной памяти на кассетную магнитную ленту. Формат: BSAVE <АРГУМЕНТ1>,<АРГУМЕНТ2>,<АРГУМЕНТ3> <АРГУМЕНТ1>::= СПЕЦИФИКАЦИЯ ФАЙЛА; <АРГУМЕНТ2>::= АДРЕС НАЧАЛА СОХРАНЯЕМОЙ ОБЛАСТИ ПАМЯТИ; <АРГУМЕНТ3>::= АДРЕС КОНЦА СОХРАНЯЕМОЙ ОБЛАСТИ. При выполнении этой команды содержимое оперативной памяти, начиная с адреса, указанного АРГУМЕНТОМ 2, и кончая адресом, указанным АРГУМЕНТОМ 3, сохраняется на кассетной магнитной ленте в файле, имя которого указано АРГУМЕНТОМ 1. При отсутствии имени файла выдается сообщение об ошибке 5, при отсутствии аргументов - об ошибке 2. Выполнение команды можно прервать нажатием клавиши <СТОП>. Кроме содержимого памяти на магнитную ленту записываются начальный адрес и длина области оперативной памяти. В основном эта команда дает возможность сохранять содержимое оперативной памяти на магнитной ленте в двоичном формате. Особенно полезно ее использование при сохранении программ, написанных на машинном языке и используемых в БЕЙСИК-системе при помощи функции USR. Пример: BSAVE "PROG",&O10000,&O20000 Ok 3.3. Работа с текстами программ При работе с текстами программ используется понятие номера строки - целой константы из интервала от 0 до 65535. Вместо номера строки можно использовать символ ".", означающий "текущую" строку. "Текущая строка" - это строка, которая последней была редактирована, выведена на экран или строка, в которой была обнаружена ошибка. - 25 - У1.00031-01 35 01 3.3.1. Команда LIST Команда выводит текст программы на экран или печатающее устройство. Формат: [L]LIST [<АРГУМЕНТ1>][-[<АРГУМЕНТ2>]] <АРГУМЕНТ1>::= НОМЕР ПЕРВОЙ СТРОКИ ВЫВОДИМОГО ФРАГМЕНТА ПРОГРАММЫ; <АРГУМЕНТ2>::= НОМЕР ПОСЛЕДНЕЙ СТРОКИ; L УКАЗЫВАЕТ, ЧТО ТЕКСТ ПРОГРАММЫ БУДЕТ ВЫВОДИТЬСЯ НА ПЕЧАТАЮЩЕЕ УСТРОЙСТВО. Команда LIST выводит текст программы на экран, а команда LLIST - на печатающее устройство. При выводе текста за номером строки идет пробел, а далее непосредственно сам текст строки. Если оба аргумента опущены, то выводится весь текст программы. Если задан только один аргумент, то выводится строка с указанным номером. Тире перед номером строки (или после него) указывает, что надо выводить весь текст до (или после) строки с указанным номером, включая эту строку. Если заданы оба аргумента, то выводятся все строки с номерами из указанного интервала. Для указания номера "текущей" строки можно использовать символ ".". Следует отметить, что эта команда не проверяет наличие в программе строк с указанными номерами, поэтому в таком случае сообщения об ошибке не выдается. Однако, если в программе существуют строки с номерами из заданного интервала, то они выводятся на указанное устройство. Если строк с указанными номерами нет в программе, то выполнение команды оканчивается и выводится приглашение "Ok". Вывод строк можно приостановить одновременным нажатием на клавиши <СУ> и <@>. Продолжение действий - нажатие любой клавиши. Как всегда, любые действия прерывает клавиша <СТОП>. Пример: 200 REM ПОСЛЕДНЯЯ 150 REM СРЕДНЯЯ 100 REM ПЕРВАЯ LIST . 100 REM ПЕРВАЯ Ok LIST -175 100 REM ПЕРВАЯ 150 REM СРЕДНЯЯ Ok - 26 - У1.00031-01 35 01 3.3.2. Команда DELETE Команда удаляет строки текста программы. Формат: DELETE [<АРГУМЕНТ1>][-[<АРГУМЕНТ2>]] <АРГУМЕНТ1>::= НОМЕР ПЕРВОЙ СТРОКИ УДАЛЯЕМОГО ФРАГМЕНТА ПРОГРАММЫ; <АРГУМЕНТ2>::= НОМЕР ПОСЛЕДНЕЙ СТРОКИ. По этой команде удаляются строки, начиная с номера, указанного АРГУМЕНТОМ 1, до номера, указанного АРГУМЕНТОМ 2. Если АРГУМЕНТ 1 опущен, то вместо него берется номер первой строки программы. Аналогично, если опущен аргумент 2, то вместо него берется номер последней строки программы. Если в качестве АРГУМЕНТА 1 (или АРГУМЕНТА 2) задается ".", то берется "текущая" строка программы. В отличие от команды LIST, если в тексте программы строка с указанным номером не существует, то выдается сообщение об ошибке 8. ПРИМЕЧАНИЕ: эта команда может удалить всю программу или ее часть, поэтому пользоваться ею надо очень осторожно. Пример: DELETE 100-200 Ok DELETE . Ok DELETE -5000 Ok DELETE 50-. Ok DELETE 135 Ok 3.3.3. Команда RENUM Команда перенумеровывает строки текста программы. Формат: RENUM [<АРГУМЕНТ1>][,< АРГУМЕНТ2>][,< АРГУМЕНТ3>] < АРГУМЕНТ1>::= НОМЕР ПЕРВОЙ СТРОКИ ПЕРЕНУМЕРОВАННОГО ФРАГМЕНТА; < АРГУМЕНТ2>::= НОМЕР СТРОКИ, С КОТОРОГО НАЧИНАЕТСЯ ПЕРЕНУМЕРОВЫВАЕМЫЙ ФРАГМЕНТ; < АРГУМЕНТ3>::= ШАГ ПЕРЕНУМЕРАЦИИ, ЦЕЛАЯ КОНСТАНТА ИЗ ИНТЕРВАЛА [0,65535]. По умолчанию АРГУМЕНТ 1 и АРГУМЕНТ 3 равны 10, а АРГУМЕНТ 2 - 27 - У1.00031-01 35 01 равен номеру первой строки программы. Вместо АРГУМЕНТА 1 и АРГУМЕНТА 2 можно использовать точку - она указывает на номер "текущей" строки. Эта команда применяется для изменения номеров строк в программе. RENUM также проверяет, все ли строки, номера которых указаны в операторах, действительно существуют. Если обнаружено, что строки с указанным номером в программе нет, то выдается сообщение об ошибке 8. Эта команда перенумеровывает строки программы, начиная со строки с номером, заданным АРГУМЕНТОМ 2. Номеру этой строки присваивается значение АРГУМЕНТА 1, а последующие строки нумеруются с шагом, заданным АРГУМЕНТОМ 3. Пример: RENUM 60,55 RENUM ,,5 3.3.4. Команда AUTO Команда переводит в режим автоматической нумерации строк для ввода текста программы. Формат: AUTO [<АРГУМЕНТ1>][,<АРГУМЕНТ2>] <АРГУМЕНТ1>::= НАЧАЛЬНЫЙ НОМЕР СТРОКИ; <АРГУМЕНТ2>::= ПРИРАЩЕНИЕ, ЧИСЛО ИЗ ИНТЕРВАЛА [0,65535]. Команда AUTO позволяет задавать автоматический ввод номеров строк при вводе текста программы, т.е., при нажатии клавиши <ВВОД>, генерируется и выводится на экран следующий номер строки. номера строк увеличиваются с шагом, равным значению второго аргумента. При отсутствии первого, второго или обоих аргументов считается, что они равны 10. Точка, указанная на месте первого аргумента, рассматривается как номер "текущей" строки. Если окажется, что строка с очередным сгенерированным номером в тексте программы уже существует, этот текст выводится на экран. После этого он может быть отредактирован и введен нажатием клавиши <ВВОД>. Если редакции строки не требуется, то, нажав клавишу <ВВОД>, можем перейти к вводу следующей строки. Для окончания режима AUTO достаточно нажать клавишу <СТОП> или <СУ> и <C> одновременно, что возвращает систему в непосредственный режим. Пример: 110 END AUTO 100 100 PRINT "ПРИМЕР" 110 END (НАЖИМАЙТЕ КЛАВИШУ "ВВОД") - 28 - У1.00031-01 35 01 120 (НАЖИМАЙТЕ КЛАВИШИ <СУ> И <C> ОДНОВРЕМЕННО) LIST 100 PRINT "ПРИМЕР" 110 END Ok 3.3.5. Команда NEW По этой команде удаляется программа пользователя. Формат: NEW Команда используется для очистки всех переменных программы (оператор CLEAR) и удаления программы из памяти. 4. ОПЕРАТОРЫ Операторы языка изменяют значения переменных, естественный порядок вычислений согласно алгоритму решения задачи, резервируют память под переменные и константы и т.д. 4.1. Основные операторы К основным операторам относятся: операторы присваивания, безусловного и условного перехода, цикла, обращения к подпрограмме и др. В операторах перехода используются номера строк - целые константы из интервала [0,65535]. Использование точки (".") вместо номера строки недопустимо. 4.1.1. Оператор LET Это основной оператор для присвоения новых значений переменным. Формат: [LET] <АРГУМЕТ>=<ВЫРАЖЕНИЕ> <АРГУМЕНТ>::=<ПЕРЕМЕННАЯ> <ФУНКЦИЯ MID¤> - 29 - У1.00031-01 35 01 Оператор LET служит для присвоения значения выражения, находящегося справа от знака равенства, переменной, находящейся слева от этого знака. Тип выражения должен совпадать с типом переменной. При присваивании, если это необходимо, производится преобразование типов переменных. Попытка присвоить символьное значение числовой переменной или наоборот приведет к ошибке 13. Заметим, что слово LET в этом операторе не обязательно. Пример: 10 LET X=1 20 Y=2*3 30 A¤=B¤+" " 40 LET D¤=A¤ 50 MID¤(C¤,1%,2%)=D¤ 4.1.2. Оператор GOTO Оператор передает управление строке с указанным номером. Формат: GOTO <НОМЕР СТРОКИ> Оператор перехода GOTO служит для изменения естественного порядка выполнения программы (т.е., выполнения в порядке возрастания номеров строк). При выполнении оператора GOTO управление передается на строку с указанным номером. Если строка с указанным номером отсутствует, выдается сообщение об ошибке 8. Пример: 10 INPUT X 20 IF X<>0 THEN GOTO 40 30 END 40 PRINT X 50 GOTO 10 4.1.3. Оператор GOSUB Оператор передает управление подпрограмме. Формат: GOSUB <НОМЕР СТРОКИ> Оператор GOSUB используется для вызова подпрограммы - группы операторов, которая начинается с указанного номера строки и заканчивается оператором RETURN. Подпрограмма может находиться в любом месте программы и вызываться сколько угодно раз. RETURN возвратит управление оператору, следующему за вызвавшим подпрограмму оператором GOSUB. - 30 - У1.00031-01 35 01 При отсутствии строки с указанным номером выдается сообщение об ошибке 8. Вход в подпрограмму не через GOSUB вызывает ошибку 3. 4.1.4. Оператор RETURN Оканчивает подпрограмму и осуществляет возврат к следующему за GOSUB оператору. Формат: RETURN RETURN осуществляет возврат к оператору, который находится непосредственно за оператором, вызвавшим подпрограмму. После возвращения все незаконченные циклы FOR-NEXT в подпрограмме завершаются, т.е., вся информация о них "забывается", например: 10 GOSUB 100 20 END 100 FOR I=1 TO 10 110 PRINT "KUKU" 120 RETURN RUN KUKU Ok В подпрограмме возможны вложенные вызовы других подпрограмм. Дополнительной возможностью оператора RETURN является использование в нем аргумента, указывающего оператор, которому должно передаться управление после завершения подпрограммы, что позволяет вернуться необязательно к месту вызова. - 31 - У1.00031-01 35 01 Пример: 10 I=1 20 GOSUB 100 30 I=2 40 GOSUB 100 50 END 100 REM ПОДПРОГРАММА 110 PRINT "SUB";I 120 RETURN 4.1.5. Оператор IF Оператор IF выполняет одну из ветвей в зависимости от условия. Формат: THEN <ОПЕРАТОР> <ОПЕРАТОР> IF <АРГУМЕНТ> [ ELSE ] THEN <НОМЕР СТРОКИ> <НОМЕР СТРОКИ> GOTO <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ УСЛОВИЕ; <ОПЕРАТОР>::= ЛЮБОЙ ОПЕРАТОР БЕЙСИКА; <НОМЕР СТРОКИ>::= НОМЕР СУЩЕСТВУЮЩЕЙ СТРОКИ. Оператор вычисляет значение аргумента и преобразовывает его в целый тип. Нулевой результат считается как "ложь", ненулевой - "истина". Если условие оказывается "истина", то выполняется указанный оператор или происходит переход к строке с указанным номером. В случае номера строки вместо слова THEN можно использовать слово GOTO. Если аргумент принимает значение "ложь", то выполняется ветвь ELSE или управление сразу же передается следующей строке, если ветвь ELSE отсутствует. В качестве <ОПЕРАТОРА> может быть любой оператор БЕЙСИКА, даже другой оператор IF. В качестве условия обычно используются выражения, соединенные операциями отношения и логическими операциями. Пример: 10 INPUT A,B,C 20 IF A<B THEN PRINT A;" < ";B 30 I%=NOT ( B<C AND A<C ) 40 IF I% GOTO 10 ELSE PRINT A;"И ";B;"< ";C - 32 - У1.00031-01 35 01 4.1.6. Оператор FOR Оператор FOR вместе с оператором NEXT организует циклическое выполнение группы операторов. Формат: FOR <ПАРАМЕТР>=<АРГУМЕНТ1> TO <АРГУМЕНТ2> [STEP <АРГУМЕНТ3>] <ПАРАМЕТР>::=ЧИСЛОВАЯ ПЕРЕМЕННАЯ (СЧЕТЧИК ПОВТОРЕНИЙ ЦИКЛА); <АРГУМЕНТ1>::=АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ (НАЧАЛЬНОЕ ЗНАЧЕНИЕ <ПАРАМЕТРА>); <АРГУМЕНТ2>::=АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ КОНЕЦ ПОВТОРЕНИЙ ЦИКЛА; <АРГУМЕНТ3>::=АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ (ПРИРАЩЕНИЕ <ПАРАМЕТРА>, ПО УМОЛЧАНИЮ РАВНО 1). Во время первого выполнения цикла значение АРГУМЕНТА 1 присваивается ПАРАМЕТРУ цикла. Выполнение операторов, входящих в цикл, продолжается до появления оператора NEXT. После этого значение ПАРАМЕТРА увеличивается (или уменьшается, если значение АРГУМЕНТА 3 отрицательное) на значение АРГУМЕНТА 3 и сравнивается со значением АРГУМЕНТА 2. Если значение ПАРАМЕТРА больше (меньше, если АРГУМЕНТ 3 отрицательный) значения АРГУМЕНТА 2, то выполняются следующие за NEXT операторы, в противном случае повторяется выполнение операторов, находящихся между операторами FOR и NEXT. Допустимы вложенные циклы. Они не должны пересекаться, т. е. NEXT внутреннего цикла должен появиться раньше, чем NEXT наружного цикла. Возможен неестественный выход из цикла, при помощи операторов перехода, минуя оператор NEXT. Вход в цикл, минуя оператор FOR, не допускается. 4.1.7. Оператор NEXT Определяет конец операторов цикла. Формат: NEXT [<ПАРАМЕТР>[,< ПАРАМЕТР >...]] <ПАРАМЕТР>::= ЧИСЛОВАЯ ПЕРЕМЕННАЯ, СООТВЕТСТВУЮЩАЯ ПАРАМЕТРУ ОПЕРАТОРА FOR. Оператор NEXT выполняет приращение параметра цикла, проверяет достижение предельного значения и, в зависимости от этого, осуществляет выход из цикла. - 33 - У1.00031-01 35 01 NEXT с параметром используется с целью указания, к какому FOR он относится. NEXT со списком параметров, разделенных запятыми, используется для заканчивания в одном месте нескольких вложенных циклов. В таком случае первая переменная в списке должна принадлежать самому внутреннему циклу, а последняя - наружному. При заканчивании наружного цикла информация о внутренних циклах теряется, например: 10 FOR I=1 TO 2 20 FOR J=1 TO 10 30 PRINT J 40 NEXT I RUN 1 1 Ok Тело цикла должно размещаться в одной программной секции, т. е. цикл, объявленный в главной программе, нельзя заканчивать в подпрограмме и наоборот. Вход в цикл не через оператор FOR вызывает ошибку 1. Пример: 10 FOR X=1 TO 10 20 FOR Y=10 TO 1 STEP -2 30 PRINT Y 40 NEXT Y 50 PRINT TAB(3);X 60 NEXT 4.1.8. Оператор ON Оператор осуществляет ветвление в зависимости от значения выражения. Формат: ON <ВЫРАЖЕНИЕ> [GOTO ] <СПИСОК> GOSUB <ВЫРАЖЕНИЕ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ ИНТЕРВАЛА [0,32767].; <СПИСОК>::= СПИСОК НОМЕРОВ СУЩЕСТВУЮЩИХ СТРОК, РАЗДЕЛЕННЫХ ЗАПЯТЫМИ. Этот оператор позволяет переход на несколько строк. При выборе номера строки вычисляется значение выражения. Если результат равен нулю или больше,чем число номеров строк в списке, то управление передается следующему оператору. Если значение выражения соответствует номеру строки из списка (считая слева 1, 2 и т.д.), то этот номер строки употребляется оператором GOSUB или GOTO. Если выполняется оператор GOSUB <НОМЕР СТРОКИ>, то оператор RETURN возвращает управление оператору, следующему за оператором ON. Этот оператор употребляется в том случае, если есть ряд - 34 - У1.00031-01 35 01 задач, которые выбираются в зависимости от того, какое значение принимает выражение. Если задачи короткие и связаны с значением выражения, то употребляется ON GOTO. Если же эти задачи больше и, возможно, связаны с другим оператором ON или к ним обращаются с других мест программы, то употребляется оператор ON GOSUB, и каждую задачу нужно оформить в виде подпрограммы. Отрицательное значение выражения приводит к ошибке 5. Пример: 10 A¤=INKEY¤ 20 IF A¤="" THEN 10 30 ON ASC(A¤)-64% GOSUB 100,200,300 40 GOTO 10 4.1.9. Оператор STOP Временно останавливает выполнение программы. Формат: STOP Оператор STOP используется для организации диалога при отладке программ. При выполнении оператора STOP программа останавливается, на терминале индицируется сообщение Стоп в строке YYYYY Ok и ЭВМ переходит в непосредственный режим. После приостановки программы можно распечатать или даже изменить значения переменных. Командой CONT выполнение программы может быть продолжено с оператора, следующего за оператором STOP. После редактирования текста программы попытка возобновить выполнение программы приводит к ошибке 17. В этом случае для пуска программы используется команда RUN. Пример: 10 A=10 20 STOP 30 A=20 40 PRINT A RUN Стоп в строке 20 PRINT A 10 Ok CONT 20 Ok - 35 - У1.00031-01 35 01 4.1.10. Оператор END Заканчивает выполнение программы и закрывает файлы. Формат: END Оператор прекращает выполнение программы и осуществляет возврат в непосредственный режим. END может находиться в любом месте программы. Оператор удобен для отделения главной программы от подпрограмм во избежание передачи управления подпрограмме не через оператор GOSUB. - 36 - У1.00031-01 35 01 Пример: 10 GOSUB 30 20 END 30 PRINT A¤ 40 RETURN 4.1.11. Оператор REM Обозначает комментарии в тексте программы. Формат: REM [<ТЕКСТ>] ' <ТЕКСТ> - ЛЮБАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ. Оператор служит для включения комментария в текст программы с целью удобства чтения алгоритма, для идентификации и определения порядка работы программ, а также в качестве пустого оператора. Весь текст за словом REM игнорируется. Другой способ определения замечаний в тексте программы - это апостроф ("'"). В отличии от REM, для которого необходима отдельная строка программы, апостроф может использоваться после любого другого оператора, автоматически заканчивая его. Ввиду того, что комментарий занимает дополнительное место в оперативной памяти, уменьшается место для хранения других операторов. Пример: 10 REM ПОДПРОГРАММА ВВОДА 200 X=1 ' ПЕРЕМЕННАЯ ЦИКЛА 4.2. Операторы описания, резервирования памяти и установки начальных значений Операторы резервирования памяти служат резервированию оперативной памяти для массивов и постоянных величин. Память для переменных резервируется в локальной или общей области данных. Память для постоянных величин резервируется в области генерируемой программы при компиляции. Для резервирования памяти переменным и массивам используется оператор DIM, для резервирования памяти постоянным величинам - DATA. Для присвоения переменным значений постоянных величин используются операторы READ и RESTORE. - 37 - У1.00031-01 35 01 4.2.1. Оператор DIM Оператор DIM резервирует память для переменных и массивов, придавая им нулевые значения. Формат: DIM <АРГУМЕНТ>[,<АРГУМЕНТ>...] <АРГУМЕНТ>::= ДОПУСТИМОЕ ИМЯ ПЕРЕМЕННОЙ, ЗА КОТОРЫМ МОЖЕТ СЛЕДОВАТЬ ЗАКЛЮЧЕННЫЙ В СКОБКИ СПИСОК МАКСИМАЛЬНЫХ ЗНАЧЕНИЙ ИНДЕКСОВ МАССИВА. Этот оператор обычно используется для определения массивов, но может определять и отдельные переменные. Каждый массив имеет заданное в списке число индексов. Максимальное значение индекса указывается целым выражением, принимающим значения из интервала [0,255]. Возможно неявное определение переменных и массивов. Такое определение происходит каждый раз при появлении имени неопределенной переменной. Простые переменные обычно определяются именно таким способом. При появлении имени индексированной переменной определяется одномерный массив с максимальным значением индекса 10. Неявное определение массива невозможно в непосредственном режиме и вызывает ошибку 12. Попытка повторного определения уже объявленного или определенного по умолчанию массива приводит к ошибке 10. Если не хватает оперативной памяти для определения массива, выдается сообщение об ошибке 7. Пример: 10 DIM X,I%,Z(5,20,3),A¤(30) 4.2.2. Оператор KEY Этот оператор изменяет значения функциональных клавиш. Формат: KEY <АРГУМЕНТ1>,<АРГУМЕНТ2> <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ НОМЕР ФУНКЦИОНАЛЬНОЙ КЛАВИШИ, ЧИСЛО ИЗ ИН- ТЕРВАЛА [1,10]; <АРГУМЕНТ1>::= СИМВОЛЬНОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ ЗНАЧЕНИЕ КЛЮЧА (ИСПОЛЬЗУЮТСЯ ТОЛЬКО ПЕРВЫЕ 16 СИМВОЛОВ). Оператор используется для изменения значений функциональных ключей, установленных по умолчанию. Первые 16 символов АРГУМЕНТА 2 присваиваются ключу, указанному АРГУМЕНТОМ 1. В служебной строке экрана высвечиваются первые символы - 38 - У1.00031-01 35 01 значений функциональных клавиш. Оператор KEY производит соответствующие изменения служебной строки. Для ввода символа "ПС" или кавычек можно воспользоваться функцией CHR¤. Если значение первого аргумента выходит за пределы допустимого интервала, получается ошибка 5. По умолчанию функциональные клавиши имеют следующие значения: COLOR AUTO GOTO LIST RUN <ВК> COLOR 8,2,2 <ВК> CLOAD " CONT <ВК> LIST. <ПС> <АР2>A<АР2>A <СБР> RUN <ВК> (управляющий символ "СБР" имеет восьмеричный код 14 и означает очистку экрана). Пример: KEY 1,"LINE " KEY 2,"SAVE "+CHR¤(34) KEY 3,"PRINT PI"+CHR¤(13) 4.2.3. Оператор CLEAR Очищает значения переменных, резервирует символьную и не- бейсиковую память. Формат: CLEAR [<АРГУМЕНТ1>[,< АРГУМЕНТ2>]] <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ ЧИСЛО БАЙТОВ ОБЛАСТИ ПАМЯТИ, РЕЗЕРВИРУЕМОЙ ДЛЯ СИМВОЛЬНЫХ ПЕРЕМЕННЫХ; <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ АДРЕС ВЕРХНЕЙ ГРАНИЦЫ ОБЛАСТИ ОПЕРАТИВНОЙ ПАМЯТИ, ИСПОЛЬЗУЕМОЙ БЕЙСИК-СИСТЕМОЙ, ДОЛЖЕН НЕ ПРЕВЫШАТЬ ВОСЬМЕРИЧНОГО 70000. При любой форме оператора очищаются массивы и переменные, определенные функции, символьные строки, а также аппаратный стек, закрываются все файлы, а любая распечатка заканчивается символом "ПС". Определения функций USR остаются неизменными. Первый аргумент используется для установления размера области памяти для хранения текста строк, по умолчанию он равен 200 байтов. Если задан АРГУМЕНТ1, то для символьных строк резервируется указанное число байтов. Второй аргумент используется для указания начала области, - 39 - У1.00031-01 35 01 которая не может использоваться для программ и данных БЕЙСИКА. Таким образом определяется область для неформатированных данных, функций USR или другого использования. После выполнения CLEAR с двумя параметрами в косвенном режиме объектный код теряется, и БЕЙСИК-система переходит в непосредственный режим. Многие операции делают CLEAR автоматически, например, RUN, NEW, MERGE, LOAD и любое изменение текста программы БЕЙСИКА. Если параметры в CLEAR не указаны, то соответствующие значения величины области строк и верхней границы оперативной памяти не изменяются. Слишком большое значение первого или слишком малое второго аргумента вызывает недостаток оперативной памяти, и выдается сообщение об ошибке 7. Указание второго аргумента при отсутствии первого вызывает ошибку 2. Если АРГУМЕНТ 2 больше восьмеричного 70000, выдается сообщение об ошибке 5. Пример: CLEAR 1000,&O30000 Ok (резервируется 1000 байтов для строк и ОЗУ свыше &O30000 для пользовательских целей). 4.2.4. Оператор DATA Сохраняет заданные в тексте программы константы для последующего пользования. Формат: DATA <ЭЛЕМЕНТ>[,<ЭЛЕМЕНТ>...] <ЭЛЕМЕНТ>::= ЧИСЛОВАЯ КОНСТАНТА, ТЕКСТОВАЯ КОНСТАНТА В КАВЫЧКАХ ИЛИ БЕЗ КАВЫЧЕК, НО НЕ ВКЛЮЧАЮЩАЯ ЗАПЯТЫХ. Этот оператор позволяет сохранять "начальные" величины в теле программы. В режиме непосредственного выполнения оператор DATA игнорируется. Во время выполнения программы он тоже опускается, и только оператор READ может использовать его. Во время чтения данные, выбираются начиная с оператора DATA с наименьшим номером строки, а следующие операторы выбираются последовательно. Когда все данные исчерпаны, дальнейшее чтение невозможно до появления оператора RESTORE. В списке оператора DATA запятая используется как разделитель. Апостроф не завершает списка и не означает начала комментария. Разрешены любые числовые константы, включая &H, &O, &B, экспонентную форму, константы с явно указанным типом. Если в текстовой константе нет разделителя, то кавычки могут быть опущены. - 40 - У1.00031-01 35 01 4.2.5. Оператор READ Вводит данные из оператора DATA в программу. Формат: READ <ПЕРЕМЕННАЯ>[,<ПЕРЕМЕННАЯ>...] <ПЕРЕМЕННАЯ>::= ДОПУСТИМОЕ ИМЯ ПЕРЕМЕННОЙ (ВКЛЮЧАЯ ЭЛЕМЕНТ МАССИВА). Этот оператор читает следующие еще непрочитанные данные из оператора DATA. Процесс повторяется до тех пор, пока все переменные из списка заберут свои значения. Оператор READ пересматривает все записи каждого оператора DATA, анализируя их с начала программы до конца. Для чтения данных несколько раз можно воспользоваться оператором RESTORE. В случае обнаружения конца операторов DATA выдается сообщение об ошибке 4. При попытке читать текстовые данные в числовые переменные получается ошибка 13. Пример: 10 DATA 1,&O22,&H3F 20 FOR I%=0 TO 5% 30 DATA 234E-7 40 READ X(I%) 50 NEXT I% 60 DATA -33%,44.56,TEXT,"A,B" 70 READ A¤,B¤ 4.2.6. Оператор RESTORE Изменяет порядок чтения данных из оператора DATA оператором READ. Формат: RESTORE [<НОМЕР СТРОКИ>] <НОМЕР СТРОКИ>::= НОМЕР СУЩЕСТВУЮЩЕЙ СТРОКИ. Этот оператор изменяет значение указателя, определяющего, который из операторов DATA будет использован следующим в операторе READ. READ перемещает указатель последовательно, пока все операторы DATA не будут использованы. Оператор RESTORE возвращает указатель в начало программы и все данные заново могут быть введены. В случае присутствия номера строки будут рассматриваться операторы DATA с указанным или большими номерами строк. Повторно использовать оператор RESTORE можно в любом месте программы. Он позволяет смотреть на операторы DATA как на устройство ввода данных с возможностью повторного чтения. - 41 - У1.00031-01 35 01 Пример: 1000 RESTORE 1010 FOR I%=0% TO 10% 1020 READ X(I%) 1030 NEXT I% 1040 RETURN (подпрограмма, заполняющая массив X) 4.2.7. Оператор DEF 4.2.7.1. Оператор DEF USR Определяет функции на машинном языке. Формат: DEF USR[<ЦИФРА>]=<ВЫРАЖЕНИЕ> <ЦИФРА>::= ЦЕЛАЯ КОНСТАНТА ИЗ ИНТЕРВАЛА [0,9], УКАЗЫВАЮЩАЯ НОМЕР ФУНКЦИИ, ПО УМОЛЧАНИЮ 0; <ВЫРАЖЕНИЕ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ АДРЕС ЗАПУСКА ФУНКЦИИ USR. Оператор определяет начальный адрес машинной подпрограммы, составленной пользователем. Значение выражения переводится в целый тип и считается адресом запуска программы. Отрицательные значения от минус 32768 до минус 1 означают адреса от 32768 до 65535 соответственно. Для указания адресов удобно пользоваться восьмеричными константами. Одновременно могут быть определены 10 функций USR( ). Номер определяемой функции указывается цифрой. Адреса вызова подпрограмм хранятся в области USRTAB(&O2100), где каждой USR( ) выделяется по одному слову. Действие оператора можно представить как заполнение USRTAB. Для выполнения программы на машинном языке необходимо выполнить последовательность операторов 10 DEF USR=&ONNNNNN 20 A=USR(A) Обычным способом загрузки машинной программы в память является использование команды BLOAD, которая запоминает начальный адрес загруженной программы в ячейке BUFSTA(&O264). Таким образом, логична последовательность BLOAD "PROG" PROG .BIN Ok - 42 - У1.00031-01 35 01 DEF USR5=PEEK(&O264) Ok Для выделения памяти функциям USR( ) используется оператор CLEAR. Этот оператор сохраняет все определения DEF USR. 4.2.7.2. Оператор DEF FN Определяет пользовательские функции. Формат: DEF FN <ИМЯ>[(<СПИСОК>)]=<ВЫРАЖЕНИЕ> <ИМЯ>::= ЛЮБОЕ ДОПУСТИМОЕ ИМЯ ПЕРЕМЕННОЙ; <СПИСОК>::= ОДИН ИЛИ НЕСКОЛЬКО ИМЕН ФОРМАЛЬНЫХ ПАРАМЕТРОВ (ДОПУСТИМЫХ ИМЕН ПЕРЕМЕННЫХ), РАЗДЕЛЕННЫХ ЗАПЯТЫМИ; <ВЫРАЖЕНИЕ>::= ЛЮБОЕ ВЫРАЖЕНИЕ ТАКОГО ЖЕ ТИПА, КАК И <ИМЯ>. При выполнении этого оператора создается переменная <ИМЯ>, отмеченная как имя функции. Никаких вычислений оператор не производит и может быть в любом месте программы. Переменная <ИМЯ> не доступна обычным путем, и может быть создана нормальная переменная с таким же самым именем. В случае создания другой функции с таким же самым именем старое определение теряется. Функция может иметь любое число параметров. Они определяются как список имен переменных любого типа, разделенных запятыми и заключенных в скобки. Параметры являются формальными и реально не существуют, т.е. любая обычная переменная может иметь такое же имя. Каждый аргумент должен быть такого типа, что ему могло бы присвоиться значение фактического аргумента, задаваемого при вызове функции, и результат возвращается в место вызова функции. Если в этом выражении есть имена переменных, объявленных формальными аргументами, то их значения берутся соответственно списку фактических аргументов в вызове функции. В выражении также можно использовать любые другие переменные, если их имена не совпадают с именами формальных аргументов. В выражении могут быть любые обращения к функциям, также и нерекурсивные обращения к функциям FN. Ошибки проверяются только при вызове функции. При обнаружении ошибки в строке, вызывающей пользовательскую функцию, следует проверить определение этой функции. DEF FN, в отличии от DATA, является выполняемым оператором, т.е. функция должна определяться раньше ее вызова. Этот оператор - один из немногих, запрещенных в непосредственном режиме. Пример: 10 DEF FN QU¤(QU,ST)=MID¤(QL¤,QU,ST) 20 PRINT FN QU¤(CO,LEN(CO)) - 43 - У1.00031-01 35 01 4.3. Операторы ввода/вывода Операторы ввода/вывода INPUT, PRINT и другие позволяют организовать обмен информацией с внешними устройствами. 4.3.1. Оператор PRINT Выводит данные на экран, печатающее устройство или файл на магнитной ленте. Формат: PRINT ? [#] [<СПИСОК>] LPRINT <СПИСОК>::= ОДНО ИЛИ НЕСКОЛЬКО ВЫРАЖЕНИЙ ЛЮБОГО ТИПА, ФУНКЦИЙ ОПЕРАТОРА PRINT, РАЗДЕЛЕННЫХ ЗАПЯТОЙ ИЛИ ТОЧКОЙ С ЗАПЯТОЙ; L УКАЗЫВАЕТ, ЧТО ВЫВОД ОСУЩЕСТВЛЯЕТСЯ НА ПЕЧАТАЮЩЕЕ УСТРОЙСТВО; # ОБОЗНАЧАЕТ ВЫВОД В ФАЙЛ НА МАГНИТНОЙ ЛЕНТЕ. Слово PRINT может быть заменено вопросительным знаком "?", за исключением варианта LPRINT. LPRINT должен работать на РМП. Оператор пересылает данные на устройство вывода. Обычно устройством вывода является экран, но этот оператор может вывести данные и на печатающее устройство или в открытый файл на кассет- ной магнитной ленте. Список выводимых данных может быть пустым или содержать несколько выражений любого типа, значения которых преобразуется в текст и выводятся на указанное устройство. Запятая между двумя элементами списка данных означает, что данные будут выводится зонами, т.е. каждому элементу списка выделяется по 16 позиций. Остаток зоны за данными заполняется пробелами. Если данные не помещаются в зоне, берется следующая зона. Если между двумя аргументами списка данных стоит точка с запятой, то значения выводятся непосредственно друг за другом. Если запятая или точка с запятой является последней в списке данных, то курсор остается на той же позиции, на которой был после вывода последнего значения, в противном случае осуществляется перевод строки. Оператор LPRINT выводит все данные на печатающее устройство. Пример: PRINT 1;-2,3 1 -2 3 Ok - 44 - У1.00031-01 35 01 4.3.2. Оператор INPUT Вводит данные с клавиатуры или из файла. Формат: INPUT [<АРГУМЕНТ>;][<СПИСОК>] # <АРГУМЕНТ>::= ПОДСКАЗКА В ВИДЕ ТЕКСТОВОЙ КОНСТАНТЫ; <СПИСОК>::= ОДНА ИЛИ НЕСКОЛЬКО ПЕРЕМЕННЫХ ИЛИ ЭЛЕМЕНТОВ МАССИВА, РАЗДЕЛЕННЫХ ЗАПЯТЫМИ; # УКАЗЫВАЕТ НА ВВОД ИЗ ФАЙЛА НА МАГНИТНОЙ ЛЕНТЕ. Этот оператор организует ввод с клавиатуры или из открытого оператором OPEN файла на магнитной ленте. Если знака "#" нет, то ввод осуществляется с клавиатуры. Если в случае ввода с клавиатуры указан <АРГУМЕНТ>, то он выводится на экран как подсказка. Затем выводится вопросительный знак "?", высвечивается курсор, и БЕЙСИК-система ожидает ввода данных. В качестве данных могут быть любые константы, по типу и числу соответствующие элементам списка. В качестве разделителей используются запятые. В текстовых константах могут отсутствовать кавычки, если они не содержат запятых. Если ввод прекращается раньше конца списка переменных, то на следующей строке выдаются знаки "??", и БЕЙСИК-система ждет продолжения ввода. Если вводится больше данных, чем переменных в списке, то последние значения игнорируются. Если при вводе числовых данных встречаются недопустимые знаки, то выдается сообщение об ошибке 13 и осуществляется повторный ввод. При попытке оператором INPUT # прочесть метку конца файла выдается сообщение об ошибке 55. Пример: INPUT "ДАННЫЕ";A,B¤,C¤ ДАННЫЕ?123,"ABC,EFG" ??P"Q Ok PRINT A,B¤,C¤ 123 ABC,EFG P"Q Ok - 45 - У1.00031-01 35 01 4.3.3. Оператор OPEN Определяет файл данных на магнитной ленте. Формат: OPEN <СПЕЦИФИКАЦИЯ ФАЙЛА> [FOR INPUT] OUTPUT <СПЕЦИФИКАЦИЯ ФАЙЛА>::= СИМВОЛЬНОЕ ВЫРАЖЕНИЕ, ОПРЕДЕ- ЛЯЮЩЕЕ ИМЯ ФАЙЛА. Оператор начинает процесс ввода/вывода данных. Буфер ввода/вывода связывается с именем файла. Слова INPUT и OUTPUT указывают, что открываются соответственно входной или выходной файл. Данные на магнитной ленте хранятся в формате КОИ-7 блоками по 256 символов. Конец файла означает символ "СУ/Z" (код &O32). Аналогичным форматом в командах SAVE, LOAD и MERGE на магнитной ленте хранится текст программы. При открытии входного файла первый блок данных считывается в буфер. Данные из входного файла можно читать оператором INPUT#, записывать в выходной файл - оператором PRINT#. Имя файла должно состоять не более, чем из 6 символов. Также можно указать тип файла. Тип файла должен состоять не более, чем из 3 символов и отделяться от имени файла точкой: DATA.TXT По умолчанию в операторе OPEN устанавливается тип файла DAT. Можно указать любой другой тип файла, только в случае ввода этот файл должен быть записан в формате КОИ-7. В случае слишком длинного или пустого имени файла выводится сообщение об ошибке 56. Попытка повторно открыть файл приводит к ошибке 54. Пример: 10 OPEN "PROG.ASC" FOR INPUT 20 IF EOF THEN 60 30 INPUT# A¤ 40 PRINT A¤ 50 GOTO 20 60 CLOSE (на экран выводится текст программы PROG). - 46 - У1.00031-01 35 01 4.3.4. Оператор CLOSE Заканчивает операции ввода/вывода и освобождает буфер. Формат: CLOSE Если оператором OPEN был открыт выходной файл, к выводимым данным добавляются символ <ПС> и указатель конца файла "СУ/Z" (код &O32), выводится последний блок файла и очищается буфер. В случае входного файла просто очищается буфер. Некоторые операции делают CLOSE автоматически. Это END, CLEAR, LOAD, NEW и любое изменение текста программы. Пример: 10 OPEN "DATA" FOR OUTPUT 20 FOR I%=0% TO 10% 30 PRINT# X(I%) 40 NEXT 50 CLOSE 4.4. Операторы непосредственного доступа к памяти 4.4.1. Оператор POKE Записывает данные в любую ячейку памяти ЭВМ. Формат: POKE <АДРЕС>,<ВЫРАЖЕНИЕ> <АДРЕС>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ АДРЕС ЯЧЕЙКИ; <ВЫРАЖЕНИЕ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ ЗАПИСЫ- ВАЕМЫЕ ДАННЫЕ. Этот оператор записывает значение выражения в указанную ячейку (слово) памяти, оба параметра при этом переводятся в целый тип. Если адрес нечетный, то берется слово, в котором находится указанный байт, т.е., значение адреса уменьшается на 1. Этот оператор можно использовать для изменения указателей и таблиц BASIC системы, размещения в памяти программ, написанных в машинных кодах, для работы с регистрами внешних устройств. Пользоваться оператором POKE надо осторожно, так как ошибочные данные или адрес могут вызвать нежелательные результаты. - 47 - У1.00031-01 35 01 Пример: 10 A%=PEEK(4%) 20 POKE 6%,2% 30 POKE 4%,6% ... 100 POKE 4%,A% 110 POKE 6%,0% (во время выполнения программы блокируется обращение к несуществующим ячейкам памяти). 4.4.2. Оператор OUT Записывает данные в оперативную память по маске. Формат: OUT <АДРЕС>,<МАСКА>,<КОД> <АДРЕС>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ ФИЗИЧЕСКИЙ АДРЕС ЯЧЕЙКИ ПАМЯТИ; <МАСКА>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ УЧАСТВУ- ЮЩИЕ В ОПЕРАЦИИ БИТЫ; <КОД>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ, СТИРАТЬСЯ ИЛИ ВСТАВЛЯТЬСЯ ДОЛЖНЫ ВЫБРАННЫЕ БИТЫ; НУЛЕВОЕ ЗНАЧЕНИЕ УКАЗЫВАЕТ НА СТИРАНИЕ, НЕНУЛЕВОЕ - НА ВСТАВКУ. Оператор позволяет записывать или стирать отдельные биты непосредственно в ячейках оперативной памяти. Биты ячейки, соответствующие нулевым битам маски, остаются неизменными, остальные биты стираются (если значение кода равно нулю), или включаются (в противном случае). Пример: 10 POKE A%,&O177777 20 POKE B%,0% 30 OUT A%,&O111111,0% 40 OUT B%,&O66666,1% 50 PRINT OCT¤(PEEK(A%)), OCT¤(PEEK(B%)) RUN 66666 66666 Ok - 48 - У1.00031-01 35 01 4.5. Операторы управления экраном телевизора 4.5.1. Оператор CLS Очищает экран. Формат: CLS Оператор CLS окрашивает весь экран в текущий цвет фона. Используя его, можно наиболее быстрым путем получить сплошной экран любого цвета. Пример: 100 INPUT "ПАРОЛЬ",A¤ 110 IF PAROL¤=A¤ THEN 200 120 CLS 130 PRINT AT(10,10);"КУ-КУ!" 140 CLEAR 4.5.2. Оператор COLOR Устанавливает цвет экрана. Формат: COLOR [<АРГУМЕНТ1>],[< АРГУМЕНТ2>],[< АРГУМЕНТ3>] <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ НОМЕР ЦВЕТА ПЕРЕДНЕГО ПЛАНА, ЧИСЛО В ПРЕДЕЛАХ [0,8]; <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ НОМЕР ЦВЕТА ФОНА, ЧИСЛО В ПРЕДЕЛАХ [0,8]; <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ НОМЕР ЦВЕТА БОРДЮРА, ЧИСЛО В ПРЕДЕЛАХ [0,8]. Оператор устанавливает текущие цвета переднего плана и фона экрана. При отсутствии параметра соответствующий цвет не меняется. Имеются следующие номера цветов: 0 - прозрачный (цвет фона); 4 - голубой; 1 - черный; 5 - красный; 2 - синий; 6 - пурпурный; 3 - зеленый; 7 - желтый; 8 - белый; - 49 - У1.00031-01 35 01 Оператор COLOR изменяет цвет выводимого текста, все операторы графики также по умолчанию используют цвет, установленный этим оператором. Пример: 100 COLOR 2,3 110 DRAW A¤ 120 COLOR 1 130 PSET @(20,0) 140 DRAW A¤ 4.5.3. Оператор SCREEN Оператор переключения Формат: SCREEN N В микро-ЭВМ "Электроника МС 0511" разделены символьный и графический вывод на экран. Поэтому БЕЙСИК-система позволяет пользователю в любой момент времени иметь на экране или только графическую или только текстовую информацию. В системе это принято называть символьным и графическим режимами работы экрана или просто символьным и графическим экранами. Текст на графическом экране можно лишь рисовать, например, оператором DRAW, но нет возможности его напечатать оператором PRINT. Оператор SCREEN позволяет переключаться с одного режима на другой. Параметр оператора SCREEN - арифметическое выражение. При выполнении оператора берется целая часть значения выражения. Допустимые значения параметра следующие: 0 - переход на символьный экран 1 - переход на символьный экран 2 - переход на графический экран 3 - переход на графический экран При других значениях параметра выдается сообщение об ошибке "неправильный вызов функции". При переходах от одного режима к другому экран очищается, т.е. весь перекрашивается в текущий цвет фона. Цвета фона и вывода символов или черчения для каждого экрана задаются отдельно и могут быть различными. Это выполняется при помощи оператора COLOR. Он задает цвета для текущего экрана. Третий параметр оператора COLOR для графического экрана игнорируется. Нужно отметить, что оператор COLOR не перекрашивает экран, а лишь задает цвета для последующего вывода. Поэтому фон графического экрана можно менять лишь последовательностью операторов. - 50 - У1.00031-01 35 01 100 SCREEN 2 110 COLOR ,6 120 CLS Цвет отрисовки меняется без дополнительных операторов, но старое изображение не перекрашивается. Необходимо запомнить, что применение любых графических операторов (PSET, PRESET, LINE, CIRCLE, PAINT, DRAW и функция POINT) допустимо лишь во время действия графического режима. При символьном режиме это приведет к ошибке "неправильный вызов функции". Также необходимо запомнить, что переход в символьный режим осуществляется автоматически при выполнении оператора INPUT и при переходе в непосредственный режим (прекращение выполнения программы естественно, по ошибке или по нажатию клавиши <СТОП>, а также при выполнении оператора SCREEN в непосредственном режиме). Поэтому работа с графикой в непосредственном режиме невозможна. 4.5.4. Оператор LOCATE Передвигает курсор на экране, высвечивая и гася его. Формат: LOCATE [<АРГ1>][,<АРГ2>][,<АРГ3>] <АРГ1>::= ПОЗИЦИЯ X (СТОЛБЕЦ), НА КОТОРОЙ ДОЛЖЕН БЫТЬ РАСПОЛОЖЕН КУРСОР, ЦЕЛОЕ ВЫРАЖЕНИЕ С ЗНА- ЧЕНИЕМ ИЗ ИНТЕРВАЛА [0,255]; <АРГ2>::= ПОЗИЦИЯ Y (СТРОКА), НА КОТОРОЙ ДОЛЖЕН БЫТЬ РАСПОЛОЖЕН КУРСОР, ЦЕЛОЕ ВЫРАЖЕНИЕ С ЗНА- ЧЕНИЕМ ИЗ ИНТЕРВАЛА [0,255]; <АРГ3>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ, ГАСИТЬСЯ (НУЛЕВОЕ ЗНАЧЕНИЕ) ИЛИ ВЫСВЕЧИВАТЬСЯ (НЕНУЛЕВОЕ ЗНАЧЕНИЕ) ДОЛЖЕН КУРСОР; Оператор LOCATE контролирует местоположение курсора на экране. Строки имеют номера от 0 (верхняя) до 23 (нижняя). Столбцы нумеруются от 0 до 63 слева направо. Курсор передвигается на позицию, указанную в операторе LOCATE. Если опущен любой из первых двух параметров, то сохраняется предыдущее его значение. Если присутствует АРГУМЕНТ 3 и он не равен 0, то оператор высвечивает курсор, который обычно гасится во время выполнения программы. Курсор высвечивается также оператором INPUT. Для ввода данных с погашенным курсором необходимо использовать функцию INKEY¤. На положение графического курсора оператор LOCATE не влияет. Функции CSRLIN и POS позволяют узнать положение курсора, установленное этим оператором. Если номер столбца или строки - 51 - У1.00031-01 35 01 больше числа присутствующих на экране столбцов или строк, но не больше 255, то курсор будет перенесен через максимальное число позиций в этом направлении. Отрицательные или большие граничных значения первых двух параметров приводят к ошибке 5. Пример: 100 LOCATE 0,22 110 INPUT "ЧИСЛО";X 120 LOCATE 0,0,0 130 PRINT X 4.6. Операторы и функции графики 4.6.1. Оператор PSET Используется для окрашивания точки на экране в заданный цвет. Формат: PSET [ @ ](<АРГ1>,< АРГ2>)[,< АРГ3>] STEP <АРГ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ X ТОЧКИ; <АРГ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ Y ТОЧКИ; <АРГ3>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ ЦВЕТ ТОЧКИ; ЧИСЛО ИЗ ИНТЕРВАЛА [0,8]; STEP (@) - КООРДИНАТЫ УКАЗАННОЙ ТОЧКИ ПОДСЧИТЫВАЮТСЯ ОТНОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ, ОБРАБОТАН- НОЙ ОПЕРАТОРАМИ ГРАФИКИ. Если заданная точка находится за пределами экрана (координата X из интервала [0,639], Y - [0,263]), то команда никаких действий не производит. В противном случае она окрашивается в цвет, определенный аргументом 3, или, если он отсутствует, в текущий цвет, определенный оператором COLOR. Если номер цвета выходит за допустимые пределы, то выдается сообщение об ошибке 5. Пример: 10 FOR Y=1 TO 120 20 PSET (SQR(Y),Y) 30 NEXT - 52 - У1.00031-01 35 01 4.6.2. Оператор PRESET Оператор используется для окрашивания точки на экране в цвет фона. Формат: PRESET [ @ ](<АРГ1>,< АРГ2>)[,< АРГ3>] STEP <АРГ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ X ТОЧКИ; <АРГ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ Y ТОЧКИ; <АРГ3>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ ЦВЕТ ТОЧКИ; ЧИСЛО ИЗ ИНТЕРВАЛА [0,8]; STEP (@) - КООРДИНАТЫ УКАЗАННОЙ ТОЧКИ ПОДСЧИТЫВАЮТСЯ ОТНОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ, ОБРАБОТАННОЙ ОПЕРАТОРАМИ ГРАФИКИ. Этот оператор окрашивает заданную точку экрана в цвет фона. Если задан АРГУМЕНТ 3, то оператор превращается в оператор PSET - точка окрашивается в указанный цвет. Координаты точки X и Y должны находиться в интервалах [0,639] и [0,263] соответственно, иначе никаких действий не произойдет. Если номер цвета выходит за допустимые пределы, то выдается сообщение об ошибке 5. Пример: 100 C%=POINT(X%,Y%) 110 PRESET (X%,Y%) ... 200 IF POINT(X%,Y%)<>C% THEN PSET(X%,Y%),C% 4.6.3. Функция POINT Функция выдает номер цвета указанной точки экрана. Формат: X=POINT(<АРГУМЕНТ1>,< АРГУМЕНТ2>) <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ X; <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ Y. Функция POINT выдает значение целого типа - номер цвета заданной точки экрана, число от 1 до 8. Если координаты точки выходят за пределы экрана, то выдается значение -1. Если точка не принадлежит ни одному из начерченных на экране объектов, то выдается номер цвета фона. - 53 - У1.00031-01 35 01 С помощью функции POINT можно определить, вычерчивалось ли что-нибудь в заданном месте экрана. Пример: 100 GOSUB 1000 110 IF POINT(X0,Y0)=4% THEN 100 120 GOSUB 2000 4.6.4. Оператор LINE Оператор используется для вычерчивания на экране линий и прямоугольников. Формат: LINE [[ @ ](<АРГ1>,<АРГ2>)] - STEP [ @ ](<АРГ3>,<АРГ4>)[,<АРГ5>,[B] STEP BF <АРГ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ X НАЧАЛЬНОЙ ТОЧКИ ОБЪЕКТА; <АРГ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ Y НАЧАЛЬНОЙ ТОЧКИ ОБЪЕКТА; <АРГ3>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ X КОНЕЧНОЙ ТОЧКИ ОБЪЕКТА; <АРГ4>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ Y КОНЕЧНОЙ ТОЧКИ ОБЪЕКТА; <АРГ5>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ НОМЕР ЦВЕТА ОБЪЕКТА, ЧИСЛО ИЗ ИНТЕРВАЛА [0,8]; B - ВЫЧЕРЧИВАЕТ ПРЯМОУГОЛЬНИК МЕЖДУ ЗАДАННЫМИ ВЕРШИНАМИ; BF - ВЫЧЕРЧИВАЕТСЯ ЗАКРАШЕННЫЙ ПРЯМОУГОЛЬНИК; STEP (@) УКАЗЫВАЕТ, ЧТО КООРДИНАТЫ ПОДСЧИТЫВАЮТСЯ ОТНОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ, ОБРАБОТАННОЙ ОПЕРАТОРАМИ ГРАФИКИ. Этот оператор используется для вычерчивания на экране линий, контуров прямоугольников или закрашенных прямоугольников. Аргументы с первого по четвертый задают координаты начальной (<АРГ1> и <АРГ2>) и конечной (<АРГ3> и <АРГ4>) точки объекта (для прямоугольника это диагонально противоположные углы). Если первые два аргумента опущены, то по умолчанию берутся координаты точки, заданные в предыдущем операторе графики. Если АРГУМЕНТ 5 опущен , то выбирается текущий цвет, определенный оператором COLOR. Если задан параметр B (BF), то вычерчивается прямоугольник - 54 - У1.00031-01 35 01 (закрашенный прямоугольник). Если ни одного из этих параметров нет, то чертится линия. Аргументы с первого по четвертый могут принимать значения из интервала [-32768,32767],но на экране отображаются только точки с координатами X и Y в интервалах [0,639] и [0,263] соответственно. Если код цвета выходит за допустимые границы, то выдается сообщение об ошибке 5. Пример: 10 LINE -@(SCALE*3,SCALE*4),2% 20 LINE (100,100)-(200,200),,B 30 LINE (125,125)-@(50,50),,BF 4.6.5. Оператор CIRCLE Используется для вычерчивания на экране окружностей, эллипсов и дуг произвольного размера и цвета. Формат: CIRCLE [ @ ](<АРГ1>,<АРГ2>),<АРГ3> STEP [,<АРГ4>][,<АРГ5>][,<АРГ6>][,<АРГ7>] <АРГ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ X ЦЕНТРА ОКРУЖНОСТИ; <АРГ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ Y ЦЕНТРА ОКРУЖНОСТИ; <АРГ3>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ РАДИУС ОКРУЖНОСТИ; <АРГ4>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ НОМЕР ЦВЕТА; ЧИСЛО ИЗ ИНТЕРВАЛА [0,8]; <АРГ5>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ ПОЛОЖЕ- НИЕ НАЧАЛЬНОЙ ТОЧКИ ДУГИ (В РАДИАНАХ); <АРГ6>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ ПОЛОЖЕ- НИЕ КОНЕЧНОЙ ТОЧКИ ДУГИ (В РАДИАНАХ); <АРГ7>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КОЭФФИ- ЦИЕНТ "СЖАТИЯ" ЭЛЛИПСА; STEP (@) - КООРДИНАТЫ УКАЗАННОЙ ТОЧКИ ВЫЧИСЛЯЮТСЯ ОТ- НОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ, ОБРАБОТАННОЙ ОПЕРАТОРАМИ ГРАФИКИ. Этот оператор используется для вычерчивания окружностей, эллипсов или их частей (дуг). На экран выводится лишь та часть окружности, которая помещается на координатной плоскости (координата X в пределах [0,639], Y - [0,263]). Первые два аргумента задают положение центра окружности на координатной плоскости. - 55 - У1.00031-01 35 01 АРГУМЕНТ 3 задает радиус вычерчиваемой окружности. АРГУМЕНТ 6 и АРГУМЕНТ 6 указывают начало и конец вычерчиваемой дуги соответственно. Если эти аргументы отрицательны, то берутся их абсолютные значения, а центр окружности соединяется с соответствующим концом дуги. По умолчанию они равны 0 и 2*PI (6.283185). Если задан АРГУМЕНТ 7, то вычерчивается эллипс. По умолчанию этот параметр равен 1. Неправильное задание аргументов может привести к синтаксической ошибке или ошибке переполнения. Если номер цвета выходит за допустимые пределы, то выдается сообщение об ошибке 5. Пример: 10 COLOR 3 20 CIRCLE (100,100),75,,-1,-.001,1.2 30 CIRCLE (10,-5),75,,-.001,-1,1.2 4.6.6. Оператор PAINT Используется для окрашивания части экрана в один цвет. Формат: PAINT [ @ ](<АРГ1>,<АРГ2>)[,<АРГ3>][,<АРГ4>] STEP <АРГ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ X НАЧАЛЬНОЙ ТОЧКИ; <АРГ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ КООРДИНАТУ Y НАЧАЛЬНОЙ ТОЧКИ; <АРГ3>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ НОМЕР ЦВЕТА; ЧИСЛО ИЗ ИНТЕРВАЛА [0,8]; <АРГ4>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ ЦВЕТ ГРАНИЦЫ ЗАКРАШИВАЕМОЙ ОБЛАСТИ; ЧИСЛО ИЗ ИНТЕРВАЛА [0,8]; STEP (@) - КООРДИНАТЫ УКАЗАННОЙ ТОЧКИ ПОДСЧИТЫВАЮТСЯ ОТНОСИТЕЛЬНО ПОСЛЕДНЕЙ ТОЧКИ, ОБРАБОТАН- НОЙ ОПЕРАТОРАМИ ГРАФИКИ. Этот оператор предназначен для окрашивания части экрана в указанный цвет. Если АРГУМЕНТ 3 опущен, то область окрашивается текущим цветом, определенным оператором COLOR. Если АРГУМЕНТ 4 опущен, то берется область с границей цвета закрашивания. Точка, с которой начинается окрашивание, может быть любая внутренняя точка области. Границы области должны быть четко очерчены, иначе произойдет выход за пределы области. За пределами экрана оператор никаких действий не производит. Следует отметить, что за границу области принимаются контуры не только с цветом, указанным АРГУМЕНТОМ 4, но и с цветом закрашивания, поэтому, если внутри окрашиваемой области окажется закрытый контур с цветом закрашивания, то он останется незакра- шенным. - 56 - У1.00031-01 35 01 Если номера цветов выходят за допустимые пределы, то выдается сообщение об ошибке 5. Пример: 100 DRAW A¤ 110 PAINT (105,22),3 4.6.7. Оператор DRAW Выполняет строки графических команд. Формат: DRAW <СИМВОЛЬНОЕ ВЫРАЖЕНИЕ> <СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>::= СТРОКА, СОДЕРЖАЩАЯ ГРАФИ- ЧЕСКИЕ КОМАНДЫ. Оператор дает возможность удобно управлять графикой. Для этого имеются команды "графического языка", передаваемые оператору DRAW через строку символов. Возможны вызовы подстрок с командами, что освобождает от ограничений длины строк (255 символов). Команда оператора DRAW состоит из буквы, идентифицирующей команду, с следующими за ней аргументами. Аргументом может быть целая константа из интервала [0,32767] или обращение к переменной (индексированной переменной): =<ИМЯ ЧИСЛОВОЙ ПЕРЕМЕННОЙ>; Значение переменной должно быть в интервале [-32768,32767]. На экране отображаются только те значения аргументов, которые соответствуют координатам X и Y точек в интервалах [0,639] и [0,263] соответственно. В качестве разделителей между командами можно использовать пробелы или точку с запятой ";", но их может и не быть. Имеются следующие команды оператора DRAW: U[<ДЛИНА>] черчение вверх от текущей точки; D[<ДЛИНА>] вниз; L[<ДЛИНА>] налево; R[<ДЛИНА>] направо; E[<ДЛИНА>] в правый верхний угол; F[<ДЛИНА>] в правый нижний угол; G[<ДЛИНА>] в левый нижний угол; H[<ДЛИНА>] в левый верхний угол. В графическом представлении (все углы 45 градусов): H U E \ | / L-+-R /|\ G D F - 57 - У1.00031-01 35 01 Для черчения с указанием координат точек используется команда M. M[+]<АРГ1>,[+]<АРГ2> Команда чертит от текущей точки до точки с координатами (<АРГ1>,<АРГ2>). Если перед первым аргументом указан знак "+" или "-", то координаты подсчитываются относительно координат текущей точки. Знак перед вторым аргументом не влияет на этот режим. В команде M точка с запятой ";" после имени числовой переменной в первом аргументе не заменяет запятой. Имеются команды, используемые непосредственно перед перечисленными командами, изменяющие их действие: B - указывает, что команда должна передвигать текущую точку, но не чертить; N - после выполнения команды возвращаются бывшие координаты текущей точки. Следующие команды изменяют режим для всех последующих команд во всех последующих операторах DRAW, исключая команду M с абсолютными координатами. A[<ПОВОРОТ>] изменяет направление черчения, значения аргумента означают: 0 - нормальная ориентация (принима- ется по умолчанию); 1 - 90 градусов по часовой стрелке; 2 - 180 градусов по часовой стрелке; 3 - 270 градусов по часовой стрелке; S[<МАСШТАБ>] позволяет изменять масштаб черчения; аргумент должен быть в пределах [1,639]. По умолчанию принимается значение 4. Значение 0 тоже указыва- ет отсутствие масштабирования, т.е. значение 4. Значение аргумента оператор DRAW делит на 4 и умножает на аргументы команд черчения. Таким образом S1 означает 4-кратное умень- шение, S12 - 3-кратное увеличение. Для изменения цвета имеется команда C: C[<ЦВЕТ>] задает новый цвет черчения, номер кото- рого указывается аргументом и должен быть в пределах [0,8]. Для включения подстрок используется команда X: X<ИМЯ СИМВОЛЬНОЙ ПЕРЕМЕННОЙ>; Переменная интерпретируется как подстрока, содержащая графические команды. Оператор DRAW удобен для черчения различных фигур, создания - 58 - У1.00031-01 35 01 шрифтов и библиотек элементов чертежей с последующей их компоновкой при помощи команды X, размещения их в любом месте, направлении и масштабе. Нарушение пределов аргументов или неправильная запись команд вызывает ошибку 5. Пример: 10 A%=100 20 B%=150 30 A¤="E10F10D20L20U20R20" 40 DRAW "BM=A%;,100X=A¤;BM=B%;,100S2X=A¤;" 4.7. Оператор управления звуком 4.7.1. Оператор BEEP Оператор выдает короткий звуковой сигнал. Формат: BEEP Этот оператор используется для выдачи короткого звукового сигнала. Этот же сигнал выдается системой в случае ошибки. Пример: 100 FOR I=1 TO 10 110 BEEP 120 NEXT 130 INPUT "НОМЕР МЕСЯЦА";MN 140 IF MN>12 OR MN<1 THEN 100 150 PRINT MONTH¤(MN) - 59 - У1.00031-01 35 01 4.8. Операторы трассировки программы 4.8.1. Оператор TRON Запускает трассировку номеров строк. Формат: TRON В режиме трассировки номер каждой выполняемой строки программы выдается на экран в формате [NNN]. Единственный способ остановить вывод номеров строк - это перезапустить ЭВМ или выполнить оператор TROFF. Команда RUN не отменяет действия оператора TRON. Этот режим помогает следить за выполнением сложных программ, установить, которая из ветвей программы выполняется. 4.8.2. Оператор TROFF Оператор выключает включенный оператором TRON режим трассировки. Формат: TROFF Пример: ... 249 TRON 250 ... ... 300 ... 301 TROFF ... RUN [250][260][270][280][290][300] Ok - 60 - У1.00031-01 35 01 5. ФУНКЦИИ Язык БЕЙСИК позволяет использовать аппарат функций. Различают стандартные функции, которые заранее определены в системе, и внутренние, которые определяет сам пользователь. Стандартные в свою очередь подразделяются на числовые, предназначенные для работы с числовыми величинами, и символьные, предназначенные для действий над символьными строками. 5.1. Числовые функции Результаты всех числовых функций - числа одинарной точности. 5.1.1. Функция SQR Результат функции - квадратный корень. Формат: X=SQR(<АРГУМЕНТ>) <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ НЕОТРИЦАТЕЛЬНЫЕ ЗНАЧЕНИЯ. Функция вычисляет квадратный корень. Попытка обратиться к этой функции с отрицательным значением аргумента приведет к ошибке 5. Пример: PRINT SQR(3) 1.732051 Ok 5.1.2. Функция SIN Функция вычисляет синус угла, заданного в радианах. Формат: X=SIN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Эта функция вычисляет синус угла, заданного в радианах. Для того, чтобы перевести градусы в радианы, можно использовать преобразование X=X*PI/180. - 61 - У1.00031-01 35 01 Пример: PRINT SIN(PI/2) 1 Ok 5.1.3. Функция COS Функция вычисляет косинус угла, заданного в радианах. Формат: X=COS(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Пример: PRINT COS(0) 1 Ok 5.1.4. Функция TAN Функция вычисляет тангенс угла, заданного в радианах. Формат: X=TAN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Пример: 100 PRINT "РАССТОЯНИЕ=";S;"УГОЛ=";A 110 PRINT "ВЫСОТА=";S*TAN(A) 5.1.5. Функция ATN Используется для вычисления арктангенса (в радианах). Формат: X=ATN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Эта функция вычисляет арктангенс выражения. Результат функции указывается в радианах и находится между PI/2 и -PI/2. Пример: PRINT ATN(1)*4 3.141593 Ok - 62 - У1.00031-01 35 01 5.1.6. Функция PI Результат функции - число "ПИ". Формат: X=PI Эта функция используется для обозначения числа "ПИ". Примеры: PRINT PI 3.141593 Ok PRINT SIN(PI/2) 1 Ok 5.1.7. Функция EXP Результат функции - E в указанной степени. Формат: X=EXP(<АРГУМЕНТ>) <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ ИЗ ИНТЕРВАЛА [-88.499999999999992,88.029685974121093]. Функция производит возведение E ( E = 2.7182818284590 ) в указанную степень. Применяется главным образом для научных вычислений. Эта функция является обратной к функции LOG( ), которая вычисляет натуральные логарифмы (с основанием E), поэтому X=EXP(LOG(X)). Нарушение указанных границ вызывает ошибку 6. Пример: PRINT EXP(LOG(3)) 2.999999 Ok - 63 - У1.00031-01 35 01 5.1.8. Функция LOG Результат функции - натуральный логарифм. Формат: X=LOG(<АРГУМЕНТ>) <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ПОЛОЖИТЕЛЬНЫЕ ЗНАЧЕНИЯ. Функция используется для вычисления натурального логарифма. Применение функции к аргументу, имеющему отрицательное или равное нулю значение, вызывает ошибку 5. LOG( ) можно использовать для вычисления логарифма с любым основанием. Например, для вычисления логарифмов с основанием 10 можно использовать формулу: LG(X)=LOG(X)/LOG(10). Пример: PRINT LOG(EXP(1)) .999999 Ok 5.1.9. Функция ABS Результат функции - абсолютное значение аргумента. Формат: X=ABS(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Результатом функции является значение аргумента с положительным знаком. Пример: X=-1/3 Ok PRINT ABS(X*2) + 2 2.666666 Ok 5.1.10. Функция FIX Результат функции - целая часть аргумента. Формат: X=FIX(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Функция отбрасывает дробную часть аргумента. Для положительных аргументов FIX( ) и INT( ) являются тождественными, но для отрицательных значений аргументов результаты этих функций различаются (см. INT( ) ). - 64 - У1.00031-01 35 01 Пример: PRINT FIX(-5.3) -5 Ok PRINT FIX(6.25) 6 Ok IF X/N=FIX(X/N) THEN PRINT "X ДЕЛИТСЯ НА N" Ok 5.1.11. Функция INT Результат функции - целое значение, меньшее чем аргумент. Формат: X=INT(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Функция выдает значение ближайшего целого числа, не превосходящего аргумента. Функция INT( ) похожа на FIX( ), но, в отличии от INT( ), FIX( ) просто отбрасывает дробную часть аргумента. Различия между функциями проявляются при отрицательных аргументах. Для описываемой функции выражения X=ABS(INT(Z)) и X=ABS(INT(-Z)) для реальных Z дадут разные результаты. Пример: IF ABS(INT(Z))=ABS(INT(-Z)) THEN PRINT "Z-ЦЕЛОЕ" Ok PRINT INT(-5.3),FIX(-5.3) -6 -5 Ok 5.1.12. Функция SGN Результат функции равен минус 1, 0 или 1, в зависимости от знака аргумента. Формат: X=SGN(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Функцию SGN( ) называют функцией знака. Эта функция дает следующие результаты: - если АРГУМЕНТ<0, результат минус 1; - если АРГУМЕНТ=0, результат 0; - если АРГУМЕНТ>0, результат +1. Функцию можно использовать, например, когда необходимо без оператора IF присвоить переменной число 0 только тогда, когда другая переменная имеет значение 0. - 65 - У1.00031-01 35 01 Пример: 100 INPUT A 110 PRINT B*SGN(A) 5.1.13. Функция RND Результат функции RND - случайное число из интервала [0,1]. Формат: X=RND(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Функция используется для получения псевдослучайных чисел, имеющих равномерное распределение на интервале [0,1]. Ее удобно использовать при создании игровых программ. Выдаваемые функцией значения зависят от знака аргумента: - если значение аргумента положительно, то результат RND( ) - очередное значение из последовательности псевдослучайных чисел. Сама последовательность зависит от начального значения; - если аргумент отрицательный, то изменяется начальное значение последовательности псевдослучайных чисел. Каждому отрицательному значению аргумента соответствует одна последовательность, причем она не зависит от порядка аргумента; - если используется нулевое значение аргумента, то результат функции тот же, что и в предыдущем обращении к ней. Пример: PRINT RND(1),RND(-5),RND(-50) .4709943 .5336828 .5336828 Ok PRINT RND(3),RND(0) .6054241 .6054241 Ok 5.1.14. Функция FRE Указывает, сколько осталось свободной памяти компьютера для программы пользователя. Формат: X=FRE[(<АРГУМЕНТ>)] <АРГУМЕНТ>::= СИМВОЛЬНОЕ ИЛИ АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ (ВАЖЕН ЕГО ТИП, А НЕ ЗНАЧЕНИЕ). Если аргумент - число или отсутствует, то подсчитывается и - 66 - У1.00031-01 35 01 выдается объем памяти, отведенной под программу пользователя. Если же аргумент символьного типа, то выдается свободный объем памяти, отведенной под символьные переменные (см. п.4.2.3). Таким образом, функция совершенно не зависит от значения аргумента, важен только его тип. С другой стороны, при обращении к функции значение выражения все же высчитывается, и, в случае возникновения ошибки (например, переполнения), дальнейшее выполнение программы прекращается. Пример: PRINT FRE(" "),FRE(0) 200 11000 5.2. Функции преобразования типов 5.2.1. Функция CINT Функция преобразует тип значения арифметического выражения в целый. Формат: X=CINT(<АРГУМЕНТ>) <АРГУМЕНТ>::= АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ ИЗ ИНТЕРВАЛА [-32768,32767]. Функция отбрасывает дробную часть арифметического выражения также, как это делает функция FIX( ). Если значение выходит за пределы 16-битного целого числа [-32768,32767], то выдается ошибка переполнения. Функция используется по умолчанию, когда значение арифметического выражения присваивается переменной целого типа. Пример: PRINT CINT(5.93), CINT(-6.352) 5 -6 Ok - 67 - У1.00031-01 35 01 5.2.2. Функция CSNG Функция преобразует аргумент в число одинарной точности, округляя его. Формат: X=CSNG(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Функция используется для преобразования значения арифметического выражения в вещественное число одинарной точности. Она используется по умолчанию, когда производится присвоение значения переменной одинарной точности. Функцию удобно использовать, когда временно нужно значение одинарной точности, например, для печати. Пример: PRINT CSNG(PI) 3.141593 Ok 5.2.3. Функция CDBL Функция преобразует результат арифметического выражения в число двойной точности. Формат: X=CSNG(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Функция предназначена для преобразования значений арифметических выражений в числа двойной точности, т. е. с мантиссой из 17 десятичных цифр. Эта функция используется по умолчанию, когда происходит присвоение переменной двойной точности. Пример: PRINT CDBL(2/3) .6666667 Ok - 68 - У1.00031-01 35 01 5.3. Функции непосредственного обращения к памяти 5.3.1. Функция PEEK Позволяет прочесть содержимое любой ячейки памяти. Формат: X=PEEK(<АРГУМЕНТ>) <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗАДАЮЩЕЕ АДРЕС ЯЧЕЙКИ. Эта функция позволяет исследовать любое определенное место памяти в адресном пространстве. С ее помощью можно читать системные переменные драйверов и БЕЙСИК-системы. Также функция PEEK удобна для ввода данных непосредственно с регистров внешних устройств. Результатом функции является целое число - содержимое слова памяти, адрес которого задается аргументом. Значения аргумента от минус 32768 до минус 1 обозначают адреса от 32768 до 65535 соответственно. Пример: PRINT PEEK(&O176),PEEK(&O200) 100 120 Ok (печатаются значения координат графического курсора). 5.3.2. Функция INP Разрешает чтение данных в оперативной памяти по маске. Формат: X=INP(<АДРЕС>,<МАСКА>) <АДРЕС>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ ФИЗИЧЕСКИЙ АДРЕС ЯЧЕЙКИ ОЗУ; <МАСКА>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ, КОТОРЫЕ БИТЫ СЧИТЫВАЮТСЯ ИЗ СОДЕРЖИМОГО ЯЧЕЙКИ. При помощи функции INP можно аналогично функции PEEK непосредственно читать содержимое ячеек оперативной памяти, при этом можно выбирать только необходимые биты. Функция дает результат целого типа, в котором биты, соответствующие ненулевым битам маски, читаются из указанной ячейки, а другие биты имеют значение 0. Пример: POKE A%,&B10101 Ok PRINT BIN¤(INP(A%,&B11001)) 10001 Ok - 69 - У1.00031-01 35 01 Функция удобна при работе с регистрами внешних устройств. Пример: 10 OUT &O177560,&O100,0% 20 IF INP(&O177560,&O200) THEN 30 ELSE 20 30 A%=PEEK(&O177562) 40 PRINT A% 50 GOTO 20 (программа печатает коды клавиш клавиатуры). 5.4. Символьные функции 5.4.1. Функция ASC Функция переводит один байт строки символов в код КОИ-7. Формат: X=ASC(<АРГУМЕНТ>) <АРГУМЕНТ>::= НЕ ПУСТОЕ СИМВОЛЬНОЕ ВЫРАЖЕНИЕ. Эта функция обрабатывает первый байт строки символов. Значение этой функции выдается как целое число, которое является кодом соответствующего символа по таблице КОИ-7, приведенной в ПРИЛОЖЕНИИ 3. Поэтому результат функции принадлежит интервалу [0,255]. Обратной к функции ASC( ) является функция CHR¤( ). Для получения информации о более дальних байтах символьной строки можно применять функцию MID¤. Если аргумент - пустая строка, то вызов функции приводит к ошибке 5. Пример: ZZ¤="ABC" Ok PRINT ASC¤(ZZ¤) 65 Ok PRINT ASC(MID¤(ZZ¤,2)) 66 Ok - 70 - У1.00031-01 35 01 5.4.2. Функция CHR¤ Функция переводит целое число (код КОИ-7) в символьную строку из одного символа. Формат: X¤=CHR¤(<АРГУМЕНТ>) <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ ИЗ ИНТЕРВАЛА [0,255]. При вызове функции значение аргумента трактуется как код из таблицы КОИ-7 и преобразовывается в символьную строку из одного символа, соответствующего этому коду. Таким образом CHR¤(65) и "A" тождественны. Функция CHR¤( )_является обратной к функции ASC( ). Если X попадает в необходимый диапазон, и переменная X¤ состоит из одного символа, то всегда верно: X=ASC(CHR¤(X)) и X¤=CHR¤(ASC(X¤)). Если значение аргумента выходит за пределы указанного интервала, то фиксируется ошибка 5. Рассматриваемую функцию можно использовать и при работе с многобайтовыми строками, например: 10 OTVET¤=" " 20 FOR I=1 TO 3 30 PRINT "УКАЖИТЕ НОМЕР";I;"ОТВЕТА" 40 INPUT NOMER 50 OTVET¤=OTVET¤+CHR¤(NOMER) 60 NEXT 70 PRINT "ОТВЕТЫ="; OTVET¤ Для многобайтных строк также можно использовать функцию MID¤. Заметим, что существуют символы, которые можно занести в строку только при помощи функции CHR¤, например: 10 PRINT CHR¤(7); (выдается звуковой сигнал). 5.4.3. Функция LEN Результат функции - длина символьной строки. Формат: X=LEN(<СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>) Функция LEN( ) подсчитывает количество символов строки и может дать любое число от 0 (если строка пустая) до 255 (если строка наибольшей допустимой длины). Эта функция позволяет узнать длину переменной до ее обработки. Применение некоторых функций - 71 - У1.00031-01 35 01 для "пустых" символьных переменных могут привести к ошибке, а использование функции LEN позволяет избежать этого, например: IF LEN(A¤)>0 THEN T¤=MID¤(A¤,1,1) Пример: 100 IF LEN(S¤)>32-POS THEN PRINT CHR¤(10); 110 PRINT S¤ 5.4.4. Функция MID¤ Функция выбирает или заменяет часть символьной переменной. Формат: X¤=MID¤(<АРГ1>,<АРГ2>[,<АРГ3>]) или MID¤(<АРГ4>,<АРГ2>[,<АРГ3>])= =<СИМВОЛЬНОЕ ВЫРАЖЕНИЕ> <АРГ1>::= СИМВОЛЬНОЕ ВЫРАЖЕНИЕ; <АРГ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ ОТ 1 ДО 255 И ОПРЕДЕЛЯЮЩЕЕ НОМЕР СИМВОЛА, С КОТОРОГО НАЧИНАЕТСЯ ИСПОЛЬЗУЕМАЯ В ОПЕРА- ЦИИ ЧАСТЬ СИМВОЛЬНОЙ СТРОКИ; <АРГ3>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ НЕОТРИЦА- ТЕЛЬНЫЕ ЗНАЧЕНИЯ И ОПРЕДЕЛЯЮЩЕЕ КОЛИ- ЧЕСТВО СИМВОЛОВ, УЧАВСТВУЮЩИХ В ОПЕРАЦИИ; <АРГ4>::= СИМВОЛЬНАЯ ПЕРЕМЕННАЯ. Функция MID¤ позволяет выбрать часть символьной переменной. Это единственная функция, которая может встречаться по обе стороны знака равенства. В первом варианте MID¤ используется для выбора подстроки из результата символьного выражения <АРГ1>, начиная с символа, указанного вторым аргументом, причем выбирается столько символов, сколько задано третьим аргументом. Значение второго аргумента не должно превышать длину символьного выражения, указанного первым аргументом. Если третий аргумент не указан или выходит за границы строки, то выделяется часть символьной строки от символа, указанного вторым аргументом, до конца. Заметим, что выделенная функцией MID¤ подстрока помещается в области памяти, отведенной под символьные переменные. Во втором варианте, когда функция MID¤( ) находится с левой стороны знака равенства, дополнительная память из области, отведенной под символьные переменные, не используется. В этом случае обрабатываемые символьные данные присваиваются символьной переменной, значение которой уже находится в указанной области. В этом случае аргументы <АРГ2> и <АРГ3> указывают изменяемое место в символьной переменной и должны соответствовать аналогичным требованиям, как и в первом случае. - 72 - У1.00031-01 35 01 Пример: 100 A¤="ФАЙЛ ПЕРВЫЙ" 110 A1¤=STRING¤(20," ") 120 MID¤(A1¤,1)=MID¤(A¤,6) 130 MID¤(A1¤,7)=MID¤(A¤,1,4) 140 PRINT A1¤ RUN ПЕРВЫЙ ФАЙЛ Ok 5.4.5. Функция STRING¤ Функция инициализирует символьную переменную. Формат: X¤=STRING¤(<АРГУМЕНТ1>,<АРГУМЕНТ2>) <АРГУМЕНТ3> <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ ОТ 0 ДО 255 И ОПРЕДЕЛЯЮЩЕЕ ДЛИНУ СОЗДАВАЕМОЙ СИМВОЛЬНОЙ СТРОКИ; <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ ОТ 0 ДО 255 , СООТВЕТСТВУЮЩИЕ КОДУ КОИ-7, КОТОРЫМ ЗАПОЛНЯЕТСЯ НОВАЯ СИМВОЛЬНАЯ СТРОКА; <АРГУМЕНТ3>::= СИМВОЛЬНОЕ ВЫРАЖЕНИЕ, ПЕРВЫМ СИМВОЛОМ КОТОРОГО ЗАПОЛНЯЕТСЯ НОВАЯ СИМВОЛЬНАЯ СТРОКА. Предназначением функции STRING¤( ) является создание символьной переменной любой длины, содержащей одинаковые символы. Вы можете определить этот символ либо задав его по таблице КОИ-7 кодов (см. ПРИЛОЖЕНИЕ 3), либо указав нужный символ с помощью символьного выражения, в частности текстовой константы. Тип второго аргумента функции STRING¤ указывает, каким путем определяется символ, которым инициализируется символьная переменная. Например, выражения STRING¤(41,32) и STRING¤(41," ") приводят к одинаковому результату. Будет зафиксирована ошибка 5, если один из числовых параметров выйдет за пределы интервала [0,255]. Если заданная вами длина символьной строки равна 0, то будет создана пустая строка, несмотря на инициализирующий символ. Пример: PRINT NAZV¤; STRING¤(50-LEN(NAZV¤),"."); NOM - 73 - У1.00031-01 35 01 5.4.6. Функция VAL Результат функции - числовой эквивалент части символьной переменной, содержащей цифры. Формат: X=VAL(<СИМВОЛЬНОЕ ВЫРАЖЕНИЕ>) Функция применяется к символьному выражению, которое предположительно содержит действительное число, записанное в кодах КОИ-7. Это число может включать знак, десятичную точку и обозначение порядка. Функция VAL( ) дает значение двойной точности. Результат символьного выражения просматривается слева направо до недопустимого для чисел кода. Если первый символ строки нельзя отнести к числу, то результат будет нулевой. Например, результат VAL("A12:") равен 0, но VAL("23A12:") - число 23. Функция VAL является обратной к функции STR¤( ). Пример: PRINT VAL(MID¤("A12:",2)) 12 Ok 5.4.7. Функция INKEY¤ Дает один символ, введенный с клавиатуры. Формат: X¤=INKEY¤ Эта функция считывает символ с буфера ввода клавиатуры. Если не было введено никакого символа, то INKEY¤ выдает пустую символьную строку (""). Если символ был введен, то он считывается из буфера и выдается через INKEY¤. После обращения к этой функции буфер очищается, поэтому надо заботиться о сохранении результата. Эта функция может быть применена везде в качестве символьной строки. Надо обратить внимание на то, что результатом функции может быть пустая строка, в некоторых случаях вызывающая ошибку. Эта функция является главным способом считывания кодов клавиш. Достоинствами этой функции являются то, что она не повторяет считывания кода клавиши, а также не ждет символа, если не было нажато ни на одну клавишу, что обеспечивает не диалоговый режим ввода с клавиатуры, применяемым, например, в операторе INPUT. INKEY¤ может прочитать коды не только алфавитно-цифровых клавиш. Присчитывании не производится эхо-печать на экране. Пример: 10 CH¤=INKEY¤ 20 IF CH¤="" THEN 10 30 PRINT ASC(CH¤); 40 GOTO 10 - 74 - У1.00031-01 35 01 (программа печатает коды клавиш). 5.4.8. Функция STR¤ Превращает численные данные в строку в КОИ-7 коде. Формат: X¤=STR¤(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>) Эта функция переводит числа в строку символов аналогично оператору PRINT. Численное выражение вычисляется как обычно, а результат "печатается" в новую временную строку в области строк, что и является результатом функции STR¤. (Не спутайте STR¤( ) с функцией STRING¤( )). Например, если N=1/3, то STR¤(N) даст строку ".33333333333333333" и каждое число 3 в самом деле есть символ, определенный как "3" (восьмеричный код 63). Эта функция является обратной к функции VAL. Например, результат VAL(STR¤(N)) будет N, а STR¤(VAL(NM¤)) будет строка NM¤, если NM¤ содержит действительное число. Функция удобна для форматирования числовых данных перед выводом на экран, для вкомпоновки чисел в текст. От оператора PRINT функция отличается тем, что не выдает пробела в конце строки. Пример: A=123 Ok PRINT MID¤(STR¤(A),LEN(STR¤(A))-1) 23 Ok 5.4.9. Функция BIN¤ Превращает целые числа в символы двоичного формата. Формат: X¤=BIN¤(<ЦЕЛОЕ ВЫРАЖЕНИЕ>) Результат выражения переводится в целый тип и превращается в символьную строку, представляющую двоичный его код. Например, аргумент с значением 3 даст результат "11", т. е., строку из двух символов "1" (восьмеричный код 61). Знака или пробелов функция не генерирует, незначащие нули перед числом не обрабатываются. Максимальная длина строки результата функции BIN¤( ) есть 16 байтов. Главным образом BIN¤( ) используется для печати двоичного представления чисел. Пример: PRINT BIN¤(44) 101100 Ok - 75 - У1.00031-01 35 01 5.4.10. Функция OCT¤ Превращает целое число в символьную строку восьмеричного представления. Формат: X¤=OCT¤(<ЦЕЛОЕ ВЫРАЖЕНИЕ>) Значение аргумента переводится в целый тип, полученный результат превращается в строку символов в соответствии с его значением в восьмеричной системе счисления аналогично функции BIN¤. Пробелов не создается, незначащие нули отбрасываются. Таким образом, аргумент 12 дает результат "14", т. е., строку из двух символов "1" и "4" (восьмеричные коды КОИ-7 61 и 64 соответственно). Максимальная длина строки, полученной при помощи OCT¤, - шесть символов. Функция используется для печати восьмеричного представления чисел. Пример: PRINT OCT¤(&HFFFF) 177777 Ok 5.4.11. Функция HEX¤ Превращает численный аргумент в символьную строку шестнадцатеричного представления. Формат: X¤=HEX¤(<ЦЕЛОЕ ВЫРАЖЕНИЕ>) Функция HEX¤ переводит значение аргумента в целый тип и результат превращает в символьную строку, байты которой представляют значение аргумента, представленное в шестнадцатеричном формате. Знак и пробелы не генерируются, незначащие нули отбрасываются. Это значит, что аргумент 43 дает результат "2B", другими словами, строку из двух символов с восьмеричными кодами КОИ-7 62 и 102. Из этого следует, что максимальная длина значения функции HEX¤( ) - 4 байта. Функция используется для распечатки шестнадцатеричного представления числа. Пример: PRINT HEX¤(&H1A) 1A Ok - 76 - У1.00031-01 35 01 5.5. Вспомогательные функции ввода/вывода 5.5.1. Функция CSRLIN Результат функции - номер строки экрана, на которой находится курсор. Формат: X=CSRLIN[(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)] Результат функции - число целого типа, указывающее, на которой строке экрана находится курсор. Верхняя строка имеет номер 0, нижняя - 23. Заключенное в скобки арифметическое выражение не используется, хотя подсчитывается, что может привести к ошибке. CSRLIN вместе с функцией POS применяется для определения места на экране, куда будет выводиться информация. Оператором LOCATE можно менять месторасположение курсора. Пример: ? CSRLIN 10 Ok (результат примера зависит от местонахождения курсора). 5.5.2. Функция POS Функция выдает положение курсора в печатной строке (номер столбца). Формат: X=POS[(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)] Функция позволяет получить номер столбца, в котором находится курсор. Эта функция вместе с CSRLIN применяется для определения положения курсора. Значение, заключенного в скобки арифметического выражения, хотя и подсчитывается, но функцией не используется. Пример: 1000 X=POS 1010 Y=CSRLIN 1020 LOCATE X1,Y1 1030 GOSUB 2000 1040 STOP 2000 LOCATE X,Y 2100 RETURN - 77 - У1.00031-01 35 01 5.5.3. Функция LPOS Дает положение головки печатающего устройства. Формат: X=LPOS[(<АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ>)] Функция LPOS выдает значение счетчика положения головки печатающего устройства. Первая позиция имеет номер 1. Каждый напечатанный символ увеличивает значение счетчика, переход к новой строке очищает его, присваивая значение 1. Действие функции надежно только при выводе текста, так как БЕЙСИК-система не контролирует управляющих символов, которые могут повлиять на положение головки. Функцию LPOS( ) можно использовать при выводе данных на печать столбцами. Пример: 250 IF LPOS>20 THEN LPRINT 260 LPRINT TAB(20);A 5.5.4. Функция EOF Проверяет достижение конца файла. Формат: X=EOF Функция проверяет, равен ли следующий еще не введенный оператором INPUT# символ указателю конца файла "СУ/Z" (восьмеричный код 32). Если нет, то выдается значение 1 (TRUE), в противном случае - 0 (FALSE). Если при обращении к функции EOF буфер оказывается пустым, то вводится очередной блок файла. Так как чтение метки конца файла вызывает ошибку 55, то целесообразно перед каждым INPUT# проверять достижение конца файла при помощи функции EOF. Функция дает логический результат, поэтому ее удобно использовать в операторе IF. Если файл не открыт, выдается сообщение об ошибке 59. Если открыт выходной файл, то обращение к EOF приводит к ошибке 52. Пример: 50 IF NOT EOF THEN 20 60 CLOSE - 78 - У1.00031-01 35 01 5.6. Функции оператора PRINT 5.6.1. Функция AT Функция позволяет организовать вывод данных оператором PRINT с произвольной позиции экрана. Формат: PRINT AT(<АРГУМЕНТ1>,<АРГУМЕНТ2>) <АРГУМЕНТ1>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗНАЧЕНИЕ КОТОРОГО УКАЗЫВАЕТ КОЛОНКУ ЭКРАНА, НАЧИНАЯ С КОТОРОЙ БУДУТ ВЫВОДИТСЯ ДАННЫЕ; ЧИСЛО ИЗ ИНТЕРВАЛА [0,255]; <АРГУМЕНТ2>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ЗНАЧЕНИЕ КОТОРОГО УКАЗЫВАЕТ СТРОКУ ЭКРАНА; ЧИСЛО ИЗ ИНТЕРВАЛА [0,240]. Действия функции AT( ) аналогичны действиям оператора LOCATE. Отличие состоит в том, что, используя AT( ), можно выводить текст в произвольных местах экрана одним оператором PRINT. Значение первого аргумента задает колонку экрана, а значение второго - строку. Тем самым задается позиция на экране, с которой начинается вывод последующих данных. Колонки экрана нумеруются от 0 до 63 слева направо, строки - от 0 до 23 сверху вниз. Если значение первого аргумента превышает 63, то подсчет колонок продолжается с начала той же строки. Аналогичные действия происходят и со строками. Если значения аргументов выходят за допустимые пределы, то выдается сообщение об ошибке 5. Пример: PRINT AT(15,14);"A" Ok PRINT AT(15,38);"C" Ok 5.6.2. Функция TAB Функция помогает организовать построение колонок в операторах PRINT. Формат: PRINT TAB(<АРГУМЕНТ>) <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, УКАЗЫВАЮЩЕЕ НОМЕР ПО- ЗИЦИИ, С КОТОРОЙ ДОЛЖЕН ПРОДОЛЖАТЬСЯ ВЫВОД; ЧИСЛО ИЗ ИНТЕРВАЛА [0,255]. - 79 - У1.00031-01 35 01 Функция TAB( ) может применяться и в операторе LPRINT. Она выводит пробелы до тех пор, пока не будет достигнута колонка с номером, равным значению аргумента. Если курсор находится на позиции с большим номером, чем значение аргумента, то TAB( ) игнорируется. Позиции строки экрана нумеруются от 0 до 63 слева направо. Если значение аргумента превышает 63, то подсчет колонок продолжается на той же строке, т.е., TAB(1) совпадает с TAB(65). Если значение аргумента выходит за допустимые пределы, то фиксируется ошибка 5. Пример: 100 CW=8 110 PRINT A;TAB(CW);B;TAB(2*CW);C;TAB(3*CW);D 5.6.3. Функция SPC В операторе PRINT выводит пробелы. Формат: PRINT SPC(<АРГУМЕНТ>) <АРГУМЕНТ>::= ЦЕЛОЕ ВЫРАЖЕНИЕ, ОЗНАЧАЮЩЕЕ ЧИСЛО ПРО- БЕЛОВ И ПРИНИМАЮЩЕЕ ЗНАЧЕНИЯ В ПРЕДЕ- ЛАХ [0,255]. Эта функция используется в операторах PRINT и LPRINT для вывода необходимого числа пробелов. Она не использует символьной области. SPC( ) может употребляться для очистки экрана впереди и после выводимых данных от "мусора", возможно оставшегося после предыдущего вывода. Пример: 220 ZZ=8 230 PRINT SPC(ZZ);AX;SPC(ZZ);BX;SPC(ZZ) - 80 - У1.00031-01 35 01 5.7. Функции, определенные пользователем 5.7.1. Функции FN Обозначают место вызова пользовательских функций. Формат: X=FN <ИМЯ> [(<СПИСОК>)] <ИМЯ>::= ИМЯ ФУНКЦИИ, ОПРЕДЕЛЕННОЙ ОПЕРАТОРОМ DEF FN; <СПИСОК>::= ОДНО ИЛИ НЕСКОЛЬКО ВЫРАЖЕНИЙ, РАЗДЕЛЕННЫХ ЗАПЯТЫМИ. Функции FN - это функции БЕЙСИК-системы, определенные пользователем. Функция должна быть определена при помощи оператора DEF FN раньше ее вызова. Выражения в списке являются фактическими параметрами и должны по числу, расположению в списке и типу соответствовать списку формальных параметров в операторе DEF FN. Значения фактических параметров вставляются в выражение в определении функции, и значение этого выражения считается результатом функции. При появлении ошибок в вызове функции следует проверить ее определение, так как в операторе DEF FN ошибки не проверяются. Пример: 10 DEF FN LG(X)=LOG(X)/LOG(10) 20 PRINT FNLG(100) 5.7.2. Функция USR Позволяет обращаться к подпрограммам машинного языка. Формат: X=USR[<ЦИФРА>](<АРГУМЕНТ>) <ЦИФРА>::= ЦЕЛАЯ КОНСТАНТА ИЗ ИНТЕРВАЛА [0,9], УКАЗЫ- ВАЮЩАЯ НОМЕР ВЫЗЫВАЕМОЙ ФУНКЦИИ; ПО УМОЛ- ЧАНИЮ 0; <АРГУМЕНТ>::= ВЫРАЖЕНИЕ, ЗНАЧЕНИЕ КОТОРОГО ПЕРЕДАЕТСЯ ФУНКЦИИ USR. Перед обращением к функции необходимо определить ее при помощи оператора DEF USR. Одновременно могут быть определены 10 различных функций USR с номерами от 0 до 9. Вызов функций происходит при помощи машинной инструкции JSR PC. Подпрограмма может находиться в любом месте доступного - 81 - У1.00031-01 35 01 адресного пространства, включая также подпрограммы самого БЕЙСИКА. Возможны непосредственная передача подпрограмме одного аргумента любого типа и возврат одного значения обязательно того же типа. После передачи управления подпрограмме в регистре общего назначения R5 находится адрес, а в R3 - тип аргумента. Тип закодирован следующим образом: единица в 15-ом разряде означает символьную строку; информация о других типах хранится в младшем байте и имеет значения: -1 - целый аргумент, 0 - число с плавающей запятой двойной точности, 1 - число с плавающей запятой одинарной точности. В случае символьной строки в качестве значения аргумента передаются два слова, в первом из которых хранится длина, в другом - начальный адрес строки. В вершине стека находится адрес возврата, а за ним - значение аргумента. Таким образом в R5 хранится значение SP+2. Вернуть управление вызвавшей программе возможно при помощи инструкции RTS PC, предварительно поместив результат функции в ячейки, указываемые регистром R5. Если содержимое этих ячеек не будет изменяться, то результатом останется значение аргумента. Использование функций USR позволяет расширить возможности БЕЙСИК-системы, выполнить невозможные или медленно выполняемые в ней действия. Вызов неопределенной функции USR приводит к ошибке 5. Пример: 10 PRINT USR(0%) 20 A%=USR2(A%) - 82 - У1.00031-01 35 01 ПРИЛОЖЕНИЕ 1 СООБЩЕНИЯ ОБ ОШИБКАХ В приложении указаны коды ошибок , их сокращенные названия и описания. 1 NEXT без FOR NEXT не предшествовал FOR или переменная, исполь- зованная в FOR, не соответствует переменной, использованной в NEXT. 2 Синтаксическая ошибка Неверное использование символов, например, число открывающих скобок не соответствует числу закрывающих, неправильная запись операторов или их составных частей, неправильно использована запятая и т.п. 3 RETURN без GOSUB При выполнении RETURN обнаружено, что не было выполнено GOSUB. 4 Кончились DATA При выполнении оператора READ обнаружено, что список оператора DATA исчерпан. 5 Неправильный вызов функции Ошибка возникает в следующих случаях: - отрицательный индекс; - неправильный аргумент для LOG, SQR; - неправильные значения аргументов для графичес- ких и других операторов; - неопределенная с DEFUSR функция USR и др. 6 Переполнение Результат арифметической операции слишком велик по абсолютному значению и не может быть записан в формате, принятом для чисел в БЕЙСИК- системе. ( В случае слишком малых величин результат приравнивается нулю и ошибки не выдается). 7 Переполнение памяти Программа не помещается в памяти, либо использовано слишком много вложенных операторов FOR, GOSUB, слишком много переменных, слишком - 83 - У1.00031-01 35 01 много затребовано памяти для массива или области строк, слишком мала свободная область для гене- рирования кода непосредственно выполняемых опе- раторов. 8 Неопределен номер строки В GOTO, GOSUB, IF, RESTORE, RENUM, AUTO, ON или DELETE использован номер несуществующей строки. 9 Недопустимый индекс (за пределами) Ссылка на элемент массива с индексом, который выходит за пределы размерности массива, либо указано неправильное число индексов. 10 Повторное определение массива Массив определен двумя операторами DIM, или массив определен оператором DIM после того, как по умолчанию для этого массива была установлена размерность 10. 11 Деление на нуль В выражении встретилось деление на нуль, или нуль был возведен в отрицательную степень. 12 Невозможно выполнить Недопустимый оператор в режиме непосредственного выполнения. 13 Ошибка типов Попытка присвоить символьной переменной числовое значение или наоборот; функции, использующей числовой аргумент, передается символьный аргу- мент или наоборот. 14 Не хватает места символьным переменным Превышено количество оставшейся памяти, которая была отведена символьным переменным по умолчанию или оператором CLEAR. 15 Слишком длинная строка Была попытка создать строку длиной более чем 255 символов. 16 Не определена 17 Продолжение невозможно Была сделана попытка продолжить выполнение программы, которая: - 84 - У1.00031-01 35 01 1. Была прервана из-за возникновения ошибки; 2. Была изменена; 3. Не существует. 18 Не определена функция пользователя Попытка обратиться к функции FN до ее определе- ния оператором DEFFN. 19 Ошибка устройства ввода/вывода Встречается при работе устройства ввода/вывода. 20 Не определена 21 Не определена 22 Не определена 23 Не определена 24 Отсутствует операнд Выражение содержит оператор без операнда, или в операторе (команде) нет обязательных параметров. 25 Переполнение буфера ввода Была сделана попытка ввести строку длиной более чем 255 символов. 26-51 Не определены 52 Ошибочный номер файла Оператор или команда ссылается на файл, который не открыт или открыт с другой целью (не для записи или чтения). 53 Не определена 54 Файл уже открыт Применен оператор OPEN для файла, который уже открыт. 55 Конец файла Попытка прочитать запись окончания файла оператор INPUT# был выполнен после того, как все данные из файла были введены, или применен - 85 - У1.00031-01 35 01 Для пустого файла. Чтобы избежать этой ошибки, для обнаружения окончания файла применяйте функ- цию EOF. 56 Ошибочное имя файла В операторах LOAD, SAVE или OPEN использовано неправильное имя файла (имя файла состоит из слишком большого количества символов). 57 Строка без номера Команда непосредственного выполнения в программе во время загрузки КОИ-7 файла. Загрузка прерыва- ется. 58 Не определена 59 Файл не открыт Оператор ввода/вывода применен к файлу, который не был открыт. 60 Не определена 61 Не определена 62 Ошибочное имя устройства Было использовано ошибочное имя устройства (в данной версии языка отсутствует). - 86 - У1.00031-01 35 01 ПРИЛОЖЕНИЕ 2 СПИСОК КОМАНД, ОПЕРАТОРОВ И ФУНКЦИЙ В приложении приводятся команды, операторы и функции БЕЙСИК- системы ( версия 08.07.1987), сгруппированные по назначению. Модификация текста программы в памяти AUTO Автоматически нумерует строки при вводе текста программы. DELETE Удаляет группы строк из текста программы. NEW Удаляет всю программу и выполняет оператор CLEAR. LIST Выводит текст программы на экран. LLIST Выводит текст программы на печатающее устройство. На РМП. RENUM Перенумеровывает строки текста программы. Хранение программ на магнитной ленте BLOAD Загружает с ленты в оперативную память двоичные коды. BSAVE Записывает блок памяти на ленту в двоичном коде. CLOAD Загружает программу с кассетной магнитной ленты во внутреннем формате БЕЙСИК-системы. CSAVE Записывает программу на магнитную ленту во внутреннем формате. LOAD Загружает программу с ленты ( формат КОИ-7 ). - 87 - У1.00031-01 35 01 SAVE Записывает программу на ленту ( формат КОИ-7 ). MERGE Загружает программу (файл в формате КОИ-7) с кассетной магнитной ленты и объединяет ее с программой в ОЗУ. FILES Фиктивное чтение или поиск файла с указанным именем. Инициализация системных переменных CLEAR Очищает все переменные, закрывает файлы и т.п. Резервирует память под символьные переменные, определяет верхний адрес ОЗУ для БЕЙСИКА. KEY Переопределяет функциональные клавиши. TRON Включает режим трассировки. TROFF Выключает режим трассировки. Команды, влияющие на выполнение программы CONT Продолжает выполнение программы после оператора STOP или клавиши "СТОП". RUN Начинает выполнение программы. SYSTEM Осуществляет переход в режим монитора машины. <СУ>A Осуществляет шаговый режим выполнения программы. Определение параметров системы CLEAR Устанавливает размеры области данных под символьные переменные, очищает все значения переменных, устанавливает верхний адрес памяти, доступный системе. DIM Определяет, резервирует память и инициализирует массивы. DEF FN Определение пользовательских функций. DEF USR Определяет стартовые адреса пользовательских - 88 - У1.00031-01 35 01 машинных подпрограмм-функций. Операторы, изменяющие значения переменных FOR Оператор цикла. Меняет значение переменной цикла. LET Основной оператор присвоения новых значений переменным. Слово LET не обязательно. Числовые функции ABS( ) Абсолютное значение. ATN( ) Арктангенс. Результат выдается в радианах. CDBL( ) Преобразование результата выражения в тип двойной точности. CINT( ) Преобразование результата выражения в целый тип. COS( ) Косинус угла, заданного в радианах. CSNG( ) Преобразование результата выражения в тип одинарной точности. EXP( ) Возведение E в степень. FIX( ) Отбрасывает дробную часть аргумента. FRE( ) Результат в зависимости от типа аргумента - FRE объем свободной области памяти (аргумент арифметический или отсутствует) или свободной области памяти, отведенной под символьные переменные (аргумент символьный). INT( ) Округляет аргумент до целого числа, не превосходящего аргумента. LOG( ) Натуральный логарифм. PI Число "ПИ". RND( ) Псевдослучайное число. SGN( ) Функция знака. SIN( ) Синус угла, заданного в радианах. - 89 - У1.00031-01 35 01 SQR( ) Квадратный корень. TAN( ) Тангенс угла, заданного в радианах. Символьные функции ASC( ) Переводит символ в числовой код ASCII. BIN¤( ) Преобразование целого числа в строку, содержащую двоичное представление числа. CHR¤( ) Переводит числовой код ASCII в символ. HEX¤( ) Преобразование целого числа в строку, содержащую 16-ричное представление числа. LEN( )_ Текущая длина символьного выражения. MID¤( ) Выбор части символьного выражения. MID¤( )= Присвоение результата символьного выражения части символьной переменной. OCT¤( ) Преобразование целого числа в строку, содержащую восьмеричное представление числа. SPC( ) Функция, входящая в команду PRINT. Выводит указанное количество пробелов. STRING¤() Формирует строку повторяющегося указанного символа. STR¤( ) Преобразует число в символьную строку, содержащую число. TAB( ) Функция, входящая в команду PRINT. Выводит пробелы до указанной позиции. VAL( ) Преобразует часть символьной переменной, содержащей цифры, в число. Операторы, управляющие выполнением программы END Оканчивает выполнение программы. FOR Начинает выполнение цикла. GOSUB Вызов подпрограммы. - 90 - У1.00031-01 35 01 GOTO Переход на новую строку программы. IF В зависимости от выполнения условия выполняется одна из ветвей оператора IF. NEXT Оканчивает цикл, начатый оператор FOR. RETURN Оканчивает подпрограмму и осуществляет возврат к следующему за GOSUB оператору. ON Оператор выбора, выполняющий безусловный переход или вызывающий подпрограммы в зависимости от значения выражения. STOP Временно приостанавливает выполнение программы и выдает сообщение. Операторы инициализации переменных DATA Определяет список внутренних данных. READ Ввод данных из операторов DATA в переменные. RESTORE Устанавливает ввод с определенного оператора DATA. Операторы комментария REM Оператор для комментария. ' Весь текст в строке после этого знака рассматривается как комментарий. Работа с памятью и регистрами внешних устройств INP( ) Чтение данных по маске. OUT Запись данных по маске. PEEK( ) Чтение данных из памяти. POKE Запись данных в память. USR( ) Вызов пользовательской подпрограммы-функции в машинных кодах. - 91 - У1.00031-01 35 01 Управление экраном дисплея CLS Очистка экрана. COLOR Переключение цвета фона и текущего цвета букв. LOCATE Передвигает курсор, высвечивая или гася его. PRINT Выводит данные на экран. ? Функции управления курсором AT( ) Функция, входящая в команду PRINT. Помещает курсор в произвольную позицию экрана. CSRLIN( ) Номер строки, на которой находится курсор. CSRLIN Параметр фиктивный. POS( ) Номер столбца, на котором находится курсор. POS Параметр фиктивный. SPC( ) Функция, входящая в команду PRINT. Выводит указанное количество пробелов. TAB( ) Функция, входящая в команду PRINT. Выводит пробелы до указанной позиции. Операторы графики CIRCLE Рисует окружности, овалы, дуги. DRAW Выполняет строки графических команд. LINE Чертит линии и прямоугольники. PAINT Заполняет замкнутую область любым цветом. POINT( ) Дает номер цвета указанной точки экрана. PRESET Окрашивает указанную точку в цвет фона. PSET Окрашивает указанную точку в указанный цвет. - 92 - У1.00031-01 35 01 Управление звуком BEEP Выдает звуковой сигнал. Работа с файлами данных CLOSE Заканчивает операции ввода (вывода) с файлом на МЛ. EOF Функции проверки конца входного файла на магнитной ленте. INPUT# Ввод данных из файла на магнитной ленте. OPEN Инициализация обмена данными с файлом на МЛ для ввода (вывода). PRINT# Вывод данных в файл на магнитной ленте. Управление клавиатурой INKEY¤ Результат - введенный символ или пустая строка. INPUT Вводит строку символов. Вывод на печатающее устройство PRINT Печать данных на печатающем устройстве. Операции AND,OR,NOT,EQV,IMP,XOR Логические операции ^, *, /, +, -, MOD, \ Бинарные арифметические операции -, + Унарные арифметические операции - 93 - У1.00031-01 35 01 + Бинарная символьная операция (конкатенация) =, <>, ><, <, >, <=, =<, =>, >= Логические операторы отношения - 94 - У1.00031-01 35 01 ПРИЛОЖЕНИЕ 3 ТАБЛИЦА КОДОВ КОИ-7 "ЭЛЕКТРОНИКИ МС 0511" ========================================================== 0 1 2 3 4 5 6 7 8 9 A B C D E F ========================================================== 0 СБР ПРО 0 @ P ' ШАГ - Ю П ТАБ БЕЛ ---------------------------------------------------------- 1 ! 1 A Q ПОВТ К - -- А Я ** ---------------------------------------------------------- 2 " 2 B R ИСУ З # Б Р * ---------------------------------------------------------- 3 ГТ ! # 3 C S С - ! Ц С ---------------------------------------------------------- 4 ! ¤ 4 D T БЛР Ч = Д Т ---------------------------------------------------------- 5 -- % 5 E U ГРАФ - - Е У ---------------------------------------------------------- 6 -- & 6 F V ЗАП - !! Ф Ж ---------------------------------------------------------- 7 ЗБ -- / 7 G W СТИР = ! Г В ---------------------------------------------------------- 8 -- -- ( 8 H X = Х Ь ---------------------------------------------------------- 9 -- ) 9 I Y ТАБ СБР- - И Ы ** ---------------------------------------------------------- AВВОД ! * : J Z ГАШ - = Й З КУРСОРА * ---------------------------------------------------------- B ! + ; K [ 32/ - - К Ш 64 ---------------------------------------------------------- CСБР , < L \ РП ИНВС - = Л Э ---------------------------------------------------------- DУСТ - = M ] ИНВЭ ! = М Щ ТАБ ** ---------------------------------------------------------- EРУС . > N ^ УСТ - -- Н Ч ** ИНД * ---------------------------------------------------------- FЛАТ / ? O _ ЗБ ПОДЧ !! О ** ========================================================== - 95 - У1.00031-01 35 01 П_Р_И_М_Е_Ч_А_Н_И_Е. * - коды передаются с драйвера клавиатуры на драйвер ТВ- приемника, минуя внешнюю программу. ** - коды используются только драйвером клавиатуры. - 96 - У1.00031-01 35 01 ПРИЛОЖЕНИЕ 4 ЗАРЕЗЕРВИРОВАННЫЕ В БЕЙСИК-СИСТЕМЕ СЛОВА Приведенные в списке слова являются ключевыми в БЕЙСИК-системе, поэтому их нельзя использовать как имена переменных. Рядом указывается страница, где описывается данное слово. ABS 63 BEEP 58 AND 15 BLOAD 23 ASC 69 BSAVE 24 AT 78 BIN¤ 74 ATN 61 AUTO 27 CDBL 67 COLOR 48 CHR¤ 70 CONT 19 CINT 66 COS 61 CIRCLE 54 CSAVE 22 CLEAR 38 CSNG 67 CLOAD 22 CSRLIN 76 CLS 48 CLOSE 46 SCREEN 49 DELETE 26 ELSE 31 DIM 37 END 35 DRAW 56 EOF 77 DATA 39 EXP 62 DEF 41 FILES 22 GOSUB 29 FIX 63 GOTO 29 FOR 32 FRE 65 HEX¤ 75 IF 31 IMP 68 INKEY¤ 73 INPUT 44 INT 64 KEY 37 LEN 70 LIST 25 LLIST LOAD 20 LOCATE 50 LOG 63 LET 28 - 97 - У1.00031-01 35 01 LPOS 77 LINE 53 MID¤ 71 NEW 28 MOD NEXT 32 MERGE 21 NOT 44 ON 33 PAINT 55 OR 15 PEEK 68 OUT 47 PI 62 OPEN 45 POINT 52 OCT¤ 75 POKE 46 POS 76 PRESET 52 PRINT 43 PSET 51 REM 36 SAVE 21 RENUM 26 SGN 64 RETURN 30 SIN 60 RND 65 SQR 60 RUN 18 STEP READ 40 STOP 34 RESTORE 40 STR¤ 74 SYSTEM 20 STRING¤ 72 SPC 79 TAB 78 VAL 73 TAN 61 THEN 31 TO TROFF 59 TRON 59 XOR 15 П_Р_И_М_Е_Ч_А_Н_И_Е. В более поздних версиях БЕЙСИК-системы зарезервированных слов может быть больше. - 98 - У1.00031-01 35 01 ------------------------------------------------------------------ ! ЛИСТ РЕГИСТРАЦИИ ИЗМЕНЕНИЙ ! !------------------------------------------------------------------! ! ! НОМЕРА ЛИСТОВ (СТРАНИЦ) ! ВСЕГО ! !ВХОДЯЩИЙ ! ! ! ! !-------------------------! ЛИСТОВ ! N !N СОПРОВО!ПОДП!ДА! ! !ИЗМЕ !ЗАМЕ !НОВЫХ!АННУЛИ-!(СТРАНИЦ)!ДОКУМЕН-!ДИТЕЛЬНО-! !ТА! !ИЗМ! НЕН ! НЕН ! !РОВАН- !В ДОКУМ. ! ТА. !ГО ДОКУМ ! ! ! ! ! НЫХ ! НЫХ ! ! НЫХ ! ! ! И ДАТА ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--! ! ! ! ! ! ! ! ! ! ! ! !---!-----!-----!-----!-------!---------!--------!---------!----!--!