. 50 CHAIN "набор данных I", 20 . . . Примечание: При работе с Бейсик-компилятором всем полям, указанным в инструкции COMMON, предварительно должна быть задана размерность в инструкции DIM (смотри пункт 9.1.). Для Бейсик-компилятора формат инструкции COMMON был расширен следующим образом: формат: COMMON //<имя>///<идентификатор переменной>//, <идентификатор переменной>/... При этом с помощью имени можно задать идентификатор какой-либо стандартной программы в машинном коде (максимально 6 символов). Благодаря этому при вызове какой-либо такого рода стандартной программы с помощью инструкции CALL (смотри пункт 12.2.) Не требуется задавать передаваемые параметры. При работе с бейсик-компилятором перед какой-либо инструкцией COMMON могут стоять только следующие инструкции описания: COMMON DIM OPTION BASE REM DEFDBL, DEFSNG, DEFINT, DEFSTR %INCLUDE (можно использовать только для бейсик-компилятора.) С помощью инструкции INCLUDE Ббейсик-компилятор может указать в какой- либо исходной программе какие исходные программные блоки следует считать из внешней памяти. Эти дополнительные строки программы вставляются вместо инструкции %INCLUDE. Формат: %INCLUDE <допустимый идентификатор набора данных> <допустимый идентификатор набора данных> представляет собой какой-либо допустимый в операционной системе идентификатор набора данных. Он задается в виде константы символьного типа, причем только имя данной инструкции его не обязательно заключать в кавычки. Тип набора данных автоматически принимается равным ".BAS". С помощью инструкции %INCLUDE можно вставлять только Бейсик-исходные программы (хранящиеся в коде ASCII). Они не могут содержать в свою очередь другие инструкции %INCLUDE. Внимание!!! Обязанность пользователя следить за тем, чтобы вставленная программа не вызывала конфликтных ситуаций с переменными, используемыми в других частях программы. Также следует обратить внимание на то, чтобы не было инструкций GOTO или GOSUB, приводящщих к несуществующим строкам. Номера строк вставленной программы должны быть упорядочены в соответствующей последовательности и первый номер строки должен быть больше номера строки инструкции %INCLUDE. Максимальный номер строки вставленной программы должен быть меньше номера строки, стоящей в вызывающей программе после инструкции %INCLUDE. Ограничения не действуют если программа компилируется с опцией /с. Инструкция %INCLUDE должна быть последней инструкцией в какой-либо строке. 13. Инструкции для ввода и вывода на экран или печать, в канал ввода-вывода или для адресов памяти в языке Бейсик. 13.1. Инструкция INPUT для заполнения переменных в процессе выполнения программы Инструкция INPUT позволяет присваивать переменным в процессе выполнения программы определенные значения в виде выражений. Формат: INPUT /;//"<последовательность символов>";/<переменная>/, <переменная>/... Или INPUT /;//"<последовательность символов>",/<переменная>/, <переменная>/... Указанная <последовательность символов> выдается для запроса на ввод на экран. Если последовательность символов на задана, то в качестве запроса на ввод используется только знак вопроса "?". Если после параметра <последовательность символов> используется ";",то в качестве запроса на ввод постоянно индицируется "?". Можно отменить выдачу знака вопроса, если вместо точки с запятой после параметра <последовательность символов> поставить запятую (формат 2). Ввод значений происходит в том порядке <переменных>, как они приведены в инструкции INPUT. Значения отделяются друг от друга запятой. Входные последовательности завершают клавишей "ВК". Количество введенных значений должно соответствовать количеству переменных. Если какая-либо входная последовательность завершается клавишей "ВК" когда еще не всем переменным были присвоены значения, то происходит новый запрос на ввод. Если введено значений больше, чем имеется переменных, то лишние значения игнорируются. Если вводятся недопустимые символы, то весь ввод отменяется и выдается новый запрос на ввод. В качестве переменной можно использовать любые числовые переменные, переменные типа символьной строки или переменные поля. Введенные данные должны соответствовать соответствующим типам переменных. При вводе для переменных типа символьной строки следует учитывать, что запятая считается при обработке разделителем. Если в входной строке символов требуется запятая, то входную строку символов следует заключить в кавычки "" "". Точно также следует использоватькавычки, если в начале и в конце строки символов имеются значащие пробелы. Пример: 10 INPUT "ввод A,B,C"; A%,B%,C% Примечание. Если ввод завершают клавишей "ВК", то одновременно курсор устанавливается в начало следующей строки экрана. Этот переход на новую строку можно устранить, если непосредственно после ключевого слова INPUT поставить точку с запятой. 13.2. Инструкция LINE INPUT для ввода любых последовательностей строк в процессе выполнения программы инструкция LINE INPUT принимает символ, введенный пользователем с клавиатуры, и присваивает его в качестве символьной строки какой-либо заданной переменной типа символьной строки. Формат: LINE INPUT /;//"<последовательность символов>";/ <переменная типа символьной строки> или LINE INPUT /;//"<последовательность символов>",/ <переменная типа символьной строки> Заданная <последовательность символов> выводится на экран в ответ на запрос на ввод. Если последовательность символов не задана, то в качестве запроса на ввод используется только знак вопроса "?". Если после параметра <последовательность символов> используется ";", то постоянно в качестве запроса на ввод идицируется "?". Вывод знака вопроса можно отменить, если вместо точки с запятой после параметра <последовательность символов> поставить запятую (формат 2). Переменная типа символьной строки принимает вводимую последовательность символов. Принимаются все символы, включая кавычки, запятую и пробелы. Ввод завершают клавишей "ВК". Можно вводить максимально 254 символа. Пример: 10 LINE INPUT;"ввод переменных V";V Примечание: Если ввод завершают клавишей "ВК", то одновременно курсор устанавливается в начало следующей строки экрана. Этот переход на новую строку можно отменить, если непосредственно после ключевого слова INPUT поставить точку с запятой. 13.3. Инструкция PRINT для бесформатного вывода информации на экран С помощью инструкции PRINT можно выполнить бесформатный вывод информации на экран. Формат: PRINT /<список выражений для вывода>/;// или ? /<Список выражений для вывода>/;// <список выражений для вывода>=<выражение> /,<выражение>/... Или <список выражений для вывода>=<выражение> /;<выражение>/... Или <список выражений для вывода>=<выражение> /<выражение>/... <Выражение> может быть любым числовым выражением или выражением из символьных строк, числовой переменной или переменной типа символьной строки или числовой константой или константой типа символьной строки. Выражения можно отделять друг от друга с помощью ",", ";" или " ", при этом данные разделители можно использовать совместно. При разделении элементов списка запятой происходит вывод следующего элемента списка со смещением на 14 колонок вправо. При разделении элементов списка точкой с запятой или с помощью " " происходит последовательный вывод. Последнему элементу списка при каком-либо числовом значении отводится одна позиция. Каждая инструкция PRINT начинает вывод с новой строки в том случае, если после последнего элемента списка не следует точка с запятой или запятая. В данном случчае вывод продолжается с соответствующего интервала в той же строке. Если инструкция PRINT задана без параметров, то она выполняет переход к следующей строке (вывод пустой строки). Если происходит превышение формата строки, то автоматически выполняется переход на новую строку и продолжение печати. При выводе чисел с одинарной точностью на печать выдаются 6 цифр. Если для вещественных чисел с одинарной точностью количество действительных больше 6, то происходит представление в полулогарифмическом виде (например, 10^(-6) как 0.000001, Но 10^(-7) как 1е-7). Для вещественных чисел с двойной точностью для представления чисел используются 16 цифр. Числа, для которых требуется больше 16 цифр, также представляются в полулогарифмическом виде с помощью экспоненты. Вместо ключевого слова "PRINT" можно использоватьтакже знак вопроса "?". Примеры: 10 B%=4 20 PRINT B%,B%+4 30 PRINT B%*(-4),B%^4; 40 PRINT B%-4 RUN 4 8 -16 256 0 OK 10 FOR I%=I TO 5 20 I%=I%+5 30 K%=K%+10 40 ? I%;K% 50 NEXT RUN 5 10 10 20 15 30 20 40 25 50 OK 10 B%=3 20 PRINT "B равно"; B% 30 PRINT "B*B равно" B%*B%"и"; 40 PRINT "B+B павно" B%+B% RUN б равно 3 B*B равно 9 и B+B равно 6 ОК 13.4. Инструкция PRINT USING для форматированного вывода на экран Инструкция PRINT USING позволяет явно и точно контролировать формат вывода данных. Можно распечатать константы или значение переменных каждого типа. Формат: PRINT USING <указание формата>;<список выражений для вывода>/;/ <список выражений для вывода>=<выражение>/;<выражение>/... Выражение может быть любым числовым выражением или выражением из символьных строк, какой-либо числовой переменной или переменной типа символьной константы или константой типа символьной строки. Элементы списка отделяют друг от друга точкой с запятой. Указание формата может быть переменной типа символьной строки или заключенной в " " константой типа символьной строки. Ниже приведены символы формата и их функции: -----------I-------------------I--------------------------------------------- Символ I Вывод I Примечание -----------I-------------------I--------------------------------------------- I Первый символ вы- I Символ выбирается из значения выражения из ! I ражения из сим- I символьных строк, начиная слева. I вольных строк. I -----------I-------------------I---------------------------------------------- I Цифра или пробел I Вывод цифры или пробела, если в данном или = I или знак минус I следующем месте стоит ведущий нуль. Отрица- I I тельный знак получается для отрицательных I I чисел. -----------I-------------------I--------------------------------------------- I Десятичная точка I Вывод десятичной точки, если выводимое чис- . I или пробел I ло является десятичным числом, иначе вывод I I пробелом -----------I-------------------I--------------------------------------------- I Знак числа + или -I Перед каждым числом устанавливается знак + I I числа. Знак числа может быть установлен I I также после числа. -----------I-------------------I--------------------------------------------- I Знак - или пробел I Распечатывается отрицательный знак числа, - I I для положительных чисел устанавливается I I пробел. Знак числа может быть установлен I I также после числа. -----------I-------------------I--------------------------------------------- I I Вывод * вместо ведущих нулей перед первой ** I * I цифрой или перед знаком числа. Оба символа I I * определяют две позиции в формате. -----------I-------------------I--------------------------------------------- I I Запятая слева от десятичной точки указывает , I , I на то, что все три позиции запятой для от- I I деленя тысяч должны быть заполнены. В I I формате описывается одна позиция. -----------I-------------------I--------------------------------------------- I I Вместо S ставится плюс или минус. DD ^^^^ I ESDD I представляют собой две цифры. Данный формат I I вызывает вывод числа в экспоненциальном I I представлении. -----------I-------------------I--------------------------------------------- ___ I I Знак подчеркивания действует таким образом, Знак под- I Литерал I что следующий непосредственно за ним символ черкивания I I распечатывается без изменения как символ и I I не интерпретируется как управляющий символ. -----------I-------------------I--------------------------------------------- I I Описывается поле для вывода символьной & I Значение символь- I строки переменной длины, т.Е. Символьная I символьной строки I строка выводится в своем первоначальном I I виде. -----------I-------------------I--------------------------------------------- ///;/ LPRINT USING <указание формата>;<список выражений для вывода>/;/ <список выражений для вывода>=<выражение>/;/<выражение>/... <Выражение> может быть любым числовым выражением или выражением из символьных строк, какой-либо числовой переменной или переменной типа символьной строки или числовой константой или константой типа символьной строки. Отдельные элементы списка отделяются друг от друга точкой с запятой. Количество символов для одной строки печати ограничено до 132 и может быть произвольно установлено с помощью инструкции WIDTH LPRINT (смотри пункт 13.7.). 13.6. Инструкция WRITE для вывода на экран С помощью инструкции WRITE можно выдавать на экран числовые значения и значения символьных строк. Вывод происходит без интервалов. В качестве разделителя используется запятая. Значения символьных строк заключаются в кавычки " ". Формат: WRITE /<список выражений для вывода>/ <список выражений для вывода>=<выражение>/;<выражение>/... <Выражение> может быть любым числовым выражением или выражением из символьных строк, какой-либо числовой переменной или переменной типа символьной строки или числовой константой типа символьной строки. Отдельные элементы списка отделяются друг от друга запятой. Если параметры на заданы, то инструкция WRITE вызывает переход на следующую строку. Пример: 10 м%=20: N%=40: Z$="STRING" 20 WRITE M%,N%,Z$ 30 PRINT M%,N%,Z$ RUN 20,40,"STRING" 20 40 STRING OK 13.7. Инструкция WIDTH для установки длины строки вывода С помощью инструкции WIDTH задают количество символов в строке вывода на экран или устройство печати. Формат: WIDTH /LPRINT/ <длина> <длина> может быть целочисленным выражением, целой переменной или целой константой. Она может принимать значения между 15 и 255 включительно. Стандартно установлено значение 80 (экран) или 132 (устройство печати). Это значение определяет количество символов , которое может быть об'единено в одну строку. При достижении длины строки в конце автоматически вставляется символ возврата каретки "CR". Вывод следующих символов происходит на следующей строке. Если задана опция LPRINT, то установка длины строки относится к устройству печати, в противном случае к экрану. Пример: 40 PRINT "1...5...10...15...20...25...30" RUN 1...5...10...15...20...25...30 OK 10 WRITE 20 40 PRINT "1...5...10...15...20...25...30" RUN 1...5...15...20 ...25...30 OK 13.8. Инструкция OUT для физического вывода какого-либо значения в канал вывода. Инструкция ОUТ обеспечивает непосредственную запись в выходной порт. Формат: OUT,<число> Параметры и <число> представляют собой целочисленные выражения, целые переменные или целые константы, которые могут принимать значения между 0 и 255 включительно. Указание: Данная инструкция является инверсной инструкцией по отношению к инструкции INр (смотри пункт 14.3.). Пример: 100 оUT 3,80 13.9. Инструкция POKE для записи заданного байта по заданному адресу Инструкция POKE пересылает один байт по какому-либо адресу, лежащему между 0 и 65535. Формат: POKE <адрес>,<значение> Параметры можно задавать как в десятичном так и в шестнадцатеричном виде. <Адрес> может быть какой-либо числовой переменной или числовой константой целого типа. <Значение> может быть каким-либо числовым выражением, числовой переменной или числовой константой целого типа и принимать значения между 0 и 255. Указание: Данная инструкция является инверсной инструкцией по отношению к инструкции PEEK (смотри пункт 14.4.). Пример: 10 A%=PEEK(&H8000) 20 PRINT HEX$(A%) 30 POKE &H8000,&H20A 40 A5=PEEK(&H8000) 50 PRINT HEX$(A%) 60 END 80 POKE 32768,42 RUN 24 2A OK В следующем примере стандартная программа в машинном коде из программного набора данных в оперативную память, при дальнейшем выполнении программы ее можно вызвать с помощью CALL (смотри пункт 12.2.) Или USR (смотри пункт 12.4.). . . . 100 READ ADR% 110 READ DAT% 120 IF DAT%=0 THEN 160 130 POKE ADR%, DAT% 140 ADR%=ADR%+1 150 GOTO 110 160 . . . . 1000 DATA 35720,34,120,79,250,00,00,00,36,73 1010 DATA 220,37,33,-1 Следует обратить внимание на то, что в данном примере область с 35720 зарезервирована инструкцией CLEAR (смотри пункт 5.4.). 13.10. Инструкция WAIT для синхронизации с внешними устройствами Инструкция WAIT позволяет синхронизировать связные процессы при работе с внешними устройствами. Формат: WAIT <адрес порта>,/,/ Алгоритм ожидания работает следующим образом: Значение, лежащее по адресу порта, связывается с значением XOR-маски логической операцией исключающее или. Результат связывается с значением AND- маски логической операцией И. Если результат отличается от нуля, то Бейсик- программа продолжает выполняться. Если XOR-маска не задана, то стандартно используется значение нуль. <Адрес порта>, и должны быть целыми переменными и целыми константами. Целые значения должны лежать между 0 и 255 включительно. Пример: 100 WAIT 17,7,1 при этом выполняется следующий алгоритм: проверяется канал с адресом 17. На данном канале имеется, например, 6. (XOR 1) AND 7=0 Результат не равен нулю; таким образом, программа продолжает выполняться. Если, например, теперь в канале будет значение 1, то получим: (1 XOR 1) AND 7=0 Результат равен нулю; инструкция WAIT выполняется снова. 13.11. Инструкция SWAP для обмена значеничми двух любых переменных одинакового типа С помощью инструкции SWAP можно выполнить обмензначениями между двумя переменными одинакового типа. Формат: SWAP <переменная - 1>,<переменная - 2>. В качестве переменных можно использовать целые переменные, вещественные переменные одинарной и двойной точности и переменные типа символьной строки. Пример: 10 A$="A1" 20 A2$="*" 30 A3$="A2" 40 A4$="=A3" 50 PRINT A1$;A2$;A3$;A4$ 60 SWAP A1$,A3$ 70 PRINT A1$;A2$;A3$;A4$ RUN A1*A2=A3 A2*A1=A3 OK