Электроника МС 0585 Бейсик
| Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. |
Электроника МС 0585 Бейсик — перепечатка документа «.00065-01 35 01 (язык Бейсик, программное обеспечение ПВК)». Текст распознан со скана; неразборчивые места помечены «[нрзб.]», сомнительные чтения — «[?]».
Программное обеспечение ПВК «Электроника МС 0585». БЕЙСИК-П. Описание языка. .00065-01 35 01
.00065-01 35 01
Аннотация
Настоящий документ является описанием языка программирования БЕЙСИК-П для микро ЭВМ «Электроника МС 0585».
В документе описаны основные элементы языка Бейсик: константы, переменные, массивы, операторы, объявления, функции, обращения к подпрограммам, а также средства обмена данными и средства графики.
Перед использованием данного документа необходимо ознакомиться с документами [1], [2].
.00065-01 35 01
1. Общие сведения
БЕЙСИК-П является интерактивным языком программирования и предназначен для разработки программ, для решения инженерно-технических задач, а также в сфере обучения.
БЕЙСИК-П имеет средства для:
- формирования графических изображений;
- выполнения обработки файлов прямого и последовательного доступа;
- динамического изменения размерности массивов;
- выполнения вычислений с обычной и двойной точностью;
- использования расширенного набора математических функций;
- выполнения обработки текстовых данных с помощью большого набора текстовых функций;
- программной обработки ошибок, возникающих при выполнении программы.
БЕЙСИК-П имеет относительно простой синтаксис, что обеспечивает сравнительно легкое и быстрое его освоение.
.00065-01 35 01
2. Способ описания языка
В документе приняты следующие соглашения:
- элемент или группа элементов, заключенные в квадратные скобки ([]), являются необязательными;
- элемент или группа элементов, предшествующие многоточию (...), могут быть повторены;
- элементы из латинских букв и специальных символов, являющиеся ключевыми словами (в форматах предложений они подчеркнуты), записываются точно так же, как они записаны в формате предложения;
- элементы, следующие за ключевым словом, заменяются согласно описанию.
.00065-01 35 01
3. Элементы языка
3.1. Структура языка
Каждая программа на языке БЕЙСИК-П состоит из строк.
Строка состоит из одного или нескольких предложений, разделенных символами "\" или "//". После единственного или последнего предложения в строке эти символы не указываются.
Предложения БЕЙСИК-П делятся на три класса: невыполняемые (или объявления), выполняемые (или операторы) и комментарии.
Объявления описывают характеристики операндов, размещение данных. Операторы определяют действия в программе. Комментарии не оказывают никакого действия в программе и предназначены для документирования и улучшения читаемости текста программы.
Каждая строка программы должна быть снабжена номером строки. Номер строки - это целая константа от 1 до 32767. В одной программе номера строк не должны повторяться. Выполнение программы начинается со строки с наименьшим номером и завершается на строке с наибольшим номером или оператором останова (п.8.2.10).
Синтаксическими элементами предложения являются имена и операции. Имена используются для ссылок на объекты. Операции определяют действия над именованными объектами.
Один из частных случаев имен - имя массива. С именем массива должен быть связан размер идентифицируемого массива, определяемый в описании массивов. Имя массива, дополненное индексом, используется для идентификации конкретного элемента массива.
Имена данных и операции могут быть связаны в выражения, которые служат для задания правил вычисления некоторого значения. Это значение получается в результате выполнения указанных в выражении операций над именованными данными.
Программа может использовать функции, выполняющие отдельные процедуры процесса обработки данных.
3.2. Алфавит языка
При написании программ на языке БЕЙСИК-П используются только символы, входящие в алфавит языка. Алфавит делится на три группы символов: цифры, буквы и специальные символы.
3.2.1. Цифры
Цифра - это один из десяти символов: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
3.2.2. Буквы
Буква - это один из символов латинского алфавита: 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.
Примечание. В БЕЙСИК-П в качестве символов алфавита можно использовать строчные буквы латинского алфавита. При вводе они заменяются на соответствующие прописные буквы, кроме тех случаев, когда они используются в текстовых данных.
3.2.3. Специальные символы
Специальный символ - это один из двадцати трех символов, указанных в табл.3.1.
| Символ | Название символа |
|---|---|
| (пробел) | Пробел |
| = | Равно |
| + | Плюс |
| - | Минус |
| * | Звездочка |
| / | Дробная черта |
| \ | Обратная дробная черта |
| ^ | Стрелка вверх |
| ( | Круглая левая скобка (левая скобка) |
| ) | Круглая правая скобка (правая скобка) |
| , | Запятая |
| . | Точка |
| ; | Точка с запятой |
| % | Процент |
| ¤ | Знак денежной единицы |
| # | Номер |
| ' | Апостроф |
| " | Кавычки |
| > | Больше |
| < | Меньше |
| : | Двоеточие |
| ! | Восклицательный знак |
| _ | Знак подчеркивания |
Примечание. При отсутствии на клавиатуре символа "стрелка вверх" он может быть заменен на символ "логическое не".
3.2.3.1. Символ пробела
Кроме специально оговоренных случаев (п.п.4.3, 5.1.1.3), символ пробела не является значащим и поэтому может использоваться для улучшения наглядности программы в любом ее месте.
3.3. Символические имена
Символическое имя состоит из буквы, за которой могут следовать буквы, цифры и, в некоторых случаях, специальные символы "_" (знак подчеркивания), "%" или "¤".
4. Типы данных
В БЕЙСИК-П различают данные четырех типов: целые, вещественные обычной точности, вещественные двойной точности и текстовые.
4.1. Тип целый
Целое данное - это всегда точное представление целого значения. Оно может принимать только целые (положительные, отрицательные и нулевое) значения.
4.2. Тип вещественный обычной и двойной точности
Вещественное данное - это приближение вещественного значения. Оно может принимать положительные, отрицательные и нулевое значения
Вещественное данное обычной точности занимает в памяти в два раза больше места, чем целое данное.
Вещественное данное двойной точности занимает в памяти в два раза больше места, чем вещественное данное обычной точности.
4.3. Тип текстовый
Текстовое данное - это любая последовательность символов, входящих в кодовый набор КОИ-7 или КОИ-8. В текстовом данном символ пробела является значащим.
5. Идентификация данных, функций и файлов
Идентификация данных производится с помощью имен, используемых в качестве ссылок на данные.
Термин "ссылка" используется при такой идентификации данного, когда подразумевается, что текущее значение этого данного становится доступным при выполнении предложения (оператора), содержащего эту ссылку. Если данное идентифицируется, но его значение не обязательно становится доступным, то говорят, что данное именуется. Один случай, когда данное именуется, представляет собой интерес - это когда данному присваивается значение и тем самым производится определение или переопределение (значения) данного, т.е. данное либо впервые получает некоторое конкретное значение, либо ему присваивается новое значение. В случае функции термин ссылка означает, что действия, определяемые этой функцией, станут доступными при выполнении предложения (оператора), содержащего эту ссылку.
5.1. Имена данных и их тип
С помощью имен данных идентифицируются константы, переменные, массивы и элементы массивов.
С именем, используемым для идентификации данного, связывается вполне определенный тип.
Вид константы определяет как значение, так и тип этой константы.
Тип переменной и массива устанавливается следующим образом:
- последний символ "%" в имени указывает на тип целый;
- последний символ "¤" в имени указывает на тип текстовый;
- имена без указания символа "%" или "¤" указывают на тип вещественный обычной или двойной точности. По умолчанию все переменные и массивы вещественного типа - обычной точности.
Явное указание типа задается при помощи объявления типа (п.п.7.3, 7.4) или по команде SET DOUBLE и SET NO DOUBLE (см.[2]).
В дальнейшем для простоты изложения данные вещественного типа обычной точности и данные вещественного типа двойной точности будут называться просто данными вещественного типа.
5.1.1. Константы
Константа является данным, которое всегда определено в процессе выполнения программы и не может быть переопределено (т.е. изменено). Для каждого типа данных имеются свои правила записи констант.
5.1.1.1. Целая константа
Целая константа в БЕЙСИК-П записывается в виде целого числа из диапазона от -32768 до 32767, за которым следует символ "%".
Отрицательной константе предшествует знак минус. Для положительной константы знак плюс является необязательным.
Пример.
32767% -28%
5.1.1.2. Вещественные константы обычной и двойной точности
Вещественные константы обычной и двойной точности могут быть записаны в двух формах.
Основной формой записи вещественного числа является смешанная дробь вида
@P.Q
где @ - знак числа;
P - целая часть числа;
Q - дробная часть числа.
Одна из этих частей (либо целая, либо дробная) может отсутствовать. При отсутствии дробной части точку можно не указывать, ее наличие предполагается за последней цифрой справа.
Если необходимо представить очень большое или очень маленькое вещественное число, то удобнее пользоваться экспоненциальной формой представления.
Вещественное число в экспоненциальной форме состоит из целой или вещественной константы (мантиссы), за которой следует буква E (указывающая степень 10), а затем целое число со знаком (экспонента). Значение экспоненты всегда состоит из двух цифр.
Абсолютное значение вещественной константы должно находиться в диапазоне от 10E-38 до 10E+38.
Вещественная константа обычной точности содержит от одного до шести символов с учетом точки и дробной части; вещественная константа двойной точности - от 7 до 16 символов с учетом возможной точки и дробной части.
Пример.
.327 -5 4.2E-3 7.31200228771345
5.1.1.3. Текстовая константа
Текстовая константа - это последовательность символов из кодового набора КОИ-7 или КОИ-8, заключенная в апострофы или кавычки. Если одним из символов текстовой константы является апостроф, то текстовая константа заключается в кавычки; если же одним из символов текстовой константы являются кавычки, текстовая константа заключается в апострофы.
Текстовая константа имеет значение "пусто", если она не содержит ни одного символа, т.е. изображается только двумя кавычками или апострофами.
Максимальное число символов в текстовой константе - 255.
Пример.
'FORMULA' "НАПРАВЛЕНИЕ"
5.1.2. Переменные
Переменная есть данное, идентифицируемое символическим именем, значение которого может изменяться в процессе выполнения программы. На это данное можно ссылаться и его можно определять (т.е. присваивать ему значение).
Символическое имя переменной может содержать до 32 символов, включая знак подчеркивания и указатель типа: символ "%" или "*".
Пример.
K* - переменная типа текстовый D% - переменная типа целый R - переменная типа вещественный
5.1.3. Массивы
Массив есть упорядоченный набор данных одного типа, имеющий одно или более измерений. Максимальное число измерений массива равно 7. Массив идентифицируется символическим именем, содержащим до 32 символов, включая знак подчеркивания и указатель типа: символ "%" или "*".
Массивы могут размещаться как в оперативной памяти, так и на внешних устройствах (виртуальные массивы). Способ размещения массивов указывается с помощью объявления (см. п.п.7.1, 7.2).
Характеристики массива задаются описанием массива.
5.1.3.1. Элемент массива
Элементом массива является один из компонентов набора данных, образующих массив. Элемент массива идентифицируется указанием имени массива, непосредственно за которым следует дополнительная конструкция, называемая индексом.
5.1.3.2. Индекс
Индекс представляет собой заключенный в круглые скобки список индексных выражений. Если число индексных выражений два или более, то они разделяются запятой. Число индексных выражений должно соответствовать объявленному числу измерений массива.
Индексным выражением может быть любое арифметическое выражение (п.6.1), значение которого должно быть больше или равно нулю.
Если индексное выражение имеет вещественное значение, то это значение приводится к типу целый путем усечения.
5.1.3.3. Описание массива
Описание массива задает характеристики массива: указывает символическое имя массива, число измерений и размеры по каждому измерению.
Описание массива имеет вид
V(K)
где V - символическое имя массива;
K - список границ.
Список границ состоит из одной или более констант или переменных (верхних границ), разделенных запятой.
Число констант или переменных, образующих список границ, указывает число измерений массива. Максимальное число измерений массива равно 7. Значения констант или переменных в описании массива определяют максимальные значения, которые может принимать индекс этого массива. Значение индекса не должно быть меньше нуля или больше максимального значения, определенного описанием этого массива.
Пример.
A%(10,35) - двумерный массив типа целый C*(100) - одномерный массив типа текстовый W(7,32) - двумерный массив типа вещественный
5.2. Функции
Функция позволяет получить результат, который называется значением функции и используется в точке ссылки на эту функцию. Имеется две категории функций: внутренние и встроенные.
Внутренняя функция - это последовательность вычислений, определяемых с помощью объявления внутренних функций (п.7.6).
Встроенные функции представляют собой реализацию наиболее часто встречающихся математических и текстовых функций.
Ссылка на функцию производится при помощи указателя функции, состоящего из имени функции, за которым следует список фактических параметров, заключенный в скобки. Тип функции определяется по имени функции аналогично определению типа данных. Символическое имя внутренней функции должно начинаться с букв FN и может содержать до 32 символов, включая знак подчеркивания и указатель типа. Символическое имя встроенной функции заранее известно интерпретатору и содержит от трех до пяти символов, включая указатель типа. Если список параметров содержит более одного параметра, то параметры отделяются друг от друга запятой.
5.2.1. Формальные и фактические параметры
Формальный параметр функции представляет переменную. Фактическим параметром может быть константа, имя переменной, имя элемента массива, имя функции или выражение. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами в объявлении внутренней функции.
5.3. Файлы
Файл есть организованная определенным образом совокупность записей, хранящихся на внешнем носителе.
Запись состоит из последовательности значений данных.
Файл определяется спецификацией, имеющей вид:
"УСТРОЙСТВО:<СПРАВОЧНИК>ИМЯ ФАЙЛА.ТИП; ВЕРСИЯ"
Имя файла идентифицируется символическим именем, содержащим до девяти буквенно-цифровых символов.
Описание спецификации файла приведено в документе [2].
6. Выражения
Выражения формируются из операндов и знаков операций.
В зависимости от знаков операций и типов операндов выражения подразделяются на арифметические, текстовые, отношения и логические.
6.1. Арифметические выражения
Арифметическое выражение формируется из знаков арифметических операций и арифметических операндов. Как выражение, так и входящие в него операнды могут иметь тип целый или вещественный.
В табл. 6.1 приведены знаки арифметических операций, расположенные в порядке убывания приоритета арифметических операций.
| Знак операции | Представляемая операция |
|---|---|
| +, - | Унарные плюс, минус |
| ^ (или **) | Возведение в степень |
| *, / | Умножение, деление |
| +, - | Сложение, вычитание |
Два знака арифметических операций нельзя располагать рядом. Исключение составляет комбинация унарного плюса или минуса и любого другого знака арифметической операции.
Примечание. Унарный плюс перед положительным числом игнорируется. Арифметический операнд - это либо константа, либо имя переменной, либо имя элемента массива, либо имя функции, либо другое арифметическое выражение, взятое в скобки. Вычисление арифметических выражений, не содержащих скобки, производится следующим образом:
- Первыми вычисляются функции;
- операции более высокого приоритета выполняются до операций более низкого приоритета;
- операции одинакового приоритета выполняются в порядке следования слева направо.
При вычислении арифметических выражений, содержащих скобки, сначала обрабатываются выражения, взятые в скобки.
Круглые скобки допускают многократное вложение, т.е. одни круглые скобки могут быть заключены внутри других. В этом случае первым вычисляется выражение в самых внутренних круглых скобках, затем - выражение в следующих круглых скобках, и так до тех пор, пока не будет вычислено выражение в крайних скобках.
В арифметических выражениях допускаются арифметические операции над операндами различного типа. Исключение составляет операция возведения в степень: запрещается возводить в вещественную степень отрицательные числа типа целый или вещественный. Результат выполнения арифметической операции над двумя арифметическими операндами одного и того же типа будет того же самого типа. Если операнды имеют тип целый, результат приводится к типу целый усечением, а не округлением. Например, 5%/3% равно 1. Вещественные данные двойной точности усекаются, если они присваиваются переменным вещественного типа обычной точности. Результат выполнения арифметической операции над операндами типа целый и вещественный обычной точности будет вещественного типа обычной точности. Результат выполнения арифметической операции над операндами вещественного типа обычной и двойной точности будет вещественного типа двойной точности.
Примеры:
A%+B%
Значение этого выражения будет целого типа.
C1*D%
Значение этого выражения будет вещественного типа обычной или двойной точности в зависимости от типа переменной C1.
A+B*C
Значение этого выражения будет вещественного типа двойной точности, если хотя бы один из операндов - вещественного типа двойной точности.
B=(20*(16+(8^2)))
Первым вычисляется значение (8^2), затем (16+64) и, наконец, (20*80).
6.2. Текстовые выражения
Текстовые выражения формируются из знака "+" и текстовых операндов. Знак "+" представляет операцию конкатенации и служит для объединения текстовых операндов.
Текстовый операнд - это либо текстовая константа, либо имя текстовой переменной, либо имя текстовой функции, либо другое текстовое выражение, взятое в скобки.
Значением текстового выражения, состоящего из двух текстовых операндов и знака операции "+", является текстовая константа, равная значению первого операнда, за которым следует значение второго операнда без каких-либо символов между ними.
Пример.
"CON"+"STANT"
Это выражение будет иметь значение "CONSTANT".
6.3. Отношения
Отношение состоит из двух арифметических или текстовых выражений, разделенных знаком операции отношения, и принимает значение "истина" или "ложь" в зависимости от выполнения или невыполнения этого отношения. В табл. 6.2 приведены знаки операций отношения.
| Знак операции | Представляемая операция |
|---|---|
| = | Равно |
| < | Меньше |
| <= или =< | Меньше или равно |
| > | Больше |
| >= или => | Больше или равно |
| <> или >< | Не равно |
Примечание. Символы =<, =>, >< заменяются при вводе интерпретатором на символы <=, >= и <> соответственно.
Все операции отношения имеют одинаковый приоритет и выполняются в порядке следования слева направо. Недопустимо сравнивать арифметическое выражение с текстовым. В операциях отношения сравнение текстовых выражений осуществляется посимвольно слева направо.
Два текстовых выражения равны, если их значения имеют одинаковое число символов и содержат одни и те же символы (включая пробелы) в одном и том же порядке.
Значения текстовых выражений, имеющих различное число символов, являются различными. При сравнении значений этих текстовых выражений они предварительно выравниваются путем приписывания справа к данному, имеющему меньшее число символов, пробелов. Из двух текстовых выражений то имеет большее значение, первый несовпадающий символ которого имеет большее значение в коде КОИ-7 или КОИ-8.
Примеры:
7<>2
Пусть A*='ABC', B*='ABL'[?], тогда B*>A*.
Пусть A*='ABC', B*='ABCDEF', тогда A*<B*. При сравнении этих текстовых переменных значение A* предварительно дополняется справа тремя пробелами.
6.4. Логические выражения
Логическое выражение формируется из знаков логических операций и операндов.
В табл. 6.3 приведены знаки логических операций, расположенные в порядке убывания приоритета логических операций.
| Знак операции | Представляемая операция |
|---|---|
| NOT | Логическое отрицание |
| AND | Логическое произведение |
| OR | Логическая сумма |
| XOR | Логическое исключающее или |
Операнд - это константа, имя переменной, имя элемента массива типа целый или вещественный, отношение или другое логическое выражение.
Результатом вычисления логического выражения является единственное значение: "истина" или "ложь".
В табл. 6.4 приведены результаты выполнения логических операций над операндами A и B. Буквой T обозначено значение "истина", F - значение "ложь".
| A | B | NOT A | A AND B | A OR B | A XOR B |
|---|---|---|---|---|---|
| T | T | F | T | T | F |
| F | T | T | F | T | T |
| T | F | F | T | T | |
| F | F | F | F | F |
Пример.
A AND B OR C
Пусть A принимает значение "истина", B - "ложь" и C - "истина". Тогда при вычислении этого выражения получается значение "ложь".
6.4.1. Числовые эквиваленты для значений "истина" и "ложь"
Интерпретатор рассматривает любое ненулевое значение как "истина", а нулевое значение - как "ложь". В частности, при вычислении отношения "ложь" присваивается значение "0", "истина" - значение "-1".
Примеры:
A%=(B%=C%)
Переменной A% присваивается значение "-1", если значение B% равно значению C%, и значение "0" в противном случае.
(A>B) AND (C<D)
Каждое из отношений A>B и C<D принимает значение "истина" (-1) или "ложь" (0) в зависимости от значений переменных A, B, C и D. Если оба отношения имеют значение "истина", то при выполнении логической операции AND получается значение "истина", иначе - значение "ложь".
6.4.2. Целые числа в логических выражениях
Целые числа занимают в памяти 16 двоичных разрядов (битов).
Логические операции над числовыми значениями типа целый или вещественный (вещественные значения предварительно приводятся к типу целый) выполняются по-битно. Значение каждого бита результата определяется комбинацией соответствующих битов операндов (см. табл.6.4). Пример.
J%=5 \K%=6\ I%=J% AND K%
Числа 5 и 6 представляются в памяти следующим образом:
5=0000000000000101 6=0000000000000110
В результате выполнения логической операции AND переменной I% присваивается значение "истина", так как результат выполнения операции не равен 0.
Иногда при выполнении логических операций над числовыми значениями, отличными от "-1" и "0", получается неправильный результат, например,
A%=0100100001000001 - "ИСТИНА" NOT A%=1011011110111110 - "ИСТИНА"
или
X%=0000101100111101 - "ИСТИНА" Y%=0010000010000100 - "ИСТИНА" X% AND Y%=0000000000000000 - "ЛОЖЬ"
Во избежании подобных ситуаций в качестве "истина" используйте значение "-1", в качестве "ложь" - "0".
Пример.
10 FALSE%=0%
20 TRUE%=-1%
.
.
.
150 D%=TRUE%
.
.
.
200 IF NOT D% THEN 300
.
.
.
В данном случае будет получен правильный результат.
6.5. Порядок выполнения смешанных выражений
Если выражение содержит знаки арифметических операций, знаки логических операций и знаки отношения, то порядок выполнения операций будет следующий: сначала выполняются арифметические операции, затем операции отношения и, наконец, логические операции.
Этот порядок может быть изменен, если использовать круглые скобки: сначала вычисляется все, что стоит в круглых скобках.
Пример.
I% OR K%-2%*X>Y AND 3% ПОРЯДОК ВЫПОЛНЕНИЯ ОПЕРАЦИЙ ! ! ! ! ! ! ! !-!---!----------------1 ! ! ! ! ! !----!---!----------------2 ! ! ! ! !---!----------------3 ! ! ! !----------------4 ! ! !------------------------------5
7. Объявления
Объявления являются неисполняемыми предложениями языка БЕЙСИК-П. Имеется 6 типов объявлений:
- объявление массивов;
- объявление виртуального массива;
- объявление типа;
- объявление типа виртуального массива;
- объявление блока данных;
- объявление внутренней функции.
7.1. Объявление массивов
Объявления массивов используются для описания характеристик массивов, хранящихся в оперативной памяти: символическое имя, тип, число измерений, размеры по каждому измерению.
Объявление массивов имеет вид
DIM V(K)[,V(K)]... ---
где V - символическое имя массива;
K - список границ, состоящий из одной или более констант или переменных (верхних границ), разделенных запятой.
Символическое имя массива может содержать до 32 символов, включая знак подчеркивания и указатель типа: символ "%" или "*".
Число констант или переменных, образующих список границ, указывает число измерений массива. Максимальное число измерений массива равно 7. Значения констант или переменных в объявлении массива определяют максимальные значения, которые может принимать индекс этого массива. Значение индекса не должно быть меньше нуля или больше максимального значения, указанного в объявлении массива.
При объявлении массивов элементам массивов присваиваются начальные значения: элементам целых и вещественных массивов присваивается значение нуль, текстовых - значение "пусто".
7.2. Объявление виртуального массива
В отличие от обычных массивов, хранящихся в оперативной памяти, язык БЕЙСИК-П позволяет объявлять массивы, хранящиеся на внешних устройствах с произвольной выборкой (диск, дискета) - виртуальные массивы. Виртуальные массивы хранятся в файлах прямого доступа, структура записей которого указывается в объявлении виртуального массива.
Объявление виртуального массива имеет вид
DIM #N, V(K) [=E] ---
где N - номер канала;
V - символическое имя;
K - список границ;
E - целая константа, указывающая максимальное число символов элемента текстового виртуального массива. Значение константы E округляется до степени двух (1,2,4,8,16,32,...,256). Максимальное допустимое значение E=256, значение по умолчанию E=16.
Виртуальные массивы, как и массивы в оперативной памяти, могут быть многомерными.
В виртуальных массивах могут храниться числовые и текстовые данные. В одном виртуальном массиве могут храниться данные только одного типа.
При объявлении виртуальных массивов числовым элементам массива не присваивается значение нуль, а текстовым - значение "пусто".
Способ определения виртуальных массивов, состоящих из текстовых элементов, несколько отличается от способа определения обычных текстовых массивов. Число символов в каждом из элементов текстового виртуального массива не должно превышать максимального заданного числа символов E, в то время как элементы текстовых массивов могут иметь число символов от 0 до 256.
Перед использованием виртуального массива он должен быть открыт как файл прямого доступа с помощью оператора OPEN (см. п.8.5.2). Номер канала в операторе OPEN должен соответствовать номеру канала в объявлении виртуального массива. После того, как файл открыт, его данные могут обрабатываться так же, как элементы обычного массива. Объявление виртуального массива должно предшествовать появлению соответствующего оператора OPEN.
Пример.
10 DIM #1, A*(100)=32 20 OPEN " STRING" FOR INPUT AS FILE #1, VIRTUAL 30 FOR I=1 TO 99 40 A*(I)=A*(I)+A*(I+1) 50 NEXT I 60 END
В результате выполнения оператора OPEN открывается файл прямого доступа с именем "STRING", состоящий из элементов текстового виртуального массива A* с максимально допустимым числом символов для элементов равным 32. Затем организуется цикл для переопределения значений элементов текстового виртуального массива A*.
7.3. Объявление типа
Объявление типа используется для объявления массивов и переменных с указанием типа вещественных массивов и переменных обычной или двойной точности.
Объявление типа имеет вид
DECLARE T V [,V]... -------
где T - одно из ключевых слов: SINGLE или DOUBLE;
V - имя переменной или описание массива типа целый, вещественный или текстовый.
Объявление DECLARE определяет вещественные переменные и массивы как данные вещественного типа обычной точности, если в объявлении указано ключевое слово SINGLE, или как данные вещественного типа двойной точности, если указано ключевое слово DOUBLE.
Ключевые слова SINGLE и DOUBLE не оказывают влияния на объявление переменных и массивов типа целый и текстовый. При объявлении типа переменным и массивам типа целый и вещественный (обычной или двойной точности) присваиваются нулевые значения, типа текстовый - значение "пусто".
Нельзя определять один и тот же массив в объявлении DIM и объявлении DECLARE, а так же определять одну и ту же переменную дважды в объявлениях DECLARE.
Пример.
10 DECLARE DOUBLE A(7),D
DECLARE на строке 10 определяет массив A(7) и переменную D как данные вещественного типа двойной точности.
7.4. Объявление типа виртуального массива
Объявление типа виртуального массива позволяет объявлять виртуальный массив вещественного типа обычной точности или вещественного типа двойной точности.
Объявление типа виртуального массива имеет вид
DECLARE T #N, V(K) ------- -
где T - одно из ключевых слов: SINGLE или DOUBLE;
N - номер канала;
V(K) - описание массива вещественного типа.
Объявление определяет элементы виртуального массива как данные вещественного типа обычной точности, если указано ключевое слово SINGLE, или как данные вещественного типа двойной точности, если указано ключевое слово DOUBLE. Присвоения начальных значений элементам массива объявлением типа виртуального массива не производится. Использование виртуальных массивов вещественного типа обычной и двойной точности отвечает общим требованиям работы с виртуальными массивами (см. п.7.2).
7.5. Объявление блока данных
Объявление используется для организации блока данных, используемого оператором READ (п.8.5.9).
Объявление данных имеет вид
DATA D ----
где D - список данных.
Элементами списка данных являются константы типа целый, вещественный и текстовый. Текстовые константы могут указываться без ограничивающих символов апостроф и кавычки, при этом начальные и конечные пробелы игнорируются, а символ "," воспринимается как разделитель данных. Блок данных содержит все данные, указанные в объявлениях DATA, в порядке появления их в программе.
Объявление блока данных может содержать столько данных, сколько может быть записано на одной строке.
Если в объявлении блока данных отсутствует список данных, то в результате выполнения оператора READ (п.8.5.9) числовой переменной присваивается значение нуль, а текстовой переменной - значение "пусто".
Данные из блока данных должны соответствовать по типу элементам списка ввода оператора READ.
Объявление данных должно быть единственным на строке.
7.6. Объявление внутренней функции
Объявление внутренней функции имеет вид
DEF V[(A[,A...])] = E ---
где V - имя функции;
A - формальный параметр;
E - выражение.
Имя функции состоит из последовательности буквенно-цифровых символов, первые из которых символы "FN". Имя функции может содержать до 32 символов, включая указатель типа функции: символ "%" или "*".
В качестве формальных параметров используются только имена переменных. Число формальных параметров в объявлении внутренней функции не должно превышать 5. Выражение E должно иметь тот же тип, что и тип функции. Если выражение вещественного типа, а функция - целого типа, или наоборот, то E преобразуется к типу, определяемому именем функции.
В выражение E можно включать переменные, которых нет в списке формальных параметров. Эти переменные не являются формальными параметрами и при ссылке на внутреннюю функцию имеют присвоенное им в данный момент значение.
Ссылка на внутреннюю функцию производится при помощи указателя функции, состоящего из имени функции, за которым следует список фактических параметров, заключенный в скобки. Если список содержит несколько параметров, то они отделяются друг от друга запятой. Фактическим параметром в указателе внутренней функции может быть: константа, имя переменной, имя элемента массива, имя функции, выражение.
Фактические параметры, образующие список фактических параметров в указателе функции, должны соответствовать по порядку, числу и типу соответствующим формальным параметрам в объявлении внутренней функции.
При каждой ссылке на внутреннюю функцию вычисляется значение выражения E с использованием указанных фактических параметров в указателе функции.
Объявление внутренней функции может находиться в любом месте программы, в том числе и после ссылки на эту функцию.
Пример.
10 DEF FNB(A,D)=A+X^2 20 X=1 30 PRINT FNB(14,87) 40 X=2 50 PRINT FNB (14,87) 60 END RUN 15 18
В этом примере формальный параметр D и соответствующий ему фактический параметр B7 не используются. Печатаемый результат зависит от текущего значения переменной X: при X=1 значение функции равно 15, при X=2 равно 18.
8. Операторы
Имеется восемь типов операторов:
- оператор присваивания;
- операторы управления;
- оператор сравнения текстовых данных;
- оператор изменения последовательности случайных чисел;
- операторы ввода-вывода;
- операторы сегментации;
- операторы организации обработки ошибок;
- операторы графики.
8.1. Оператор присваивания
Оператор присваивания имеет вид
[LET] V [,V]... = E
где V - имя переменной или имя элемента массива типа целый, вещественный, текстовый;
E - выражение типа целый, вещественный, текстовый.
Оператор присваивания вычисляет выражение E и полученное значение присваивает переменной V.
В операторе присваивания нельзя смешивать числовые и текстовые данные, т.е. числовые значения можно присваивать только числовым переменным, а текстовые значения только текстовым переменным.
Если числовая переменная V целого типа, а выражение E имеет вещественное значение, то перед присваиванием значение E преобразуется к типу целый.
Пример.
10 A=482.5 20 LET D%=9.5 30 S$='ABP' 40 I%=J%>K% OR L%<>M%
В результате выполнения этих операторов переменная A будет иметь значение 482.5, переменная D% - значение 9, текстовая переменная S$ - значение ABP, а переменная I% - значение "0" или "-1" в зависимости от значения J%, K%, L% и M%.
Примечание. При каждом запуске программы переменные типа целый и вещественный имеют нулевое значение, а переменные типа текстовый имеют значение "пусто".
8.2. Операторы управления
Имеется десять операторов управления:
- безусловный оператор перехода;
- вычисляемый оператор перехода;
- условный оператор;
- оператор вызова подпрограммы;
- вычисляемый оператор вызова подпрограммы;
- оператор возврата;
- открывающий оператор цикла;
- закрывающий оператор цикла;
- оператор паузы;
- оператор останова.
8.2.1. Безусловный оператор перехода
Безусловный оператор перехода имеет вид
GOTO M
где M - номер строки.
В безусловном операторе перехода допускается раздельное написание ключевых слов: GO TO.
Результат выполнения этого оператора состоит в том, что следующим будет выполняться оператор (или операторы) на строке с номером M. Номер строки, к которой осуществляется переход в программе, может быть либо больше, либо меньше текущего номера строки. Это обеспечивает возможность перехода как вперед (к концу программы), так и назад (к началу программы).
На строке, содержащей несколько операторов, безусловный оператор перехода должен размещаться последним.
Пример.
10 A=2 20 GOTO 40 30 A=A**2 40 END
Оператор GOTO 40 передает управление оператору на строке 40. Оператор на строке 30 не выполняется.
8.2.2. Вычисляемый оператор перехода
Вычисляемый оператор перехода имеет вид
ON E GOTO M [,M]...
где E - арифметическое выражение;
M - номер строки.
В вычисляемом операторе перехода допускается раздельное написание ключевых слов: GO TO.
Оператор ON GOTO осуществляет переход на одну из нескольких возможных строк в зависимости от значения выражения E.
При выполнении оператора ON GOTO сначала вычисляется выражение E. Значение выражения E приводится к типу целый, если оно имеет вещественный тип.
Если значение выражения E равно 1, то происходит переход на строку, номер которой стоит первым в списке номеров строк, если значение выражения E равно 2 - то на строку, номер которой стоит вторым в списке номеров строк и т.д..
Если значение выражения E меньше единицы или больше числа номеров строк в списке, появляется сообщение об ошибке.
Пример.
200 ON A GO TO 50,20,100,300
Управление передается оператору на строке с номером 50, 20, 100 или 300, если значение A равно соответственно 1, 2, 3 или 4.
8.2.3. Условный оператор
Условный оператор имеет вид
IF L GOTO M
или
IF L THEN Q [ELSE U]
где L - отношение или логическое выражение;
M - номер строки программы;
Q, U - номер строки программы, оператор или группа операторов, разделенных символами "\" или "//".
При выполнении этого оператора сначала вычисляется L. Если L принимает значение "истина", то выполняется оператор (или группа операторов) на строке с номером M или Q или операторы, следующие за ключевым словом THEN.
Если L принимает значение "ложь", то выполняется оператор (или группа операторов) на строке с номером U или операторы, следующие за ключевым словом ELSE. В случае отсутствия ключевого слова ELSE управление передается оператору на следующей строке.
После ключевых слов THEN и ELSE могут следовать другие операторы IF.
Примеры:
10 IF A=1 THEN PRINT "A=1" \ A=5
Если отношение имеет значение "истина", т.е. A=1, то следующим будет выполняться оператор PRINT "A=1". В противном случае будет выполняться оператор на следующей строке.
10 IF A>B GOTO 30 20 PRINT B \ GOTO 40 30 PRINT A 40 C=A+B
Если отношение A>B имеет значение "истина", то следующим будет выполнятьтся оператор на строке с номером 30. В противном случае будут выполняться операторы на строке с номером 20.
10 IF I AND J THEN A=A**2 \ GOTO 20 ELSE A=A**3 20 PRINT A
Если логическое выражение I AND J имеет значение "истина", то будут выполняться операторы, следующие за ключевым словом THEN. В противном случае будет выполняться оператор, следующий за ключевым словом ELSE.
10 IF I<>0 THEN IF J<>0 THEN L=I/J ELSE L=J/I ELSE GOTO 100
Если I не равно нулю, то происходит проверка J на нуль, и в зависимости от значения J переменной L присваивается значение I/J или J/I. Если I равно нулю, то происходит переход на строку с номером 100.
8.2.4. Оператор вызова подпрограммы
Оператор вызова подпрограммы имеет вид
GOSUB M
где M - номер первой строки подпрограммы (точка входа).
В операторе вызова подпрограммы допускается раздельное написание ключевых слов: GO SUB.
В результате выполнения этого оператора происходит обращение к подпрограмме, точкой входа которой является строка с номером M. После завершения выполнения подпрограммы управление передается оператору, следующему за оператором вызова подпрограммы.
Подпрограмма может осуществлять вызов другой подпрограммы. Максимальное число таких вызовов зависит от объема свободной памяти.
Пример.
10 A=0
20 GOSUB 60 \ A=5
30 GOSUB 60 \ A=6
40 GOSUB 60
50 GOTO 110
60 B=A/2
.
.
.
100 RETURN
110 END
В результате выполнения этой программы трижды происходит обращение к подпрограмме со значением A, равными 0, 5 и 6 соответственно.
8.2.5. Вычисляемый оператор вызова подпрограммы
Вычисляемый оператор вызова подпрограммы имеет вид
ON E GOSUB M [,M]...
где E - арифметическое выражение;
M - номер первой строки подпрограммы (точка входа).
В вычисляемом операторе вызова подпрограммы допускается раздельное написание ключевых слов: GO SUB.
В результате выполнения этого оператора происходит обращение к одной из нескольких подпрограмм в зависимости от значения выражения E.
При выполнении оператора ON GOSUB сначала вычисляется выражение E. Значение выражения E приводится к типу целый, если оно имеет вещественный тип. Если значение выражения E равно 1, то управление передается на строку, номер которой стоит первым в списке номеров строк, если значение выражения E равно 2 - то на строку, номер которой стоит вторым в списке номеров строк и т.д..
Если значение выражения E меньше единицы или больше числа номеров строк в списке, то появляется сообщение об ошибке.
Пример.
20 ON A+B GOSUB 200, 300, 120
В зависимости от значения выражения A+B происходит обращение к одной из нескольких подпрограмм, точками входа которых являются строки с номерами 200, 300 и 120.
8.2.6. Оператор возврата
Оператор возврата имеет вид
RETURN
Этот оператор возвращает управление оператору, следующему за оператором вызова подпрограммы.
Этот оператор должен быть последним оператором в подпрограмме.
Если управление подпрограмме передается не через оператор GOSUB или ON GOSUB, то появляется сообщение об ошибке.
8.2.7. Открывающий оператор цикла
Открывающий оператор цикла имеет вид
FOR V=E1 TO E2 [STEP E3]
где V - имя переменной типа целый или вещественный;
E1, E2, E3 - арифметические выражения типа целый или вещественный.
Переменная V называется управляющей переменной, E1 называется начальным параметром, E2 - конечным параметром и E3 - параметром приращения. По умолчанию E3=1.
Под телом цикла понимается последовательность операторов, начиная с первого по порядку оператора, следующего за открывающим оператором цикла, и кончая закрывающим оператором цикла (п.8.2.8).
Результат выполнения открывающего оператора цикла состоит в следующем:
1) вычисляются начальный параметр, конечный параметр и параметр приращения; полученные значения, если они имеют
вещественный тип, приводятся к типу целый усечением;
2) управляющей переменной присваивается значение, преаставленное начальным параметром;
3) выполняется тело цикла;
4) если управление достигло закрывающего оператора, то значение управляющей переменной изменяется на значение параметра приращения;
5) если значение управляющей переменной, полученное в результате выполнения шага, не больше значения конечного параметра при положительном параметре приращения или соответственно не меньше значения конечного параметра при отрицательном параметре приращения, то повторяются описанные выше действия, начиная с шага 3). Если же указанные условия не выполняются, то открывающий оператор цикла считается завершенным и значение его управляющей переменной равно последнему присвоенному ей значению минус значение параметра приращения. После этого выполняется оператор, следующий за закрывающим оператором цикла;
6) после выхода из тела цикла в результате выполнения оператора перехода или условного оператора, т.е. способом, отличным от завершения оператора цикла, значение управляющей переменной этого оператора цикла определено и равно последнему ее значению, достигнутому по правилам предыдущих шагов.
Если значение начального параметра больше (меньше) значения конечного параметра, а значение параметра приращения больше (меньше) нуля, то цикл не выполняется и управление передается оператору, следующему за закрывающим оператором цикла.
Допускается использование вложенных циклов, где один цикл находится целиком внутри другого. В этом случае первый закрывающий оператор цикла должен содержать ту же управляющую переменную, что и последний открывающий оператор цикла, второй закрывающий оператор цикла должен содержать ту же управляющую переменную, что и предпоследний открывающий оператор цикла и т.д..
Примеры:
10 FOR I%=1% TO 5% 20 J%=I%^2 30 NEXT I%
В результате выполнения этих операторов организуется цикл с начальным параметром, равным 1, конечным параметром, равным 5, и параметром приращения, равным 1. Цикл вычисляет квадраты чисел от 1 до 5.
10 FOR I=2 TO 44 STER 2 20 LET I=44 30 NEXT I
В этой программе цикл выполняется только один раз, так как в строке 20 управляющей переменной присваивается значение 44 и она достигает значения конечного параметра.
10 S=0 20 FOR I=1 TO 5 30 FOR J=1 TO 7 40 S=S+I*J 50 NEXT J 60 NEXT I
В этом примере показано правильное вложение операторов цикла.
10 FOR I=1 TO 10 20 FOR J=1 TO 10 30 S=S+I*J 40 NEXT I 50 NEXT J
В этом примере показано неправильное вложение операторов цикла: первый закрывающий оператор цикла содержит управляющую переменную I первого открывающего оператора цикла, а должен содержать управляющую переменную J второго открывающего оператора цикла.
8.2.8. Закрывающий оператор цикла
Закрывающий оператор цикла имеет вид
NEXT V
где V - имя переменной типа целый или вещественный.
Имя переменной V в закрывающем операторе цикла должно совпадать с именем управляющей переменной в соответствующем открывающем операторе цикла.
Этот оператор используется в качестве последнего оператора в теле цикла.
При использовании открывающего оператора цикла в непосредственном режиме, он должен быть на одной строке с закрывшим оператором цикла.
8.2.9. Оператор паузы
Оператор паузы имеет вид
STOP
В результате выполнения этого оператора происходит приостановка выполнения программы и выдается сообщение
STOP AT LINE M
где M - номер строки, содержащей оператор паузы.
Для возобновления выполнения программы необходимо в непосредственном режиме ввести оператор "GOTO M" (см.
п.8.2.1) или команду CONTINUE (см. [2]).
При выполнении оператора паузы открытые файлы не закрываются. Поэтому, если в программе имеются открытые для вывода файлы, то необходимо или закончить выполнение программы, или выполнить оператор CLOSE (п.8.5.3).
Примечание. Оператор паузы может быть использован при отладке программ.
8.2.10. Оператор останова
Оператор останова имеет вид
END
В результате выполнения этого оператора завершается выполнение программы и все открытые файлы закрываются.
Оператор останова должен размещаться последним в программе на строке с наибольшим номером.
8.3. Оператор сравнения текстовых данных
Оператор сравнения текстовых данных имеет вид
CALL COLLATE (S1,S2,V)
где S1, S2 - константа, имя переменной или выражение типа текстовый;
V - имя переменной типа целый.
Оператор сравнения сравнивает значения S1 и S2 по правилам, описанным в п.6.3.
В результате выполнения оператора сравнения переменной V присваивается значение: "1" - если S1<S2; "0" - если S1=S2; "-1" - если S1>S2.
Пример.
10 CALL COLLATE('LA','G',V%)
20 IF V%<0 THEN A$='LA'+'G' \ GOTO 40
30 A$='G'+'LA'
40 END
В результате сравнения текстовых констант 'LA' и 'G' переменной V присваивается значение "-1". Текстовой переменной A$ присваивается значение 'LAG', так как значение V<0.
8.4. Оператор изменения последовательности случайных чисел
Оператор изменения последовательности случайных чисел имеет вид
RANDOMIZE
Оператор RANDOMIZE используется совместно с функцией RND (п.9.1.9). В результате выполнения этого оператора при каждом новом выполнении программы функция RND генерирует различные случайные числа.
Пример.
10 FOR I=1 TO 3 20 PRINT RND; 30 NEXT I 40 END RUN .229581 .132211 .783713 ГОТОВ RUN .229581 .132211 .783713 ГОТОВ
Каждый раз, когда выполняется эта программа, происходит печать одной и той же последовательности случайных чисел. Если в начало программы ввести оператор RANDOMIZE, то при каждом запуске программы будет происходить печать различных последовательностей случайных чисел.
5 RANDOMIZE 10 FOR I=1 TO 3 20 PRINT RND; 30 NEXT I 40 END RUN .412472 .423959 .221208 ГОТОВ RUN .448962 .163279 .573092 ГОТОВ
8.5. Операторы ввода-вывода
Операторы ввода-вывода осуществляют передачу данных с клавиатуры или из файла в оперативную память и обратно из оперативной памяти на видеомонитор или в файл.
В операторах ввода-вывода используется список ввода, список вывода и номер канала.
Список ввода указывает имена переменных и имена элементов массивов, которым присваиваются значения вводимых данных.
Список вывода определяет константы, имена переменных, имена элементов массивов, имена функций и выражения, значения которых передаются при выводе на видеомонитор или в файл.
Номер канала - это идентификатор, связанный с определенным файлом и служащий для ссылок на этот файл во время операций ввода-вывода.
8.5.1. Организация ввода-вывода
Данные, записанные в область памяти, теряются при вводе новой программы. Сохранять данные и использовать их различными программами можно, записав их в файл.
Для работы с файлами их необходимо открыть, т.е. произвести некоторые предварительные действия, которые сделают возможным обмен информацией между файлом и оперативной памятью. Для открытия файлов используется оператор OPEN (п.8.5.2).
После завершения работы с файлами их необходимо закрыть. Для закрытия файлов используется оператор CLOSE (п.8.5.3).
Различают файлы последовательного и прямого доступа.
8.5.1.1. Файлы последовательного доступа
При последовательном доступе данные, содержащиеся в файле, считываются в память в том же порядке, в каком они были первоначально записаны в файл. Программа последовательно обрабатывает каждую запись. Для того чтобы считать последнюю запись в файле последовательного доступа, необходимо считать весь файл.
Файл последовательного доступа может быть открыт для ввода или вывода. Выполнение операций ввода и вывода одновременно для файла последовательного доступа недопустимо.
При создании файлов последовательного доступа первым должен указываться оператор вывода, а не ввода. В противном случае появляется сообщение об ошибке.
Для внесения изменений в имеющийся файл последовательного доступа необходимо открыть его для ввода, затем открыть новый файл для вывода, считать данные из имеющегося файла и записать их, включая изменения, в новый файл.
8.5.1.2. Файлы прямого доступа
При прямом доступе записи файла обрабатываются в произвольной последовательности. Последняя запись файла прямого доступа может быть выбрана так же быстро, как и любая другая запись.
Файл прямого доступа определяется как виртуальный массив, каждый элемент которого рассматривается как отдельная запись файла. Это позволяет обращаться к записям файла точно так же, как к элементам массива в оперативной памяти.
Для выборки и записи данных в файлах прямого доступа, используются те же операторы, что и при работе с обычными массивами. Например, для создания записи в файле прямого доступа используется оператор присваивания.
Файл прямого доступа может быть открыт для ввода и вывода одновременно.
8.5.1.3. Каналы
Обращение к файлу осуществляется через канал.
Установление связи между каналом и файлом называется соединением. Канал может быть соединен с файлом при помощи оператора OPEN. В каждый момент времени с каналом может быть соединен только один файл. Разрешается, отсоединив канал от одного файла, соединить его с другим файлом.
Канал может быть отсоединен от файла в следующих случаях:
- при выполнении оператора CLOSE с номером канала, соединенного с данным файлом;
- при выполнении оператора OPEN с номером этого канала, но именем другого файла;
- при выполнении оператора CHAIN;
- при завершении выполнения программы.
В операторах ввода-вывода, кроме оператора OPEN, нельзя ссылаться на отсоединенные каналы.
В операторах ввода-вывода номер канала обозначается через N и задается в виде арифметического выражения типа целый или вещественный, из диапазона от 0 до 15. В случае вещественного значения N усекается до целого. Если N=0, то ввод осуществляется с клавиатуры, вывод - на видеомонитор. По умолчанию номер канала равен нулю.
8.5.2. Оператор открытия файла
Оператор открытия файла имеет вид
OPEN СПФ [FOR INPUT] AS FILE #N [,VIRTUAL]
или
OPEN СПФ [FOR OUTPUT] AS FILE #N [,VIRTUAL]
где СПФ - спецификация файла;
N - номер канала.
В результате выполнения оператора OPEN открывается файл прямого или последовательного доступа. Наличие ключевого слова VIRTUAL в операторе OPEN означает, что открывается файл прямого доступа; в противном случае - последовательного доступа.
При выполнении оператора OPEN с ключевым словом FOR OUTPUT открывается имеющийся файл с указанным именем (прямого или последовательного доступа) либо, если файл с таким именем не существует, открывается новый файл с этим именем. Для файла последовательного доступа разрешен только вывод, для файла прямого доступа ввод и вывод данных.
При выполнении оператора OPEN с ключевым словом FOR INPUT открывается имеющийся файл последовательного или прямого доступа. Если файл с указанным именем не существует, то появляется сообщение об ошибке. Для файла последовательного доступа разрешен только ввод данных, для файла прямого доступа - ввод и вывод данных.
При выполнении оператора OPEN без указания ключевого слова FOR INPUT или FOR OUTPUT открывается имеющийся файл для ввода или новый файл для вывода.
Примеры:
OPEN "BIGDISK:DATA" FOR OUTPUT AS FILE #1
В результате выполнения этого оператора на диске с логическим именем "BIGDISK" открывается для вывода файл последовательного доступа с именем DATA. Этот файл соединяется с каналом 1.
OPEN "MONEY" FOR INPUT AS FILE #2
В результате выполнения этого оператора на диске с логическим именем "BIGDISK" открывается для вывода файл последовательного доступа с именем DATA. Этот файл соединяет с каналом 1.
OPEN "MONEY" FOR INPUT AS FILE #2
В результате выполнения этого оператора на диске открывается для ввода имеющийся файл последовательного доступа с именем MONEY. Этот файл соединяется с каналом 2.
OPEN "LPF" FOR OUTPUT AS FILE #3,VIRTUAL
В результате выполнения этого оператора на диске открывается для вывода файл прямого доступа с именем LPF. Этот файл соединяется с каналом 3.
8.5.3. Оператор закрытия файлов
Оператор закрытия файлов имеет вид
CLOSE [#N [,#N]...]
где N - номер канала.
В результате выполнения этого оператора ликвидируется связь файлов с каналами, номера которых указаны в операторе.
Если в операторе CLOSE номера каналов не указаны, то закрываются все открытые файлы. Примеры:
110 B=4 120 CLOSE #2,#B,#6+1
В результате выполнения оператора CLOSE закрываются файлы, соединенные каналами 2, 4, 7.
150 CLOSE
В результате выполнения этого оператора закрываются все открытые файлы.
8.5.4. Оператор переименования файла
Оператор переименования файла имеет вид
NAME СПФ1 AS СПФ2 ---- --
где СПФ1, СПФ2 - спецификации файлов.
В результате выполнения этого оператора имя файла, определенное спецификацией СПФ1, заменяется на имя, определенное спецификацией СПФ2.
Если файл, определяемый спецификацией СПФ2, уже существует, то увеличивается на единицу номер версии файла.
Если в СПФ1 указано имя устройства, то в СПФ2 должно быть указано имя этого же устройства. Имена справочников в СПФ1 и СПФ2 могут не совпадать.
Если в СПФ2 тип файла не указан, то по умолчанию тип файла будет DAT.
Пример.
10 NAME "TEX.DAT" AS "ZAT.KON"
В результате выполнения этого оператора имя файла "TEX.DAT" заменяется на имя "ZAT.KON".
8.5.5. Оператор удаления файла
Оператор удаления файла имеет вид
KILL СПФ ----
где СПФ - спецификация файла.
В результате выполнения этого оператора удаляется файл, определенный спецификацией СПФ.
Если в СПФ тип файла не указан, то по умолчанию удаляется файл с типом DAT; если не указана версия файла - удаляются все версии файла.
Примеры:
10 KILL "[TEX]LP.DOC"
В результате выполнения этого оператора в справочнике TEX удаляются все версии файла с именем "LP.DOC".
10 KILL "LOG"
В результате выполнения этого оператора в текущем справочнике удаляются все версии файла с именем "LOG.DAT".
10 KILL "<EXAMPLE>LOG.*"
В результате выполнения этого оператора в справочнике EXAMPLE удаляются все файлы с именем LOG.
10 KILL "<EXAMPLE>*.DOC"
В результате выполнения этого оператора в справочнике EXAMPLE удаляются все файлы с типом DOC.
10 KILL "<EXAMPLE>*.*"
В результате выполнения этого оператора в справочнике EXAMPLE удаляются все файлы.
8.5.6. Оператор ввода
Оператор ввода осуществляет передачу данных с клавиатуры или из файла в память.
Оператор ввода имеет вид
INPUT [#N,] K -----
где N - номер канала;
K - список ввода.
Элементами списка ввода являются имена переменных и имена элементов массивов типа целый, вещественный и текстовый. Элементы в списке ввода разделяются запятой.
В результате выполнения оператора INPUT осуществляется ввод очередной записи из файла последовательного доступа, если N не равно нулю, или с клавиатуры, если N равно нулю, и последовательно присваиваются элементам списка ввода.
Вводимые данные должны соответствовать элементам списка ввода по числу и типу.
Если число данных в записи меньше числа элементов списка ввода, то появляется сообщение об ошибке. Если число данных в записи больше числа элементов списка ввода, то избыточные данные игнорируются.
По умолчанию номер канала равен нулю. В этом случае на видеомонитор выдается символ "?" для указания на ввод данных с клавиатуры. Вводимые данные должны заканчиваться символом "возврат каретки". Если введенных данных меньше числа элементов списка ввода, то на видеомонитор выдается символ "?", и ожидается ввод недостающих данных. Если введенных данных больше числа элементов списка ввода, то избыточные данные игнорируются. Текстовые данные могут указываться без ограничивающих символов апостроф и кавычки, при этом начальные и конечные пробелы игнорируются, а символ "," воспринимается как разделитель данных.
Если в операторе указан номер канала, равным нулю, то символ "?" на видеомонитор не выводится, как в случае неявного задания номера канала.
Примеры:
10 INPUT #0, M RUN 59 ГОТОВ
В результате выполнения оператора INPUT с клавиатуры вводится константа 59 и присваивается переменной M.
10 INPUT A,B$ 20 END RUN ?4,"ABC" ГОТОВ
В результате выполнения оператора INPUT с клавиатуры вводятся константы 4 и "ABC" и присваиваются переменным A и B$ соответственно.
10 OPEN "NUMBER" FOR INPUT AS FILE #2 20 FOR I=1 TO 10 30 INPUT #2,N 40 T=T+N 50 NEXT I 60 PRINT "ОБЩАЯ СУММА ";T 70 CLOSE #2 80 END
В результате выполнения этой программы осуществляется ввод записи из файла последовательного доступа NUMBER, суммирование первых десяти введенных значений и вывод результата на видеомонитор.
8.5.7. Оператор ввода текстового данного
Оператор ввода текстового данного имеет вид
LINPUT [#N,] V ------
где N - номер канала;
V - имя переменной или имя элемента массива типа текстовый.
Выполнение оператора LINPUT идентично выполнению оператора INPUT (п.8.5.6) за исключением того, что вводится только одна текстовая константа, состоящая из любого набора символов.
Оператор LINPUT вводит текстовую константу, включая начальные, конечные, промежуточные пробелы, запятые, апостроф и кавычки.
Примеры:
10 LINPUT C$ 20 END RUN ?"ABCD",AB ГОТОВ
В результате выполнения оператора LINPUT с клавиатуры вводится текстовая константа "ABCD",AB и ее значение присваивается переменной C$.
10 OPEN "NANI" AS FILE #1 20 LINPUT #1,S$ 30 PRINT S$ 40 CLOSE #1 50 END RUN CLASS ГОТОВ
В результате выполнения этой программы осуществляется ввод записи из файла последовательного доступа NANI и вывод на видеомонитор текстового данного "CLASS" из этой записи.
8.5.8. Оператор ввода символа
Оператор ввода символа имеет вид
CALL INKEY (S) ---- -----
где S - имя текстовой переменной.
В результате выполнения оператора CALL INKEY переменной S присваивается значение того символа, клавиша с изображением которого была нажата после подачи команды RUN (см. [2]), но до появления данного оператора.
Если до выполнения оператора CALL INKEY не была нажата ни одна клавиша, то переменной S присваивается значение "пусто".
Примеры:
10 CALL INKEY(A$) \ IF LEN(A$)=0 THEN GOTO 10 20 PRINT A$ RUN D ГОТОВ
В процессе выполнения программы была нажата клавиша с символом D. В результате текстовой переменной A$ присвоено значение D.
10 CALL INKEY (A$) 20 CALL INKEY (B$) 30 CALL INKEY (C$) 40 PRINT A$,B$,C$ RUN A S K ГОТОВ
После ввода команды RUN были нажаты клавиши с символами A, S, K. В результате текстовой переменной A$ присвоено значение A, переменной B$ - значение S и переменной C$ - значение K.
8.5.9. Оператор чтения
Оператор чтения имеет вид
READ K ----
где K - список ввода.
Элементами списка ввода являются имена переменных и имена элементов массивов типа целый, вещественный и текстовый.
В результате выполнения этого оператора данные из блока данных, организованного объявлениями блока данных (п.7.5), последовательно присваиваются элементам списка ввода, начиная с данного, на которое установлен указатель данных. Первоначально указатель данных установлен на первое данное блока данных. После выполнения оператора READ указатель данных устанавливается за последним считанным данным.
Данные из блока данных должны соответствовать элементам списка ввода по типу.
Число элементов списка ввода должно быть меньше или равно числу данных из блока данных.
Пример.
10 READ A,B,C 20 READ D 30 DATA 1,2 40 DATA 3,4 50 END
В результате выполнения операторов READ данные 1, 2, 3, 4 последовательно присваиваются переменным A, B, C, D.
8.5.10. Оператор восстановления
Оператор восстановления имеет вид
RESTORE [M] -------
где M - номер строки, содержащей объявление блока данных.
В результате выполнения этого оператора указатель данных устанавливается на первое данное объявления блока данных в строке с номером M. Если M не указано, то указатель данных устанавливается на первое данное объявления блока данных, расположенного на строке с наименьшим номером.
Этот оператор позволяет использовать одни и те же данные несколько раз.
Примеры.
10 READ A,B 20 RESTORE 40 30 READ C,B 40 DATA 1,2,3,4 50 END
Переменным A, B, C, D присваиваются значения 1, 2, 1, 2, так как в результате выполнения оператора RESTORE указатель данных устанавливается на первое данное объявления DATA в строке 40 и поэтому данные 1,2 используются дважды.
8.5.11. Оператор вывода
Оператор вывода имеет вид
PRINT [[#N,] K] -----
где N - номер канала;
K - список вывода.
Элементами списка вывода являются константы, имена переменных, имена элементов массивов, имена функций и выражения. Если элементом списка является выражение, то оно предварительно вычисляется. Элементы в списке вывода разделяются запятой и/или точкой с запятой.
В результате выполнения этого оператора создается очередная запись, определяемая списком вывода, в файле последовательного доступа, если N не равно нулю, или на видеомониторе, если N равно нулю.
Если список вывода отсутствует, то создается запись, состоящая из текстовой константы, имеющей значение "пусто" или, в случае вывода на видеомонитор, осуществляется пропуск строки.
При выводе в файл список вывода должен содержать текстовые константы "," между элементами списка, так как в противном случае при вводе этих данных из файла оператором ввода они будут восприниматься как одно значение.
По умолчанию и при N=0 вывод данных осуществляется на видеомонитор. Строка видеомонитора условно делится на зоны по 14 позиций в каждой зоне. Если элементы списка вывода разделены запятой, то вывод осуществляется по зонам. Если элементы списка вывода разделены точкой с запятой, то числовые данные выводятся через 2 пробела, а текстовые данные - подряд. Если все позиции текущей строки видеомонитора использованы, но не все элементы списка выведены, то оставшиеся элементы выводятся на следующей строке видеомонитора. При отсутствии в конце списка вывода запятой или точки с запятой происходит переход к следующей строке. Если список вывода завершается запятой или точкой с запятой, то по окончании вывода перехода к следующей строке не происходит.
Примеры:
10 A=5 20 PRINT 6;A;A+6 30 PRINT 1,2;3 40 PRINT "CONSTANT" 50 END RUN 6 5 11 1 2 3 CONSTANT ГОТОВ
В результате выполнения первого оператора PRINT выводятся через два пробела следующие данные: константа 6, значение переменной A, значение выражения A+6.
В результате выполнения второго оператора PRINT выводятся константы 1 и 2 по зонам, константа 3 выводится через два пробела.
В результате выполнения третьего оператора PRINT выводится текстовая константа "CONSTANT" без ограничивающих кавычек.
10 A=0.2 20 D=400000+400000*3 30 PRINT A;D; 40 PRINT 7 50 PRINT 60 PRINT 6,,8 70 END RUN .2 .16E+07 7 6 8 ГОТОВ
В результате выполнения первого оператора PRINT выводятся значения переменных A и D. Так как список вывода завершается точкой с запятой, перехода к следующей строке не происходит.
В результате выполнения второго оператора PRINT выводится константа 7 после значения переменной D.
В результате выполнения третьего оператора PRINT осуществляется пропуск строки.
В результате выполнения четвертого оператора PRINT выводятся константы 6 и 8 в первую и третью зоны.
10 OPEN "NAMES" FOR OUTPUT AS FILE #1 20 READ A$,A 30 IF A$=' ' THEN 120 40 PRINT #1,A$;",";A 50 GOTO 20 60 CLOSE #1 100 DATA "KARTA",187.2,"KONTUR",89 110 DATA " ",0 120 END
В результате выполнения этой программы в файле последовательного доступа с именем "NAMES" создается запись, состоящая из последовательности значений переменных A$ и A.
8.5.12. Оператор форматного вывода
Оператор форматного вывода имеет вид
PRINT USING [#N,] F, K ----- -----
где N - номер канала;
F - спецификация формата;
K - список вывода.
Спецификация формата представляет собой текстовое выражение, состоящее из последовательностей символов и описателей полей. Последовательности символов используются для вывода символов последовательности без преобразования. Описатели полей (пп.8.5.12.1, 8.5.12.2) определяют формат выводимых данных.
Элементами списка вывода являются константы, имена переменных, имена элементов массивов, имена функций, а также выражения типа целый, вещественный и текстовый. Если элементом списка вывода является выражение, то оно предварительно вычисляется. Элементы в списке вывода разделяются запятой и/или точкой с запятой.
В результате выполнения оператора PRINT USING данные, определяемые списком вывода, записываются в файл или выводятся на видеомонитор в соответствии с форматом, указанным в спецификации формата. Если список вывода отсутствует, то появляется сообщение об ошибке.
Выполнение оператора форматного вывода определяется как очередным элементом списка вывода, так и очередным описателем поля в спецификации формата.
Спецификация формата интерпретируется слева направо. Если спецификация формата исчерпана, то проверяется, остались ли элементы в списке вывода. Если таких элементов нет, то вывод завершается; если элементы в списке вывода есть, спецификация формата интерпретируется сначала и, оставшиеся элементы списка вывода выводятся начиная с новой строки.
Если число элементов списка вывода меньше числа описателей полей спецификации формата, то избыточные описатели полей игнорируются.
При выводе на видеомонитор в случае отсутствия в конце списка вывода запятой или точки с запятой происходит переход к следующей строке. Если список вывода завершается запятой или точкой с запятой, то по окончании вывода перехода к следующей строке не происходит.
8.5.12.1. Описатель числового поля
Описатели числовых полей используются для задания вывода данных типа целый и вещественный. Вещественные данные могут выводиться в виде смешанной дроби или в экспоненциальной форме.
Описатель числового поля имеет вид
[$$]#...#[,]#...#[.]...#[-]
или
[**]#...#[,]#...#[.]#...#[-]
или
#...#[.]#...#[^^^^]
где символ "#" - резервирует одну позицию для цифры или знака минус.
Знак минус выводится перед числом.
Пример.
10 PRINT USING "####",-6,555,-721 RUN -6 555 -721 ГОТОВ
Точка "." - указывает на положение отделителя дроби в числе, разделяющем целую и дробную части числа.
Пример.
10 PRINT USING "###.###",122.2,2.76,13,877 RUN 122.200 2.760 13.877 ГОТОВ
Запятая "," - резервирует позиции для отделителя цифр или цифры и вставляет отделитель после каждой третьей цифры целой части числа, начиная влево от точки. Символ "," указывается в любом месте описателя поля слева от точки, если она есть, и справа от символов "$$" или "**", если они используются.
Пример.
10 PRINT USING "####,###.##",3333333 20 PRINT USING "##,###",135,55555 RUN 3,333,333.00 135 55,555 ГОТОВ
Минус "-" указывает на вывод знака за числом. За числом выводится знак минус, если число отрицательное, и пробел, если число положительное. Символ "-" должен быть самым последним символом в описателе числового поля.
Пример.
10 PRINT USING "###-",2,-19,300 RUN 2 19- 300 ГОТОВ
Символы "$$" - первый символ "$" указывает на вывод символа "$" перед числом; второй символ "$" резервирует позицию для первой цифры числа. Символы "$$" должны быть первыми символами в описателе числового поля.
Пример.
10 PRINT USING "$$###.###",12.137,444,5219.1 RUN $12.137 $444.000 $5219.100 ГОТОВ
Символы "**" - резервируют позиции для первых двух цифр числа и указывают на заполнение символом "*" свободных позиций в поле вывода слева от старшей значащей цифры числа.
Пример.
10 PRINT USING "******",14,51777,666666 RUN ****14 *51777 666666 ГОТОВ
Символы "^^^^" - резервируют четыре позиции для порядка при выводе числа в экспоненциальной форме. Символы "^^^^" должны быть последними символами в описателе числового поля.
Пример.
10 PRINT USING "###.##^^^^",100,50000 RUN 100.00E+00 500.00E+02 ГОТОВ
При использовании описателей числовых полей поле вывода выравнивается по правой границе. Если число выводимых символов меньше числа позиций, предусмотренных в описателе поля, то поле вывода дополняется слева пробелами.
Если описателем поля зарезервировано недостаточно позиций для числа и число нельзя округлить, то описатель поля игнорируется и на видеомонитор выводится символ "%", за которым следует число в формате оператора PRINT.
Если описателем поля зарезервировано недостаточно позиций для числа, заданного в виде смешанной дроби или в экспоненциальной форме, и число можно округлить, то оно округляется.
Примеры:
Вывод с резервированием недостаточного числа позиций
10 PRINT USING "##",124 20 PRINT USING "#,#",54.12 RUN %124 %54.12 ГОТОВ
Вывод с округлением чисел
10 PRINT USING "###",134.8 20 PRINT USING "#",6.1 30 PRINT USING "##.###",-4.2 40 PRINT USING "##.###",11.2479 RUN 135 6 -4.200 11.248 ГОТОВ
8.5.12.2. Описатель текстового поля
Описатели текстовых полей используются для задания вывода данных типа текстовый.
Описатель текстового поля имеет вид
'[LL...L]
или
'[RR...R]
или
'[CC...C]
или
'[EE...E]
где ' - является признаком описателя текстового поля и резервирует одну позицию для символа.
Пример.
10 PRINT USING "'","ABCDE" RUN A ГОТОВ
L - вызывает выравнивание текстового данного по левому краю поля и резервирует одну позицию для символа.
Пример.
10 PRINT USING "'LLLL","ABC" 20 PRINT USING "'LLLL","ABCAB" 30 PRINT USING "'LLLL","ABCDEFG" RUN ABC ABCAB ABCDE ГОТОВ
R - вызывает выравнивание текстового данного по правому краю поля и резервирует одну позицию для символа.
Пример.
10 PRINT USING "'RRRR","ABC" 20 PRINT USING "'RRRR","ABCDE" <!-- с. 76 [p039a] --> 30 PRINT USING "'RRRR","ABCDEFG" RUN ABC ABCDE ABCDE ГОТОВ
C - вызывает центрирование текстового данного и резервирует одну позицию для символа. Центрирование заключается в том, что центр текстового данного должен быть центром поля вывода. Если число символов в текстовом данном четное, то происходит сдвиг одного символа влево.
Пример.
10 PRINT USING "'CCCC","A" 20 PRINT USING "'CCCC","AB" 30 PRINT USING "'CCCC","ABC" 40 PRINT USING "'CCCC","ABCD" 50 PRINT USING "'CCCC","ABCDE" 60 PRINT USING "'CCCC","ABCDEF" RUN A AB ABC ABCD ABCDE ABCDE ГОТОВ
Текстовые константы "AB" и "ABCD" смещены влево на одну позицию.
E - вызывает выравнивание текстового данного по левому краю поля и вывод всего текстового данного независимо от числа символов, указанных в описателе текстового поля.
Пример.
10 PRINT USING "'EEEE","AB" 20 PRINT USING "'EEEE","ABCDE" 30 PRINT USING "'EEEE","ABCDEFG" RUN AB ABCDE ABCDEFG ГОТОВ
При использовании описателей текстовых полей поле вывода выравнивается в зависимости от конкретного вида описателя поля. Если число выводимых символов меньше числа позиций, предусмотренных в описателе поля, то недостающие символы заменяются пробелами.
Если описателем поля резервируется недостаточно позиций для вывода текстового данного, то избыточные символы игнорируются. Исключением является описатель поля, использующий символ E, по которому осуществляется вывод всего текстового данного.
Пример.
Форматный вывод числовых и текстовых данных
10 A%=15 20 B$="DATA" 30 PRINT USING "##&ABC&'LLL",A%,B$ RUN 15&ABC&DATA
Спецификация формата содержит описатель числового поля, последовательность символов &ABC& и описатель текстового поля. Переменные A% и B$ выводятся в соответствии с указанными описателями.
8.5.12.3. Оператор установки отделителя цифр
Оператор установки отделителя цифр имеет вид
SET SEPARATOR S --- ---------
где S - текстовое выражение.
В результате выполнения оператора SET SEPARATOR символ "," в поле вывода всех последующих операторов PRINT USING заменяется на первый символ в значения выражения S.
Если S опущено или значение S равно "пусто", то оператор SET SEPARATOR игнорируется.
Если в программе несколько операторов SET SEPARATOR, то в результате выполнения каждого из этих операторов происходит переустановка отделителя цифр.
Примеры:
10 SET SEPARATOR "R" 20 PRINT USING "#,####.##",1212,30500.15 RUN 1R212.00 30R500.15
В результате выполнения оператора SET SEPARATOR символ "," в поле вывода заменяется на символ "R".
10 SET SEPARATOR 20 PRINT USING "##,##.#",4115 RUN 4,115.0 ГОТОВ
В этом примере оператор SET SEPARATOR игнорируется.
10 SET SEPARATOR 'AC' 20 PRINT USING '#,####.#',15050.5,4701 30 PRINT USING '###,#.###',4060,3113.08 RUN 15A050.5 4A701.0 4A060.000 3A113.080 ГОТОВ
В результате выполнения оператора SET SEPARATOR символ "," в поле вывода заменяется на первый символ константы 'AC'. Действие оператора SET SEPARATOR распространяется на оба оператора PRINT USING.
10 SET SEPARATOR 'A' 20 PRINT USING '###,##',11510,2004 30 SET SEPARATOR 'B' 40 PRINT USING '##,##.#',1000,2013.14 RUN 11A510 2A004 1B000.0 2B013.1 ГОТОВ
В результате выполнения первого оператора SET SEPARATOR, символ "," в поле вывода заменяется на символ "A", в результате выполнения выполнения второго оператора SET SEPARATOR - на символ "B".
8.5.12.4. Оператор установки символа точки
Оператор установки символа точки имеет вид
SET RADIX S --- -----
где S - текстовое выражение.
В результате выполнения оператора SET RADIX символ "." в поле вывода всех последующих операторов PRINT USING заменяется на первый символ значения выражения S.
Если S опущено или значение S равно "пусто", то оператор SET RADIX игнорируется.
Если в программе несколько операторов SET RADIX, то в результате выполнения каждого из этих операторов происходит переустановка символа десятичной точки.
Примеры:
10 SET RADIX "K" 20 PRINT USING "###.##",500,24.7,305.55 RUN 500K00 24K70 305K55 ГОТОВ
В результате выполнения оператора SET RADIX символ "." в поле вывода заменяется на символ "K".
10 SET RADIX ' ' PRINT USING "##.#",1.2,35.7,20 RUN 1.2 35.7 20.0 ГОТОВ
В этом примере оператор SET RADIX игнорируется.
10 SET RADIX 'RAD' 20 PRINT USING '##.#',20.09,4.7 30 PRINT USING '###.##',333,507.01 RUN 20R1 4R7 333R00 507R01 ГОТОВ
В результате выполнения оператора SET RADIX символ "." в поле вывода заменяется на первый символ константы 'RAD'. Действие оператора SET RADIX распространяется на оба оператора PRINT USING.
10 SET RADIX 'A' 20 PRINT USING '###.#',101,213.9 30 SET RADIX 'B' 40 PRINT USING '#.###',.707,5.019 RUN 101A0 213A9 0B707 5B019 ГОТОВ
В результате выполнения первого оператора SET RADIX символ "." в поле вывода заменяется на символ "A", в результате выполнения второго оператора SET RADIX - на символ "B".
8.5.12.5. Оператор установки вида знака денежной единицы
Оператор установки вида знака денежной единицы имеет вид
SET CURRENCY S$
где S$ - текстовое выражение.
В результате выполнения оператора SET CURRENCY символы "$$" в поле вывода всех последующих операторов PRINT USING заменяются на значение выражения S$.
Если S$ опущено или значение S$ равно "пусто", то оператор SET CURRENCY игнорируется.
Если в программе несколько операторов SET CURRENCY, то в результате выполнения каждого из этих операторов происходит переустановка вида знака денежной единицы.
Примеры:
10 SET CURRENCY 'ABC' 20 PRINT USING '$$###.##',12.5,133,4000 RUN ABC12.50 AB133.00 A4000.00 ГОТОВ
В результате выполнения оператора SET CURRENCY символы "$$" в поле вывода заменяются на символы "ABC", "AB", "A".
10 A$='F' 20 SET CURRENCY A$ 30 PRINT USING '$$##.#',3.7,45,124,1000 RUN F3.7 F45.0 F124.0 %1000 ГОТОВ
В результате выполнения оператора SET CURRENCY символы "$$" в поле вывода заменяются на значение текстовой переменной A$.
10 SET CURRENCY 'RAM' 20 PRINT USING '$$##.#',13.7,126 30 PRINT USING '$$###',3030,500,27 RUN RA13.7 R126.0 R3030 RA500 RAM27 ГОТОВ
В результате выполнения оператора SET CURRENCY символы "$$" в поле вывода заменяются на символы "RAM". Действие оператора SET CURRENCY распространяется на оба оператора PRINT USING.
10 SET CURRENCY 'R' 20 PRINT USING '$$###.##',209,1000,57.2
30 SET CURRENCY 'S' 40 PRINT USING '$$#.#',10,25.6 RUN R209.00 R1000.00 R57.20 S10.0 S25.6 ГОТОВ
В результате выполнения первого оператора SET CURRENCY символы "$$" в поле вывода заменяются на символ "R", в результате выполнения второго оператора SET CURRENCY - на символ "S".
8.6. Операторы сегментации
Сегментация программы - это разбиение программы на несколько программных модулей, называемых сегментами. Сегменты программы оформляются так же, как и обычная программа, за исключением того, что каждый сегмент (кроме последнего) заканчивается оператором CHAIN. При выполнении сегментируемой программы управление передается от одного сегмента к другому посредством оператора CHAIN.
Из одного сегмента в другой можно передавать константы, переменные, массивы, элементы массивов и элементы виртуальных массивов.
Объем памяти, необходимый для выполнения сегментируемой программы, равен объему памяти, необходимого для выполнения самого большого ее сегмента (см. рис. 1).
------------- ------------- ------------- ------------- : : : : : : : : : СЕГМЕНТ1 : : СЕГМЕНТ1 : : СЕГМЕНТ2 : : СЕГМЕНТ3 : : : : : : : : : :-----------: :-----------: : : ------------- : : : : : : : СЕГМЕНТ2 : : CHAIN : : : : : : : : : : : ------------- : : : : : : : : :-----------: : : : : :-----------: : CHAIN : : : : : : СЕГМЕНТ3 : ------------- : : -------------
Рис. 1.
Несегментированная программа размещается в памяти, как показано на рисунке слева. После сегментации в память последовательно загружаются и выполняются сегменты, начиная с первого. Для выполнения всей программы необходим объем памяти, требуемый для выполнения самого большого сегмента сегмента 2.
8.6.1. Оператор загрузки сегмента
Оператор загрузки сегмента имеет вид
CHAIN СПФ [WITH V[,V]...] [LINE M]
--- ---- ----
где СПФ - спецификация файла;
V - общий объект: имя переменной, описание массива, имя элемента массива, имя элемента виртуального массива;
M - номер строки.
В описании массивов, указываемых как общий объект, верхние границы по измерениям не задаются. Список границ состоит из (N-1) запятой, где N - число измерений массива.
В результате выполнения этого оператора закрываются все открытые файлы, удаляется текущий сегмент из памяти, загружается и выполняется сегмент, определяемый спецификацией СПФ. Выполнение загруженного сегмента начинается со строки, номер которой M. Если номер строки не указан, выполнение сегмента начинается со строки, имеющей наименьший номер. Значения, соответствующие общим объектам, сохраняются в оперативной памяти после загрузки сегмента и в дальнейшем присваиваются переменным, элементам массивов, массивам и элементам виртуальных массивов, перечисленным в операторе PROGRAM (п.8.6.2). Переменные и массивы, имена которых не указанны в операторе CHAIN, а также виртуальные массивы и внутренние функции теряют свои значения после выполнения оператора CHAIN.
Пример.
Программа, состоит из двух сегментов. Первый сегмент записан в файле с именем 'SEG1':
5 PRINT 'SEG1' 10 OPEN 'DATA' FOR OUTPUT AS FILE #1 20 FOR I=1 TO 100 30 PRINT #1, 2*I 40 NEXT I 50 CLOSE #1 60 CHAIN 'SEG2' 70 END
Второй сегмент записан в файле с именем 'SEG2':
5 PRINT 'SEG2' 10 OPEN 'DATA' FOR INPUT AS FILE #1 20 FOR I=1 TO 100 30 INPUT #1, J 40 T=T+J 50 NEXT I 60 PRINT 'ОБЩАЯ СУММА ';T 70 CLOSE #1 80 END
После запуска программы выполняется первый сегмент: выводится сообщение 'SEG1', в файл с именем 'DATA' записываются четные числа от 2 до 200 и в память загружается второй сегмент. В результате выполнения второго сегмента выводится сообщение 'SEG2', суммируются данные из файла 'DATA' и выводится значение суммы.
Выполнение программы вызывает вывод:
SEG1 SEG2 ОБЩАЯ СУММА 10100
8.6.2. Оператор передачи общих объектов
Оператор передачи общих объектов имеет вид
PROGRAM P [(V [,V]...)]
-------
где P - имя программы;
V - общий объект: имя переменной, описание массива, имя элемента массива, имя элемента виртуального массива.
В описании массивов, указываемых как общий объект, верхние границы по измерениям не задаются. Список границ состоит только из (N-1) запятой, где N - число измерений массива.
Имя программы состоит из любой комбинации буквенно-цифровых символов и может содержать до 32 символов.
В результате выполнения оператора PROGRAM указанным общим объектам присваиваются соответствующие значения общих объектов, указанных в операторе загрузки сегмента.
Общие объекты, указанные в операторе PROGRAM, должны соответствовать по числу и типу общим объектам, указанным в операторе загрузки сегмента.
Опрератор PROGRAM должен быть первым оператором в сегменте. Все другие операторы PROGRAM игнорируются.
Пример.
10 PROGRAM A 20 A$='POL' 30 CHAIN 'BBB' WITH A$ 10 PROGRAM B(B$) 20 C$=B$+'E' \ PRINT C$ 30 END RUN POLE ГОТОВ
Программа состоит из двух сегментов. Первый сегмент записан в файле 'AAA', второй - в файле 'BBB'. После запуска программы выполняется первый сегмент: текстовой переменной A$ присваивается значение 'POL' и в память загружается второй сегмент, при этом значение текстовой переменной A$ сохраняется в памяти. В результате выполнения второго сегмента переменной B$ присваивается значение переменной A$, полученное в первом сегменте, переменной C$ присваивается значение 'POLE' и это значение выводится на видеомонитор.
8.7. Операторы организации обработки ошибок
Операторы организации обработки ошибок позволяют продолжить выполнение программы в случае возникновения ошибок в процессе выполнения с помощью подпрограмм обработки ошибок.
8.8. Оператор перехода по ошибке
Оператор перехода по ошибке имеет вид
ON ERROR GOTO M -- ----- ----
где M - номер первой строки подпрограммы обработки ошибок.
При выполнении программы могут возникнуть ошибки вычисления и ошибки ввода-вывода. В зависимости от характера ошибки выдается предупреждающее сообщение и выполнение программы продолжается или выдается сообщение о фатальной ошибке и выполнение программы прекращается.
В результате выполнения оператора ON ERROR при обнаружении ошибки в процессе выполнения программы происходит обращение к подпрограмме обработки ошибок, точкой входа которой является строка с номером M, и трем внутренним функциям присваиваются значения:
- функции ERL - значение номера строки, в которой обнаружена ошибка;
- функции ERR - значение кода ошибки;
- функции ERT$ - текст сообщения об ошибке.
Для возврата из подпрограммы обработки ошибок используется оператор RESUME.
Если ошибка обнаружена в программе до появления оператора ON ERROR или если в операторе указан номер строки равный нулю, то передача управления на подпрограмму обработки ошибок не производится.
Если в операторе ON ERROR указан номер строки, которого нет в программе, то появляется сообщение об ошибке.
Пример.
10
20
.
.
.
100 ON ERROR GOTO 1000
110
.
.
.
500 ON ERROR GOTO 0
510
.
.
.
990
1000 REM ПОДПРОГРАММА ОБРАБОТКИ ОШИБОК
.
.
.
1490 RESUME
1500 END
Ошибки, возникающие при выполнении операторов, расположенных между строками 10 и 100, обрабатываются интерпретатором; между строками 100 и 500 обрабатываются подпрограммой обработки ошибок, расположенной начиная со строки 1000; между строками 500 и 1500 - обрабатываются интерпретатором.
8.8.1. Оператор возврата
Оператор возврата имеет вид
RESUME [M] -------
где M - номер строки, с которой продолжается выполнение программы.
Оператор RESUME передает управление из подпрограммы обработки ошибок на указанную строку программы.
Если номер строки не указан, то управление передается на строку, в которой была обнаружена ошибка.
Оператор RESUME должен быть последним оператором в подпрограмме обработки ошибок.
Пример.
10 ON ERROR GOTO 100 20 INPUT A,B 30 C=A/B 40 PRINT C 50 GOTO 20 100 IF B=0 THEN INPUT B 110 RESUME 30 120 END RUN 15,5 3 ГОТОВ RUN 20,0 4 5 ГОТОВ
С клавиатуры вводятся данные и последовательно присваиваются переменным A и B. Если значение B=0, то возникает ситуация ошибки: деление на нуль. В этом случае управление передается на строку 1000 - подпрограмме обработки ошибок. В результате выполнения подпрограммы устраняется ошибка путем ввода нового значения B и управление передается на строку 30, в которой произошла ошибка.
8.9. Операторы графики
Операторы графики предназначены для построения на экране видеомонитора прямых и кривых линий, окружностей, текста различного размера и под разным углом наклона, определения собственного набора символов, выполнения теневой раскраски изображения, а при наличии цветного видеомонитора - цветной.
8.9.1. Основные определения графики
8.9.1.1. Координаты
Чтобы определить точку на плоскости, необходимо указать координаты этой точки: горизонтальное и вертикальное положение точки относительно некоторой начальной точки, называемой точкой отсчета.
Горизонтальное положение точки относительно точки отсчета определяет горизонтальную координату точки, вертикальное положение точки опредееляет вертикальную координату. Горизонтальную координату обозначают через X, вертикальную - через Y. Координаты записываются в виде: (X,Y), где X и Y - арифметические выражения типа целый или вещественный.
8.9.1.2. Графический экран
Графический экран - это часть экрана видеомонитора, используемая для построения графических изображений. Размер графического экрана определяется 4-мя угловыми точками с координатами: (MIN X, MIN Y), (MAX X, MIN Y), (MAX X, MAX Y), (MIN X, MAX Y). В качестве точки отсчета принят нижний левый угол графического экрана, имеющий координаты (MIN X, MIN Y).
Максимальный размер графического экрана - это весь экран видеомонитора с координатами: (0,0), (1,0), (1,.625), (0,.625).
По умолчанию устанавливается графический экран с координатами: (.375,0), (1,0), (1,.625), (.375,.625). Значения координаты X изменяется от 0 до 1, значения Y - от 0 до 0.625 (рис. 2).
(0,.625) (.375,.625) (1,.625) ----------------------------------------- ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ----------------------------------------- (0,0) (.375,0) (1,0)
Рис. 2.
8.9.1.3. Система координат
Система координат - это масштаб, которым пользуются в пределах области графического экрана. Для выбора системы координат используется оператор SET WINDOW (п.8.9.3).
Система координат указывает диапазон изменений координат по горизонтали и по вертикали. Диапазоны для X и Y устанавливаются аналогично размерам графического экрана: от MIN X до MAX X и от MIN Y до MAX Y. В выбранной системе координат точка отсчета имеет координаты: (MIN X, MIN Y).
По умолчанию значения координат по горизонтали и по вертикали изменяются от 0 до 1, а точка отсчета имеет координаты (0,0). При каждом запуске программы система координат устанавливается по умолчанию.
В дальнейшем в примерах графики используются значения координат из этих диапазонов.
8.9.2. Оператор установки размера графического экрана
Оператор установки размера графического экрана имеет вид
SET VIEWPORT XMIN, XMAX, YMIN, YMAX --- ---------
где XMIN, XMAX, YMIN, YMAX - арифметические выражения типа целый или вещественный.
В результате выполнения оператора SET VIEWPORT устанавливается область экрана видеомонитора, ограниченная точками с координатами (XMIN, YMIN), (XMAX, YMIN), (XMAX, YMAX), (XMIN, YMAX), используемая для построения графических изображений.
Значения XMIN, XMAX берутся из интервала (0,1) и определяют размеры графического экрана по горизонтали. Значения YMIN, YMAX берутся из интервала (0,.625) и определяют размеры графического экрана по вертикали.
По умолчанию графический экран ограничен квадратом, угловые точки которого имеют координаты: (.375,0), (1,0), (1,.625), (.375,.625).
Оператор SET VIEWPORT игнорируется, если указан размер графического экрана, превышающий размер физического экрана.
Пример.
10 SET VIEWPORT .5,1,0,.5
В результате выполнения оператора SET VIEWPORT устанавливается размер экрана, ограниченного квадратом, угловые точки которого имеют координаты: (.5,0), (1,0), (.5,.5), (1,.5).
8.9.3. Оператор установки системы координат
Оператор установки системы координат имеет вид
SET WINDOW XMIN, XMAX, YMIN, YMAX --- ------
где XMIN, XMAX, YMIN, YMAX - арифметические выражения типа целый или вещественный.
Значения XMIN, XMAX определяют диапазон изменения координат по горизонтали, а значения YMIN, YMAX - диапазон изменения координат по вертикали.
В результате выполнения оператора SET WINDOW устанавливается система координат, которой пользуются в пределах области графического экрана.
Пример.
10 SET VIEWPORT 0,1,0,.625 20 SET WINDOW 1900,1985,0,15
В результате выполнения оператора SET VIEWPORT устанавливается графический экран, занимающий весь экран видеомонитора. Значения, указанные в операторе SET WINDOW, определяют диапазоны изменения координат по горизонтали от 1900 до 1985 и по вертикали от 0 до 15, при этом точка отсчета имеет координаты (1900,0).
Пример.
10 SET WINDOW 0,1,0,1
Выполнение этого оператора эквивалентно установке системы координат по умолчанию.
8.9.4. Оператор установки текущей позиции
Оператор установки текущей позиции имеет вид
SET POSITION (X,Y) --- --------
где X, Y - координаты текущей позиции.
В результате выполнения оператора SET POSITION в качестве текущей позиции устанавливается точка с координатами (X,Y).
По умолчанию текущая позиция совпадает с точкой отсчета - точкой (0,0), если система координат установлена по умолчанию, или точкой (XMIN,YMIN), если система координат установлена в результате выполнения оператора SET WINDOW.
Пример.
10 SET POSITION (.5,.7)
В результате выполнения этого оператора устанавливается текущая позиция с координатами (.5,.7).
8.9.5. Оператор определения текущей позиции
Оператор определения текущей позиции имеет вид
ASK POSITION (X,Y) --- ---------
где X,Y - имена переменных или имена элементов массивов типа целый или вещественный.
В результате выполнения этого оператора переменным X и Y присваиваются значения координат текущей позиции.
Пример.
10 SET POSITION (.5,.5) 20 ASK POSITION (X1,Y1)
В результате выполнения оператора ASK POSITION переменным X1 и Y1 присваиваются значения координат текущей позиции (.5,.5).
8.9.6. Оператор очистки экрана
Оператор очистки экрана имеет вид
CLEAR -----
В результате выполнения оператора CLEAR очищается весь экран видеомонитора, одновременно текущая позиция устанавливается в точку отсчета и маркер передвигается в верхний левый угол экрана.
8.9.7. Оператор графического вывода
Опрератор графического вывода имеет вид
GRAPHIC PRINT K ------- -----
где K - список вывода.
Элементами списка вывода являются константы, имена переменных, имена элементов массивов, имена функций и выражения типа целый, вещественный и текстовый. Элементы в списке вывода разделяются запятой и/или точкой с запятой.
В результате выполнения этого оператора на графический экран выводятся данные, определяемые списком вывода. Действке оператора GRAPHIC PRINT аналогична действии оператора PRINT (п.8.5.11).
Разделители, используемые в списке вывода (',' и ';'), действуют так же, как разделители в операторе PRINT.
Если в конце списка вывода разделитель не используется, то текущая позиция не изменяется. Для изменения текущей позиции в конце списка вывода используют разделитель.
Формат выводимого текста зависит от предварительных установок, таких как: расстояние между символами, размер символа, угол наклона и т.д.
Пример.
10 SET POSITION (0,.25)
20 GRAPHIC PRINT 'A';'BC','DEF';
30 GRAPHIC PRINT '*'
RUN
ABC DEF*
ГОТОВ
В результате выполнения этой программы с текущей позиции (0,.25) выводятся текстовые константы 'A', 'BC', 'DEF' и '*'. Причем, константы 'A' и 'BC' выводятся подряд в первую зону, 'DEF' и '*' - во вторую зону. Символ '*' выводится в позицию, которая была установлена после выполнения оператора GRAPHIC PRINT, расположенного на строке с номером 20.
8.9.8. Оператор графический форматного вывода
Оператор графический форматного вывода имеет вид
GRAPHIC PRINT USING F, K ------- ----- -----
где F - спецификация формата;
K - список вывода.
Спецификация формата представляет собой текстовое выражение, значением которого является последовательность символов и описателей полей. Символы последовательности не являются символами форматного управления и выводятся без преобразования. Описатели полей резервируют позиции для выводимых данных и определяют форму вывода данных. Форматы описателей полей приведены в п.8.5.12.
Элементами списка вывода являются константы, имена переменных, имена элементов массивов, имена функций и выражения типа целый, вещественный и текстовый. Элементы в списке вывода разделяются запятой и/или точкой с запятой. Если список вывода отсутствует, то выводится сообщение об ошибке.
В результате выполнения оператора GRAPHIC PRINT USING на графический экран выводятся данные, определяемые списком вывода, в соответствии с форматом, указанным в спецификации формата. Действие оператора GRAPHIC PRINT USING аналогично действию оператора PRINT USING (п.8.5.12).
Формат выводимого текста зависит от предварительных установок, таких как: расстояние между символами, размер символа, угол наклона и т.д.
Пример.
10 SET POSITION (.2,.5)
20 GRAPHIC PRINT USING "'RR", "ABC"
30 SET POSITION (.2,.45)
40 GRAPHIC PRINT USING "'RR", "AB"
50 SET POSITION (.2,.4)
60 GRAPHIC PRINT USING "'RR", "A"
70 SET POSITION (.2,.35)
80 GRAPHIC PRINT USING "**###.##", 50.1
RUN
ABC
AB
A
***50.10
ГОТОВ
В результате выполнения этой программы с установленных позиций выводятся константы "ABC", "AB", "A" и число 50.1. При выводе текстовых констант происходит выравнивание по правому краю поля.
8.9.9. Оператор построения точек и отрезков
Оператор построения точек и отрезков имеет вид
PLOT [(X,Y)[разделитель(X,Y)]...[разделитель]] ----
где X, Y - координаты точки;
разделитель - это запятая или точка с запятой.
В результате выполнения оператора PLOT выводится точка или отрезок между последовательно указанными точками. Оператор PLOT без указания координат определяет конец отрезка.
Если в конце предыдущего оператора PLOT стоит разделитель, то построение отрезка производится от текущей позиции до точки, указанной в текущем операторе PLOT. Если в конце предыдущего оператора PLOT разделитель не стоит, то в позиции, указанной в операторе PLOT, выводится точка.
Оператор CLEAR отменяет действие разделителя в конце предыдущего оператора PLOT.
Пример.
10 PLOT (0,0), 20 PLOT (.2,.2) RUN ГОТОВ
В результате выполнения этих операторов строится отрезок от точки (0,0) до точки (.2,.2).
Пример.
10 PLOT (0,0) 20 PLOT (.2,.2) RUN ГОТОВ
В результате выполнения этих операторов выводятся две точки с координатами (0,0) и (.2,.2).
Пример.
10 PLOT (0,0),(.2,.2),(.2,0) RUN ГОТОВ
В результате выполнения этого оператора через указанные точки строится ломаная линия.
Пример.
10 PLOT (0,0) 20 SET POSITION (.3,.3) 30 PLOT (.3,0) RUN ГОТОВ
В результате выполнения операторов PLOT выводятся две точки с координатами (0,0) и (.3,0).
Пример.
10 PLOT (0,0), 20 SET POSITION (.3,.3) 30 PLOT (.3,0) RUN ГОТОВ
В результате выполнения оператора PLOT, расположенного на строке 10, выводится точка с координатами (0,0), так как в конце этого оператора стоит разделитель, то от текущей позиции (.3,.3) до точки (.3,0) строится отрезок.
8.9.10. Оператор построения дуги
Оператор построения дуги имеет вид
PLOT ARC (X,Y,A)
где X, Y - координаты центра дуги;
A - угол дуги (в градусах).
Угол дуги задается в виде арифметического выражения типа целый или вещественный.
В результате выполнения оператора PLOT ARC от текущей позиции рисуется дуга, центр которой расположен в точке с координатами (X,Y).
После выполнения оператора PLOT ARC координаты текущей позиции меняются на координаты последней точки на дуге.
Если угол положительный, то дуга будет построена против часовой стрелки, если же угол отрицательный, то по часовой стрелке.
Используя этот оператор, можно рисовать окружность, задавая угол в 360 градусов.
Пример.
10 SET POSITION (.5,.3) 20 PLOT ARC (.5,.5,360) RUN ГОТОВ
В результате выполнения оператора PLOT ARC от текущей позиции с координатами (.5,.3) строится окружность, центр которой расположен в точке с координатами (.5,.5).
8.9.11. Оператор построения кривой
Оператор построения кривой имеет вид
PLOT CURVE (X(),Y(),N,Z)
где X(), Y() - одномерные массивы вещественного типа обычной точности, определяющие горизонтальные и вертикальные координаты точек кривой, которая вычерчивается на экране;
N, Z - арифметическое выражение типа целый или вещественный, значения которых указывают число точек в массивах X() и Y() соответственно.
В результате выполнения оператора PLOT CURVE через указанные точки строится кривая линия. При ненулевом значении Z первая и последняя точки кривой соединяются; при нулевом значении Z этого не происходит.
Кривая выводится, начиная с точки, определяемой первыми элементами массивов, индексы последних элементов массивов принимают значения на единицу меньше, чем значение N.
Если указать 4 равноудаленные точки, то в результате выполнения оператора PLOT CURVE строятся круги (эллипсы).
Пример.
10 X(0)=.2 \ X(1)=.5 \ X(2)=.8 \ X(3)=.5 20 Y(0)=.5 \ Y(1)=.3 \ Y(2)=.5 \ Y(3)=.7 30 PLOT CURVE (X(),Y(),4%,-1%) RUN ГОТОВ
В результате выполнения оператора PLOT CURVE через указанные точки строится эллипс.
8.9.12. Оператор вывода экрана на печать
Оператор вывода экрана на печать имеет вид
PRINTSCREEN
В результате выполнения оператора PRINTSCREEN выводится текущее содержимое экрана видеомонитора на печатающее устройство.
Примечание. Во время вывода изображения экрана на печатающее устройство программа прерывает свою работу, а после окончания вывода продолжает ее.
8.9.13. Оператор сдвига изображения
Оператор сдвига изображения имеет вид
SCROLL (DX,DY)
где DX, DY - арифметические выражения вещественного типа.
DX указывает величину горизонтального сдвига, а DY - величину вертикального сдвига от текущей позиции.
В результате выполнения оператора SCROLL графическое изображение сдвигается по горизонтали влево (вправо) на величину DX, если DX имеет положительное (отрицательное) значение, и по вертикали вниз (вверх) на величину DY, если DY имеет положительное (отрицательное) значение.
Графическое изображение при выходе за пределы экрана разрушается.
Пример.
10 CLEAR 20 SET POSITION (.5,.35) 30 PLOT ARC (.5,.5,360) 40 DX=.04 \ DY=.08 50 SCROLL (DX,DY) 60 END RUN ГОТОВ
В результате выполнения этой программы от текущей позиции (.5,.35) строится окружность, центр которой расположен в точке с координатами (.5,.5). Затем графическое изображение сдвигается влево на величину .04 и вниз на величину .08.
8.9.14. Оператор запрещения построения изображения за пределами графического экрана
Оператор запрещения имеет вид
SET CLIP ON
Оператор SET CLIP ON запрещает построение изображения за пределами графического экрана.
По умолчанию построение изображения за пределами графического экрана не запрещено.
Пример.
5 SET CLIP ON 10 SET POSITION (.6,.55) 20 PLOT ARC (.25,.55,360) RUN ГОТОВ
В результате выполнения оператора PLOT ARC от текущей позиции (.6,.55) строится окружность, центр которой находится в точке с координатами (.25,.55). При этом часть окружности не выводится, так как изображение окружности выходит за пределы графического экрана.
8.9.15. Оператор разрешения построения изображения за пределами графического экрана
Оператор разрешения имеет вид
SET CLIP OFF
Оператор SET CLIP OFF разрешает построение изображения за пределами графического экрана.
Пример.
10 SET CLIP OFF 20 SET POSITION (.6,.45) 30 PLOT ARC (.25,.45,360) RUN ГОТОВ
В результате выполнения оператора PLOT ARC от текущей позиции (.6,.45) рисуется окружность, центр которой находится в точке с координатами (.25,.45), при этом окружность изображается полностью, так как оператором SET CLIP OFF разрешено построение изображения за пределами графического экрана.
8.9.16. Оператор установки набора символов
Оператор установки набора символов имеет вид
SET FONT N
где N - арифметическое выражение типа целый или вещественный.
В результате выполнения оператора SET FONT устанавливается определенный символьный шрифт, в соответствии с которым операторы графики изображают на экране символы.
N может принимать значения 0, 1 или 2. Если N имеет значение 0, то устанавливается стандартный набор символов; если N имеет значение 1 или 2 - то наборы символов, определяемые пользователем.
Наборы символов 1 и 2 определяют 95 символов, начиная с символа "пробел" до символа "пусто" включительно.
Начертание символов набора 0 не может меняться, символов наборов 1 и 2 может переустанавливаться оператором SET CHARACTER (см. п.8.8.17).
По умолчанию используется шрифт 0.
Если значение N не принадлежит интервалу от 0 до 2, то появляется сообщение об ошибке.
Пример.
10 SET FONT 2
8.9.17. Оператор установки начертания символа
Оператор установки начертания символа имеет вид
SET CHARACTER S,M
где S - текстовое выражение;
M - массив целых чисел из шестнадцати или восьми элементов.
В результате выполнения оператора SET CHARACTER устанавливается начертание первого символа текстового выражения S.
Первоначально конструируют изображение символа внутри вспомогательной сетки. Символ рисуется путем высвечивания одних элементов сетки на фоне погашеных других. Сетка для первого шрифта имеет размеры 16 на 16 элементов, для второго 8 на 8 (см. рис. 3 и рис. 4).
Шрифт 1

- Номера колонок слева направо: -32768, 16384, ..., 128, 64, 32, 16, 8, 4, 2, 1
- Номера строк сверху вниз: 1-16
Шрифт 2

- Номера колонок слева направо: -32768, 16384, 8192, 4096, 2048, 1024, 512, 256
- Номера строк сверху вниз: 1-8
Сетки нумеруются по горизонтали и вертикали. По вертикали нумерация строк идет сверху вниз, начиная с единицы. По горизонтали нумерация колонок - слева направо. Первая колонка имеет номер -32768, вторая - 16384, каждая последующая колонка имеет номер вдвое меньший предыдущего.
После того, как начертание символа сформировано, то есть определено какие элементы сетки будут высвечены на фоне погашеных, проводится кодировка символа. Для этого по каждой строке сетки вычисляют сумму номеров колонок, которые определены как светящиеся в изображении символа. Затем первому элементу массива M присваивается сумма первой строки сетки, второму - второй и т.д. После этого необходимо, используя оператор SET CHARACTER отождествить полученный массив M с символом, определяемым значением текстового выражения S.
Перед выполнением данного оператора необходимо установить с помощью оператора SET FONT (см. п.8.8.16) номер символьного набора, в котором определяется данный символ.
Пример.
10 REM 01234567 20 DATA ' X' 30 DATA ' XX' 40 DATA ' X X' 50 DATA ' X X' 60 DATA ' X X' 70 DATA ' X X' 80 DATA ' X X' 90 DATA 'X X' 100 DIM A%(8) 110 FOR K=0 TO 7 120 N=0 130 READ S$ 140 FOR I%=1 TO 7 150 IF MID$(S$,I%+1,1)<>' ' THEN N=N+2**(15-I%) 160 NEXT I% 170 IF MID$(S$,1,1)<>' ' THEN N=N-32768 180 A%(K)=N 190 NEXT K 200 SET FONT 2 210 SET CHARACTER 'L',A%() 220 GRAPHIC PRINT 'L' 230 END RUN ГОТОВ
В результате выполнения этой программы в символьном наборе 2 определяется начертание символа 'L'. При этом операторы с номерами строк от 10 до 190 позволяют автоматизировать вычисление значений элементов массива A%(), определяющих начертание символа.
8.9.18. Оператор установки размера символов
Оператор установки размера символов имеет вид
SET CHARACTER SIZE W,H
где W,H - арифметические выражения вещественного типа.
W определяет ширину, H - высоту символа.
В результате выполнения оператора SET CHARACTER SIZE устанавливается размер для символов, выводимых последующими операторами GRAPHIC PRINT (п.8.9.7) и GRAPHIC PRINT USING (п.8.9.8).
В табл. 8.1 для каждого шрифта приведены размеры символов, устанавливаемые по умолчанию.
| Номер шрифта | W | H |
|---|---|---|
| 0 | 12 | 10 |
| 1 | 16 | 16 |
| 2 | 8 | 8 |
Примечание. В табл. 8.1 значения W и H даны в шагах (шаг есть наименьшая контролируемая единица экрана. Экран монитора имеет 240 шагов по вертикали и 960 шагов по горизонтали).
Размеры символа зависят также от угла наклона. Символы, выводимые с наклоном, имеют ширину в 1.6 раза большую, чем те же символы, выводимые без наклона.
Если использовать набор символов 0, размеры графического экрана и систему координат, установленные по умолчанию, то по умолчанию символы будут иметь ширину равную .02 (1.6/80) и высоту равную .041667 (1/24). Символы таких размеров занимают полностью 24 строки и 80 колонок экрана. При каждом новом выполнении программы размеры, определяемые по умолчанию, будут вновь восстанавливаться.
Установка новых размеров символов автоматически изменяет и расстояние между символами.
Пример.
10 SET CHARACTER SIZE .2,.2 20 PLOT (0,0),(0,.2),(.2,.2),(.2,0),(0,0) 30 GRAPHIC PRINT 'ABC' RUN ГОТОВ
В результате выполнения оператора SET CHARACTER SIZE устанавливаются ширина символов, равная .2, и высота, равная .2. Затем на экран выводится квадрат и, в соответствии с установленными размерами, выводятся символы ABC (символ A выводится в квадрате).
8.9.19. Оператор установки межсимвольного расстояния
Оператор установки межсимвольного расстояния имеет вид
SET CHARACTER SPACING X,Y
где X, Y - арифметические выражения вещественного типа.
Значение X определяет расстояние между символами по горизонтали, значение Y - по вертикали.
В результате выполнения оператора SET CHARACTER SPACING переустанавливается новое расстояние между символами.
Межсимвольное расстояние устанавливается (в графической системе координат) от начала одного символа до начала следующего. Таким образом, для вывода последовательного текста (то есть, чтобы следующий символ был правее предыдущего), горизонтальное расстояние между символами должно быть больше или равно ширине одного символа.
По умолчанию расстояние между символами по горизонтали такое же, как и горизонтальный размер символа, то есть .02, по умолчанию расстояние между символами по вертикали равно 0, то есть символы выводятся на одну и ту же горизонтальную линию.
Пример.
10 SET CHARACTER SIZE .05,.15 20 GRAPHIC PRINT 'CLASS' 30 SET CHRACTER SPACING .15,0 35 SET POSITION (0,.35) 40 GRAPHIC PRINT 'CLASS' 50 END RUN ГОТОВ
В результате выполнения этой программы на экран дважды выводятся символы CLASS, причем при первом выводе расстояние между символами по горизонтали равно значению, установленному по умолчанию; при втором выводе это расстояние равно .15.
8.9.20. Оператор установки угла наклона символов
Оператор установки угла наклона символов имеет вид
SET ITALICS A
где A - арифметическое выражение вещественного типа.
Значение угла наклона A задается в градусах.
В результате выполнения оператора SET ITALICS устанавливается угол наклона символов, выводимых на графический экран последующими операторами GRAPHIC PRINT и GRAPHIC PRINT USING.
Символы, появляющиеся на экране после оператора SET ITALICS, наклонены вправо (по часовой стрелке), если в операторе SET ITALICS указано отрицательное значение угла, и влево (против часовой стрелки), если указано положительное значение угла.
По умолчанию угол наклона равен 0.
Примечание. Текст хорошо воспринимается, если значение угла наклона находится в диапазоне от 45 до -45 градусов.
Пример.
10 SET CHARACTER SIZE .04,.12 20 SET ITALICS -45 30 SET POSITION (.2,.8) 40 GRAPHIC PRINT 'ANGLE' RUN ГОТОВ
В результате выполнения оператора SET ITALICS символы 'ANGLE', выводимые на экран от текущей позиции (.2,.8), будут наклонены вправо на 45 градусов.
8.9.21. Оператор установки угла наклона строк
Оператор установки угла наклона строк имеет вид
SET TEXT ANGLE N
где N - арифметическое выражение типа целый или вещественный.
В результате выполнения оператора SET TEXT ANGLE устанавливается угол, под которым будут выводиться строки графического текста.
В табл. 8.2 для каждого значения N указан угол наклона строк.
| N | Угол наклона (в градусах) |
|---|---|
| 0 | 0 |
| 1 | 51 |
| 2 | 90 |
| 3 | 129 |
| 4 | 180 |
| 5 | 231 |
| 6 | 270 |
| 7 | 309 |
По умолчанию угол наклона текста устанавливается равным 0.
Если значение N не принадлежит интервалу от 0 до 7, то выводится сообщение об ошибке.
Пример.
5 SET CHARACTER SIZE .04,.12 10 SET POSITION (.7,.3) 20 SET TAXT ANGLE 4 30 GRAPHIC PRINT TEXT AI 180 DEGREES RUN ГОТОВ
В результате выполнения этой программы от текущей позиции (.7,.3) под углом в 180 градусов выводится строка TEXT AT 180 DEGREES.
8.9.22. Оператор установки заполнения от точки
Оператор установки заполнения от точки имеет вид
SET FILL (X,Y)
где X, Y - координаты точки.
В результате выполнения оператора SET FILL пространство от установленной точки до последующего графического изображения будет заполняться одним и тем же символом, называемым образом заполнителя.
Образ заполнителя определяется текущими значениями оператора установки вида заполнителя, оператора установки вида заполнителя и оператора установки вида отрезков (пп.8.9.26, 8.9.27).
Заполнение всегда происходит фоновым цветом. По умолчанию образ заполнителя сплошной.
Примечание. Заполнение графического изображения от точки намного медленней, чем заполнение от горизонтальной или вертикальной линии. Поэтому, где это возможно, следует использовать операторы установки заполнения от горизонтали или установки заполнения от вертикали (пп.8.8.23, 8.8.24).
Пример.
10 SET FILL (0,.3) 20 PLOT (0,0),0.5,.5) RUN ГОТОВ
В результате выполнения оператора SET FILL устанавливается точка с координатами (0,.3). Пространство от этой точки до прямой, вычерчиваемой оператором PLOT от точки (0,0) до точки (.5,.5), заполняется фоновым цветом.
8.9.23. Оператор установки заполнения от вертикали
Оператор установки заполнения от вертикали имеет вид
SET FILLX X
где X - горизонтальная координата.
В результате выполнения оператора SET FILLX производится заполнение пространства от вертикальной линии с указанной горизонтальной координатой до последующего графического изображения фоновым цветом.
Пример.
10 SET FILLX 25 20 PLOT (0,0),(.5,.5) RUN ГОТОВ
В результате выполнения операторов SET FILLX и PLOT пространство от вертикальной линии, имеющей горизонтальную координату .25, до прямой заполняется фоновым цветом.
8.9.24. Оператор установки заполнения от горизонтали
Оператор установки заполнения от горизонтали имеет вид
SET FILLY Y
где Y - вертикальная координата.
В результате выполнения оператора SET FILLY производится заполнение пространства от горизонтальной линии с указанной вертикальной координатой до последующего графического изображения фоновым цветом.
Пример.
10 SET FILLY .25 20 PLOT (0,0),(.5,.5) RUN ГОТОВ
В результате выполнения операторов SET FILLY и PLOT пространство от горизонтальной линии, имеющей вертикальную координату .25, до прямой, вычерчиваемой оператором PLOT, заполняется фоновым цветом.
8.9.25. Оператор запрещения заполнения
Оператор запрещения заполнения имеет вид
SET FILL OFF
В результате выполнения оператора SET FILL OFF происходит запрещение заполнения изображения фоновым цветом.
Пример.
10 SET FILL (.3,0) 20 PLOT (0,0),(.4,.4) 30 SET FILL OFF 40 PLOT (.5,0),(0,.4) RUN ГОТОВ
В результате выполнения первых двух операторов SET FILL и PLOT от точки с координатами (.3,0) до прямой происходит заполнение фоновым цветом. Затем выводится прямая линия от точки (.5,0) до точки (0,.4). При этом заполнение от точки (.3,0) до прямой не происходит, так как в результате выполнения оператора SET FILL OFF заполнения запрещено.
8.9.26. Оператор установки вида заполнителя
Оператор установки вида заполнителя имеет вид
SET FILL STYLE S
где S - текстовое выражение.
В результате выполнения оператора SET FILL STYLE устанавливается образ заполнителя равный первому символу значения S.
Если S имеет значение "пусто", то образ заполнителя не меняется.
Чтобы получить сплошное заполнение после использования некоторого другого образа заполнителя, в качестве S используется значение функции CHR$(0).
По умолчанию образ заполнителя устанавливается сплошным.
Если в операторе SET FILL STYLE в качестве S указать управляющие символы (с CHR(1) по CHR(31)), то образ заполнителя будет маленьким квадратом (наименьшее графическое изображение).
Результат действия оператора SET FILL STYLE зависит также от значения оператора SET WRITING MODE (п.8.8.30).
Пример.
10 SET FILL STYLE '*' 20 SET FILLY .25 30 PLOT (0,0),(.5,.5) RUN ГОТОВ
В результате выполнения этих операторов все пространство от горизонтальной линии, имеющей вертикальную координату .25, до прямой, вычерчиваемой оператором PLOT, заполняется символом '*'. Образ заполнителя '*' был установлен ранее оператором SET FILL STYLE.
8.9.27. Оператор установки вида отрезка
Оператор установки вида отрезка имеет вид
SET LINE STYLE N
где N - арифметическое выражение типа целый или вещественный.
В результате выполнения оператора SET LINE STYLE устанавливается вид выводимых отрезков в зависимости от значения N (табл.8.3).
| N | Вид отрезка |
|---|---|
| 1 | Сплошной |
| 2 | Тире |
| 3 | Точка-тире |
| 4 | Точка |
| 5 | Точка-точка-тире |
| 6 | Точка (оставляя широкие промежутки) |
| 7 | Тире (короткие отрезки) |
| 8 | Тире (длинные отрезки) |
| 9 | Точка-тире (короткие отрезки) |
По умолчанию и для N не принадлежащих интервалу от 1 до 9, устанавливается вид отрезка 1 (сплошная).
Пример.
10 SET CHARACTER SIZE .04,.08 20 FOR L=9 TO 1 STEP -1 30 SET LINE STYLE L 40 H=1-(L/10) 50 SET POSITION (.2,H-.04)
60 GRAPHIC PRINT L 70 PLOT (.3,H),(.9,H) 80 NEXT L RUN ГОТОВ
В результате выполнения этой программы на экран выводится девять отрезков различного вида.
8.9.28. Оператор выбора цвета
Оператор выбора цвета имеет вид
SET COLOR N
где N - арифметическое выражение вещественного типа.
Значение N, лежащее в диапазоне от 0 до 7, определяет один из 8 цветов.
В результате выполнения оператора SET COLOR утанавливается цвет, которым будет выводиться последующее графическое изображение.
| N | Цвет |
|---|---|
| 0 | Черный |
| 1 | Красный |
| 2 | Зеленый |
| 3 | Синий |
| 4 | Желтый |
| 5 | Вишневый |
| 6 | Голубой |
| 7 | Белый |
В табл.8.4 приводится список цветов, установленных по умолчанию для цветного видеомонитора.
По умолчанию фон черного цвета, а цвет, которым выводится графическое изображение - белый.
Если указанный номер цвета не попадает в интервал от 0 до 7, то переустановка цвета не происходит.
Пример.
10 SET COLOR 1 20 SET POSITION (.5,.2) 30 PLOT ARC(.5,.5,360) RUN ГОТОВ
В результате выполнения этой программы на черном фоне красным цветом выводится окружность с центром в точке (.5,.5).
8.9.29. Оператор переустановки таблицы цвета
Оператор переустановки таблицы цвета имеет вид
SET COLORMAP N,R,G,B
где N, R, G, B - арифметические выражения вещественного типа.
Значение N определяет один из 8 цветов (табл.8.4). Значения R, G, B, лежащие в диапазоне от 0 до 1, указывают на интенсивность красного, зеленого и синего цветов соответственно в цвете, установленном по значению N.
В результате выполнения оператора SET COLORMAP устанавливается один из 8 цветов. При этом меняется цвет графического изображения, которое было выведено до выполнения оператора SET COLORMAP.
Каждый из 8 цветов получается за счет сочетания красного, зеленого и синего цветов, интенсивность каждого из которых определяется числовым значением между 0 и 1, причем 0 соответствует наименьшей интенсивности, 1 - наибольшей.
В табл. 8.5 приводится список цветов, установленных по умолчанию для цветного видеомонитора.
| N | RGB | Цвет |
|---|---|---|
| 0 | 000 | Черный |
| 1 | 100 | Красный |
| 2 | 010 | Зеленый |
| 3 | 001 | Синий |
| 4 | 110 | Желтый |
| 5 | 101 | Вишневый |
| 6 | 011 | Голубой |
| 7 | 111 | Белый |
Примечание. При наличии цветного видеомонитора и расширителя памяти видеоданных (РВП), графическое изображение может быть нарисовано любым из 8 цветов. Имея черно-белый видеомонитор и РВП, графическое изображение рисуется 8 оттенками серого цвета. Если РВП отсутствует, то оператор SET COLORMAP игнорируется.
В табл. 8.6 приводится список оттенков серого цвета для черно-белого видеомонитора с РВП.
| N | R | G | B |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1/7 | 1/7 | 1/7 |
| 2 | 2/7 | 2/7 | 2/7 |
| N | R | G | B |
|---|---|---|---|
| 3 | 3/7 | 3/7 | 3/7 |
| 4 | 4/7 | 4/7 | 4/7 |
| 5 | 5/7 | 5/7 | 5/7 |
| 6 | 6/7 | 6/7 | 6/7 |
| 7 | 1 | 1 | 1 |
Пример.
10 SET COLOR 2 20 SET POSITION (.3,.3) 30 PLOT ARC (.5,.5,360) 40 SET COLORMAP 1,1,0,0 RUN ГОТОВ
В результате выполнения этой программы выводится круг зеленого цвета, затем зеленый цвет меняется на красный.
8.9.30. Оператор установки режима построения изображения
Оператор установки режима построения изображения имеет вид
SET WRITING MODE E
где E - арифметическое выражение целого типа.
В результате выполнения этого оператора устанавливается режим построения графического изображения.
Существует 10 различных режимов построения изображения, каждый из которых определяется целым числом от 0 до 9.
0,1 - прозрачный, прозрачный негативный
2,3 - дополнительный, дополнительный негативный
4,5 - покрывающий, покрывающий негативный
6,7 - замещающий, замещающий негативный
8,9 - разрушающий, разрушающий негативный
В режимах построения изображения различают элементы, построение которых производится основным и фоновым цветом. Некоторые элементы всегда выводятся основным цветом, например, сплошная линия. Другие элементы имеют основную и фоновую часть, например, пунктирная линия или символы. В пунктирных линиях пунктиры выводятся основным цветом, а пространство между ними - фоновым. В символах линии, составляющие символ, высвечиваются основным цветом, а все остальное пространство внутри символьной ячейки - фоновым. Негативные режимы рисования переключают режим построения изображения с основного цвета на фоновый. Например, дополнительный режим построения изображения заменяет основной цвет на дополнительный, а фоновый оставляет без изменения. Дополнительный же негативный режим заменяет фоновый цвет, а без изменения оставляет основной.
Если режим построения изображения не различает основной и фоновый цвет, то негативный режим оказывает то же действие, что и основной режим. Например, прозрачный и прозрачный негативный режим идентичны.
Прозрачный режим (режим 0) - ничего не выводит, но изменяет текущую позицию, как если бы осуществлялось построение изображения.
Дополнительный режим (режим 2) - выводит графическое изображение с текущей позиции дополнительным цветом. Ниже приведены пары цветов, дополняющие друг друга, а так же их цвет, установленный по умолчанию.
0 и 4 (черный и желтый)
1 и 6 (красный и светло-голубой)
2 и 5 (зеленый и вишневый)
3 и 7 (голубой и белый)
При выводе в дополнительном режиме пунктирной линии, пунктиры будут выводиться дополнительным цветом, а промежутки между ними фоновым.
Покрывающий режим (режим 4) - строит изображение, используя текущий установленный цвет. Режим влияет только на основной цвет, фоновый остается без изменения.
Замещающий режим (режим 6) - строит изображение, используя текущий установленный цвет, фоновый цвет не изменяется
Разрушающий режим (режим 8) - строит изображение, используя фоновый цвет.
При каждом новом выполнении программы по умолчанию устанавливается покрывающий режим рисования (режим 4).
9. Встроенные функции
Встроенные функции представляют собой реализации наиболее часто встречающихся математических и текстовых функций. Ссылка на встроенную функцию производится с помощью ее имени и следующими за ним фактическими параметрами, заключенными в скобки.
Фактическим параметром функции может быть арифметическое или текстовое выражение. Фактический параметр заключается в круглые скобки.
Встроенные функции имеют тип вещественный или текстовый.
9.1. Встроенные функции вещественного типа
В табл. 9.1 приведены встроенные функции вещественного типа.
| Указатель функции | Встроенная функция |
|---|---|
| SIN(E) | Тригонометрический синус |
| COS(E) | Тригонометрический косинус |
| ATN(E) | Арктангенс |
| SQR(E) | Квадратный корень |
| EXP(E) | Экспоненциальная функция |
| LOG(E) | Натуральный логарифм |
| LOG10(E) | Десятичный логарифм |
| PI | Отношение длины окружности к диаметру |
| RND | Генератор случайного числа |
| INT(E) | Наибольшее целое |
| ABS(E) | Абсолютное значение |
| FIX(E) | Преобразование вещественного числа в целое усечением |
| TAB(E) | Табуляция |
| LEN(S) | Подсчет числа символов |
| POS(S1,S2,E) | Определение номера позиции, с которой начинается одна текстовая константа в другой |
| ASCII(S) | Определение кода символа |
| VAL(S) | Преобразование значения текстовой константы в числовое значение |
| CCPOS(N) | Определение текущей позиции курсора |
| ERL | Определение номера строки, в которой обнаружена ошибка |
| ERR | Определение кода ошибки |
В тригонометрических функциях параметр задается в радианах. Связь между параметром, выраженным в радианах, и параметром, выраженным в градусах, определяется следующей формулой:
Значение в радианах = (значение в градусах)*PI / 180
9.1.1. Функция SIN
Функция SIN имеет вид
SIN(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция определяет синус угла, заданного в радианах.
Значение функции заключается в интервале от -1 до +1.
Пример.
PRINT SIN(3) .14112 PRINT SIN(77%) .99952 PRINT SIN(1-3**3) -.762563
9.1.2. Функция COS
Функция COS имеет вид
COS(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция определяет косинус угла, заданного в радианах.
Значение функции заключается в интервале от -1 до +1.
Пример.
PRINT COS(2) -.416147 PRINT COS(15%) -.759688 PRINT COS(-44) .999843 A=55 \ PRINT COS(A/5+11) -.999961
9.1.3. Функция ATN
Функция ATN имеет вид
ATN(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция определяет угол, тангенс которого равен значению выражения E.
Значение функции выражается в радианах и заключается в интервале от -PI/2 до +PI/2.
Пример.
PRINT ATN(6%) 1.40565 PRINT ATN(33) 1.5405 PRINT ATN(1) .785398 B=3 \ PRINT ATN(7-B**2) -1.10715
9.1.4. Функция SQR
Функция SQR имеет вид
SQR(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция определяет квадратный корень из значения выражения E.
Значение выражения E должно быть больше или равно нулю. Если значение выражения E меньше нуля, то появляется сообщение об ошибке.
Примеры:
PRINT SQR(2) 1.41421 PRINT SQR(11%) 3.31662 PRINT SQR(100+5**3) 15
9.1.5. Функция EXP
Функция EXP имеет вид
EXP(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция определяет значение алгебраической константы возведенной в степень E. Значение алгебраической константы приблизительно равно 2.71828.
Значение выражения E должно принадлежать интервалу от -88 до +88.
Пример.
PRINT EXP(2) 7.38906 PRINT EXP(88) .165163E+39 PRINT EXP(-88) .605462E-38 B=2 \ C=7 \ PRINT EXP(5*B-C) 20.0855
9.1.6. Функция LOG
Функция LOG имеет вид
LOG(E)
где E - арифметическое выражение типа целый или вещественный.
Значение выражения E должно быть больше нуля.
Эта функция определяет натуральный логарифм выражения E.
Натуральный логарифм E есть степень, в которую надо возвести алгебраическую константу, чтобы получить значение E. Например, натуральный логарифм 100 равен 4.60517, так как значение алгебраической константы в степени 4.60517 равно 100.
Пример.
PRINT LOG(55%) 4.00733 PRINT LOG(7.8) 2.05412 A=11 \ PRINT LOG(7%+2%*A/6%)
2.36712
9.1.7. Функция LOG10
Функция LOG10 имеет вид
LOG10(E)
где E - арифметическое выражение типа целый или вещественный.
Значение выражения E должно быть больше нуля.
Эта функция определяет десятичный логарифм выражения E.
Десятичный логарифм E есть степень, в которую надо возвести число 10, чтобы получить значение E. Например, десятичный логарифм 100 равен 2, так как 10 в степени 2 равно 100.
Пример.
PRINT LOG10(1000) 3 PRINT LOG10(50.7) 1.70501 PRINT LOG10(100-2**4) 1.92428
9.1.8. Функция PI
Функция PI имеет вид
PI
Значением этой функции является константа равная отношению длины окружности к ее диаметру. Величина константы приблизительно равна 3.141592653589793
Пример.
PRINT PI 3.14159
9.1.9. Функция RND
Функция RND имеет вид
RND
Эта функция генерирует случайное число в интервале (0,1).
Если необходимо получить последовательность случайных чисел в интервале (0,1), то функцию RND следует использовать в цикле.
Каждый раз после выполнения оператора CHAIN (п.8.6.1). функция RND генерирует одно и то же случайное число или, если ее использовать в цикле, одну и ту же последовательность случайных чисел. Если необходимо получить различные случайные числа или различные последовательности случайных чисел, то функцию RND следует использовать совместно с оператором RANDOMIZE (см. п.8.4).
Для генерации случайного числа в диапазоне [A,B] используется следующее выражение
(B-A)*RND+A
Примеры.
10 FOR I=1 TO 4 20 PRINT RND, 30 NEXT I RUN .714651 .595599 .984834 .438598 ГОТОВ RUN .714651 .595599 .984834 .438598 ГОТОВ
В результате выполнения этих операторов генерируется одна и та же последовательность случайных чисел.
5 RANDOMIZE 10 FOR I=1 TO 4 20 PRINT RND, 30 NEXT I RUN .431183 .88933 .310711 .761495 ГОТОВ
RUN .269323 .369854 .677882 .437031 ГОТОВ
В результате выполнения этих операторов генерируются разные последовательности случайных чисел.
10 A=5 20 B=10 30 FOR I=1 TO 4 40 PRINT (B-A)*RND+A, 50 NEXT I RUN 8.57326 7.978 9.92417 7.19299 ГОТОВ
В результате выполнения этих операторов генерируется последовательность случайных чисел в диапазоне [5,10].
9.1.10. Функция INT
Функция INT имеет вид
INT(E)
где E - арифметическое выражение вещественного типа.
Эта функция определяет значение наибольшего целого числа, не превосходящего значения E и имеющего тот же знак, что и E.
Функцию INT можно использовать для округления чисел до ближайшего целого числа. Для этого необходимо определить значение функции INT(E+.5).
Пример.
PRINT INT(34.37) 34 PRINT INT(-14.7) -15 PRINT INT(72.71+.5) 73 PRINT INT(-77.7+5**2) -53
9.1.11. Функция ABS
Функция ABS имеет вид
ABS(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция определяет абсолютное значение E.
Пример.
PRINT ABS(-35.7) 35.7 PRINT ABS(25E+20) .25E+22 A=101.3 \ B=-200 \ PRINT ABS(A+B) 98.7
9.1.12. Функция FIX
Функция FIX имеет вид
FIX(E)
где E - арифметическое выражение вещественного типа.
Эта функция преобразует вещественное число в целое.
Примеры:
PRINT FIX(7.4) 7 PRINT FIX(19.8) 19 PRINT FIX(-51.7) -51
10 READ A,B 20 PRINT A,FIX(A),INT(A) 30 PRINT B,FIX(B),INT(B) 40 DATA 9.9,-9.9 RUN 9.9 9 9 -9.9 -9 -10 ГОТОВ
В результате выполнения этих операторов на одной строке выводятся значения A=9.9, FIX(A)=9, INT(A)=9; на другой строке - B=-9.9, FIX(B)=-9, INT(B)=-10.
10 A=5.7 \ B=10.1 20 PRINT FIX(100-A*B)
RUN 42 ГОТОВ
В результате выполнения этих операторов выводится значение функции FIX(100-A*B)=42.
9.1.13. Функция TAB
Функция TAB имеет вид
TAB(E)
где E - арифметическое выражение типа целый или вещественный.
В результате выполнения функции TAB маркер на экране видеомонитора или позиция вывода в файле передвигается на позицию, номер которой равен целой части значения выражения E.
Если маркер расположен на позиции, номер которой больше или равен значению E, то при выполнении функции TAB маркер остается на месте.
Эта функция используется совместно с оператором PRINT (п.8.5.11). В одном операторе PRINT могут использоваться несколько функций TAB. Если в операторе PRINT элементы списка вывода, среди которых есть функции TAB, разделены запятой, то перед выполнением функции TAB происходит переход на следующую зону.
Пример.
10 PRINT "A";TAB(10);"B" 20 PRINT "A",TAB(27),"B" RUN A B A B ГОТОВ
В результате выполнения первого оператора PRINT выводится константа "A" на нулевой позиции, затем маркер устанавливается на позицию 10 и на этой позиции выводится константа "B". В результате выполнения второго оператора PRINT выводится константа "A" на нулевой позиции, затем маркер перемещается на начало следующей зоны, так как элементы в списке разделены запятой, и устанавливается на позиции с номером 27, затем маркер снова перемещается на начало следующей зоны и происходит вывод константы "B".
9.1.14. Функция LEN
Функция LEN имеет вид
LEN(S)
где S - текстовое выражение.
Эта функция определяет число символов в значении текстового выражения S.
Если значение выражения S равно "пусто", то значение функции LEN равно нулю.
Примеры:
10 A$="ABCDEFG" 20 PRINT LEN($A) RUN 7 ГОТОВ
10 PRINT LEN('CON'+'STANT')
RUN
8
ГОТОВ
10 A$='POR' 20 B$='GRIN' 30 PRINT LEN(A$+B$) RUN 7 ГОТОВ
10 S$='' 20 PRINT LEN(S$) RUN 0 ГОТОВ
9.1.15. Функция POS
Функция POS имеет вид
POS(S1, S2, E)
где S1, S2 - текстовые выражения;
E - арифметическое выражение типа целый или вещественный.
Если E имеет вещественное значение, то оно приводится к типу целый усечением.
Эта функция осуществляет поиск значения текстового выражения S2 в текстовом выражении S1 и определение номера позиции, с которой начинается S2 в S1. Значение E указывает на номер позиции в значении выражения S1, с которого начинается поиск. Если E меньше или равно 1, поиск начинается с первого символа значения выражения S1.
Значение функции равно нулю, если:
- S1 имеет значение "пусто";
- E больше числа символов в S1, а S2 имеет непустое значение;
- число символов в S2 больше числа символов в S1;
- S2 не содержится в S1.
Значение функции равно единице, если:
- S2 имеет значение "пусто", а значение E больше 1, но меньше или равно числу символов в значении S1;
- S2 имеет значение "пусто", а значение E больше числа символов в значении S1;
- S1 и S2 имеют значения "пусто".
Примеры:
10 A$="SUBROUTINE" \ B$="ROUTINE" 20 PRINT POS(A$,B$,1) 30 END RUN 4 ГОТОВ
10 A$='ABC' 20 B$='DEFG' 30 PRINT POS(A$+B$,B$,-2%) RUN 4 ГОТОВ
PRINT POS('','ABC',2)
0
PRINT POS('ABCDEFG','FG',8)
0
PRINT POS('ABC','ABCDEF',2)
0
PRINT POS('ABCD','FG',1%)
0
PRINT POS('ABCDEFG','',3%)
1
PRINT POS('ABCDEFG','',9)
1
PRINT POS('','',2%)
1
9.1.16. Функция ASCII
Функция ASCII имеет вид
ASCII(S)
где S - текстовое выражение.
Эта функция определяет десятичное значение кода первого символа в текстовом выражении S.
Если S имеет значение "пусто", то функция имеет значение нуль.
Пример.
PRINT ASCII("E")
69
PRINT ASCII("Z")
90
PRINT ASCII('')
0
A$='X' \ B$='Y' \ PRINT ASCII(A$+B$)
88
PRINT ASCII('>'+'O'+'A')
62
9.1.17. Функция VAL
Функция VAL имеет вид
VAL(S)
где S - вещественное число, записанное в виде текстовой константы или выражения (п.5.1.1.3).
Эта функция преобразует вещественное число, записанное в виде текстового выражения, в числовое значение.
Если значение текстового выражения S равно "пусто", то значение функции равно нулю. Если в S имеются пробелы, то появляется сообщение об ошибке.
Пример.
PRINT VAL("244.07")
244.07
PRINT VAL("15.00E+01")
150
PRINT VAL("-35.78E+02")
-3578
PRINT VAL("135.89E+25")
.13589E+28
PRINT VAL('55.'+'01')
55.01
A$='7E-05' \ PRINT VAL(A$)
.00007
9.1.18. Функция CCPOS
Функция CCPOS имеет вид
CCPOS(N)
где N - номер канала.
Эта функция определяет значение текущей позиции в записи файла или позиции маркера видеомонитора по указанному каналу.
Пример.
10 FOR I=1 TO 10 20 FOR J=1 TO I 30 PRINT ' '; 40 NEXT J 50 PRINT CCPOS(0) 60 NEXT I 70 END
RUN
1
2
3
4
5
6
7
8
9
10
9.1.19. Функция ERL
Функция ERL имеет вид
ERL
Эта функция определяет номер строки, в которой обнаружена последняя ошибка.
Пример.
10 A=5 \ B=0 20 C=A/B 30 C=C*A RUN ПРЕДУПРЕЖДЕНИЕ 61 В СТРОКЕ 20: ДЕЛЕНИЕ НА НУЛЬ НЕ ОПРЕДЕЛЕНО ГОТОВ PRINT ERL 20
9.1.20. Функция ERR
Функция ERR имеет вид
ERR
Эта функция определяет номер последней ошибки.
Пример.
10 A=12 \ B=0 20 A=A/B 30 PRINT A RUN ПРЕДУПРЕЖДЕНИЕ 61 AT LINE 20: ДЕЛЕНИЕ НА НУЛЬ НЕ ОПРЕДЕЛЕНО ГОТОВ PRINT ERR 61
9.2. Встроенные функции типа текстовый
В табл. 9.2 приведены встроенные функции типа текстовый.
| Указатель функции | Встроенная функция |
|---|---|
| MID$(S,E1,E2) | Выделение последовательности символов из текстового выражения |
| DATE$(E) | Определение текущей даты |
| TIME$(E) | Определение текущего времени |
| CHR$(E) | Определение символа |
| NUM$(E) | Преобразование числового значения в текстовое |
| EDIT$(S,E) | Редактирование строки |
| ERT$(E) | Получение текста сообщения об ошибке |
9.2.1. Функция MID$
Функция MID$ имеет вид
MID$(S, E1, E2)
где S - текстовое выражение;
E1, E2 - арифметические выражения типа целый или вещественный.
Если значения E1 и E2 не являются целыми, они приводятся к типу целый усечением.
Эта функция осуществляет выделение последовательности символов из значения текстового выражения S, начиная с позиции, порядковый номер которой равен значению E1. Число выделяемых символов равно значению E2.
Если E1 меньше 1, оно считается равным 1.
Если E1 больше числа символов в S или E2 меньше или равно нулю, то функция принимает значение "пусто".
Если E2 больше числа символов в S, значение функции равно последовательности символов из S, начиная с символа, номер позиции которого равен значению E1.
Пример.
PRINT MID$("SUBSTRING",4,6)
STRING
PRINT MID$('ABC'+'DEF',3%,3%)
CDE
PRINT MID$('ABCDEF',-2,4%)
ABCD
A$='POL' \ B$='LETTO' \ C=5
PRINT MID$(A$+B$,C,C-2)
ETT
PRINT MID$('ABCDEFG',3,8)
CDEFG
PRINT MID$('ABCDEFG',2.7,3.4)
BCD
9.2.2. Функция DATE$
Функция DATE$ имеет вид
DATE$(E)
где E - константа типа целый или вещественный.
Эта функция определяет текущую дату в виде
NN-MMM-KK
где NN - две цифры, определяющие число;
MMM - три буквы, определяющие месяц;
KK - две цифры, определяющие год.
Значение функции DATE$ не зависит от константы E.
Пример.
PRINT DATE$(0%) 25-MAY-85
9.2.3. Функция TIME$
Функция TIME$ имеет вид
TIME$(E)
где E - константа типа целый или вещественный.
Эта функция определяет текущее время в виде
TT:MM
где TT - две цифры, определяющие часы;
MM - две цифры, определяющие минуты.
Значение функции TIME$ не зависит от константы E.
Пример.
PRINT TIME$(0%) 10:35
9.2.4. Функция CHR$
Функция CHR$ имеет вид
CHR$(E)
где E - арифметическое выражение типа целый или вещественный.
Если значение E вещественного типа, оно преобразуется к типу целый усечением.
Эта функция определяет символ, десятичный код которого равен значению выражения E. Значение E может иметь вид (N+K*256), где N - десятичное значение кода символа в пределах от 0 до 255, K=...-3,-2,-1,0,1,2,3,... Значение E должно находиться в диапазоне от -32768 до +32767.
Пример.
PRINT CHR(56%) 8 PRINT CHR(87) W PRINT CHR(291) # PRINT CHR(101.7) A A%=120% \ PRINT CHR$(A%-2%**5%) X PRINT CHR(1370) Z
9.2.5. Функция NUM$
Функция NUM$ имеет вид
NUM$(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция преобразует значение арифметического выражения E в текстовую константу, равную значению E без начальных и конечных пробелов.
Функция NUM$ применяется в тех случаях, когда необходимо использовать текстовые операции или текстовые функции для работы над числами.
Пример.
PRINT NUM$(56+34) 90 PRINT NUM$(45.6) 45.6 PRINT NUM$(-240.1) -240.1 PRINT NUM$(2%+3%**3%) 29 A=5.7 \ B=3 \ PRINT NUM$(A/B) 1.9 PRINT NUM$(5E+02) 500 PRINT NUM$(.1E+08) .1E+08
9.2.6. Функция EDIT$
Функция EDIT$ имеет вид
EDIT$(S,E)
где S - текстовое выражение;
E - арифметическое выражение типа целый или вещественный, определяющее вида операции редактирования согласно табл.9.3. операции редактирования (см. табл.9.3).
| Значение E | Операция редактирования |
|---|---|
| 2 | Исключение всех пробелов и табуляций |
| 8 | Исключение начальных пробелов и табуляций |
| 16 | Преобразование последовательности пробелов и табуляций в одиночный пробел |
| 32 | Преобразование прописных букв в строчные |
| 128 | Исключение конечных пробелов и табуляций |
Складывая указанные в таблице значения, можно одновременно выполнить несколько операций редактированиния.
Примеры:
10 S$=' AAABB CCC DDD EEE FFF'
20 PRINT EDIT$(S$,2)
RUN
AAABBCCCDDDEEEFFF
ГОТОВ
10 S$=' AAABBB CCC DDD EEE FFF'
20 PRINT EDIT$(S$,16)
RUN
AAABBB CCC DDD EEE FFF
ГОТОВ
10 PRINT EDIT$(' AAA BBB '+'CCC DDDF ',136%)
RUN
AAA BBB CCC DDDF
ГОТОВ
10 A$=' AAA BBB CCC DDD 20 B$=' 30 C=8+16+32 40 PRINT EDIT$(A$+B$,C) RUN AAA BBB CCC DDD FFF EEE ГОТОВ
9.2.7. Функция ERT$
Функция ERT$ имеет вид
ERT$(E)
где E - арифметическое выражение типа целый или вещественный.
Эта функция позволяет получить текст сообщения об ошибке, номер которой равен значению выражения E.
Номер ошибки должен быть между 0 и 255, включительно.
Пример.
PRINT ERT$(11) КОНЕЦ ФАЙЛА
Выводится сообщение об ошибке, код которой равен 11.
10. Комментарии
Комментарии не оказывают никакого влияния на выполнение программы и предназначены для документирования и улучшения читаемости текста программы.
Комментарии имеют вид
REM C1C2...CN
или
! C1C2...CN
где CI - один из символов алфавита языка.
Комментарии, записанные первым способом, хранятся в памяти и выводятся на видеомонитор после подачи команды LIST (см. [2]). Комментарии, записанные вторым способом, в памяти не хранятся и после подачи команды LIST на видеомонитор не выводятся.
На строке, содержащей несколько предложений, комментарии должны быть записаны последними.
Пример.
10 REM ЭТО ПРИМЕР 20 FOR I=1 TO N-1 \ ПОДСЧЕТ ПОВТОРЕНИЯ ТЕЛА ЦИКЛА 30 A=A+I 40 NEXT I ! ПЕРВАЯ ПОДПРОГРАММА 50 A=A**2 60 PRINT A
Перечень ссылочных документов
- Программное обеспечение "Электроника МС 0585". Операционная система ПРОС. Описание применения. .00065-01 31 01
- Программное обеспечение "Электроника МС 0585". БЕЙСИК-П. Руководство оператора. .00065-01 34 02
Заказ № 94-88