Львов/Описание языка БЕЙСИК

Материал из Emuverse
Данный материал защищён авторскими правами!

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

Источник: http://lvovpc.xost.ru

УТВЕРЖДЕН

589.0196339.OOOOI-OI 35 OI-ДУ

ПЕРСОНАЛЬНАЯ ЭВМ ПК-01 "ЛЬВОВ"

Описание языка БЕЙСИК 589.0196339.OOOOI-OI 35 01

В Н И М А Н И Е

В таблице 1 читать:

Фон Палитра Цвет Должно быть
4 4 3 ЗЕЛ
5 4 3 ЗЕЛ
6 3 1 ЧЕР
6 3 2 ГОЛ
6 4 1 ЧEP
6 4 2 БЕЛ
7 5 1 КР
7 5 2 БЕЛ
7 5 3 ЗЕЛ
7 6 1 КР
7 6 2 ГОЛ
7 6 3 ЗЕЛ

Зак. 1308-400.

АННОТАЦИЯ

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

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

Описаны операторы для работы с массивами. Представлены команды для отладки и запуска программных файлов.

Описана система ввода-вывода.

I. ОБЩИЕ СВЕДЕНИЯ И СПОСОБ ОПИСАНИЯ ЯЗЫКА

1. 1. Назначение языка

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

Программа на языке БЕЙСИК представляет собой набор операторов, объединенных в логические блоки.

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

1. 2. Способ описания языка

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

Последовательности слов, записанные строчными буквами и заключенные в угловые скобки <и> , определяют синтаксические конструкции, которые записаны где-либо в другой части данного документа. Эти слова в какой-то мере отражают природу и смысл таких конструкций. Если последовательность конструкций заключена в квадратные скобки [и] , то это означает, что данная последовательность является необязательной и может быть опущена. Варианты последовательностей конструкций, заключенные в фигурные скобки {и} , являются альтернативными и должен быть выбран один из этих вариантов.

2. ЭЛЕМЕНТЫ И ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА

2.1. Набор символов

В языке БЕЙСИК ПК-01 используются следующие символы:

1) 26 букв латинского алфавита (А, В, С, D, Е, F, G, Н, I, J , К, L, М, N, 0. Р, Q, R, S, Т, U, V, W, X, У, Z);

2) 31 буква русского алфавита (А, Б, В, Г, Д, Е, Ж, 3, И, К, Й, Л, М, Н, О, П, Р, С, Т, У, Ф, X, Ц, Ч, Ш. Щ. Э, Ы, Ю, Я, Ь), твердый знак (Ъ) в тексте отображается символом _ ;

3) 10 десятичных: цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

4) знаки арифметических операций:

  • + - плюс;
  • - - минус;
  • * - звездочка;
  • / - наклонная черта (знак деления);
  • ^ - стрелочка (знак возведения в степень);

5) знаки операций отношения:

  • < - знак меньше;
  • > - знак больше;
  • = - знак равенства;

6) синтаксические знаки;

  • (- открывающая круглая скобка;
  • ) - закрывающая круглая скобка;
  • , - запятая;
  • . - точка;
  • " - кавычки;
  • ; - точка с запятой;
  • : - двоеточие;

7) специальные знаки:

  • $ - знак денежной единицы (признак символьных данных);
  • ? - вопросительный знак;
  • " " - пробел.

Некоторые комбинации символов имеют специальное значение:

  • <= - меньше или равно;
  • >= - больше или равно;
  • <> - не равно.

Употребление слов русского алфавита ограничено по сравнению с английскими буквами (как правило, буквы русского алфавита употребляются только как элементы символьных констант и в операторах комментария).

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

В языке программирования БЕЙСИК программа состоит из строк операторов. Каждая строка начинается с номера строки. Номер строки- это целое десятичное число в диапазоне от 0 до 65629. За номером строки располагается служебное слово, определяющее характер действия и текст оператора.

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

При составлении программы рекомендуется нумеровать строки с определенным шагом (например: 10, 20, 30 и т.д.). Это позволит при отладке вставлять пропущенные или дополнительные строки.

Программа завершается оператором END . Программа также может выполняться без наличия оператора ЕND.

В одной строке может быть записан один или несколько операторов. При записи в одной строке нескольких операторов их следует разделять двоеточием (:). Однако длина строки не должна превышать 254 знаков.

При вводе программы с клавиатуры терминала каждую строку заканчивают нажатием клавиши ВК (возврат каретки).

При вводе или написании программы возникает необходимость в дополнительных пояснениях к программе, предназначенных для объяснения назначения программы, описания назначения ее переменных данных, описания алгоритма и т.п. Для этих целей используется оператор RЕМ.

Формат оператора:

  • <номер строки> RЕМ <сообщение> где сообщение может содержать любые печатные знаки клавиатуры.

Сообщение, следующее за словом RЕМ, никаких действий интерпретатора не вызывает.

2.3. Стандартные функции

Для вычисления наиболее встречающихся математических функций в БЕЙСИК включены следующие стандартные функции:

  • ABS (X) - модуль
  • 5GN (X) - знак Х (-1 при Х<0; 1 при Х>0; 0 при Х=0)
  • INT (X) - наибольшее целое число, которое меньше или равно Х
  • COS (X) - косинус Х (cos X)
  • SIN (х) - синус X (sin x)
  • TAN (X) - тангенс Х (tg X)
  • ATN (X) - арктангенс Х (arctg X)
  • SQR (X) - корень квадратный от Х (sqrt X)
  • ЕХР (X) - экспонента Х (e^X)
  • LOG (X) - натуральный логарифм (ln X)
  • RND (X) - выборка случайного числа в интервале [0,1) (обращение к генератору случайных чисел).

Аргументом функции может быть любое арифметическое выражение.

Аргументы тригонометрических функций SIN, COS, ТАN должны задаваться в радианах. В функции RND (X) необходимо указать фиктивный аргумент, например X.

3. ЭЛЕМЕНТЫ ДАННЫХ

3.1. Числовые и символьные данные

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

  • 1) числовые данные;
  • 2) символьные данные.

Числовые данные представляются десятичными числами - целыми и действительными.

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

  • 1986 - 36 + 125

Действительные десятичные числа записываются двумя способами:

  • - с использованием десятичной точки (в естественной форме) или с использованием латинской буквы Е (в нормализованной форме), например:
  • 2.5 1E-10
  • -3.75 -36.7Е5
  • 25 +25Е-4
  • +14.6

Диапазон числовых данных 0,94.10^-38...1,7.10^38. Разрядность -6 десятичных цифр.

Символьная константа (строка) - это последовательность символов из набора символов БЕЙСИК ПК~01, заключенных в кавычки. Например:

  • "BASIC" "2+3"
  • "ЛЬВОВ" "АТЫ БАТЫ"

Символьная строка может содержать от 0 до n символов (n<=255). Объем памяти, выделенной под символьные константа (см. раздел 11) можно определить при помощи функции FRE.

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

Числовая переменная обозначается в БЕЙСИКе ПК-01 идентификатором, который состоит из одной или двух латинских букв или латинской буквы и последующей цифры. Например: X, PI, RD, A2.

Переменным присваиваются значения с помощью оператора присваивания LET, операторов INPUT, READ , которые будут описаны далее. Перед выполнением всем переменный присваивается значение 0.

Наряду с числовыми переменными в языке БЕЙСИК ПК-01 используются символьные переменные, которые могут принимать значения символьных констант. Любое имя переменных, за которой следует знак $ (знак денежной единицы), указывает символьную переменную.

  • Пример: A$, А2$, DM$, RG$

Над символьными переменными и (или) константами могут выполняться следующие операции отношения:

  • =, <>, <, <=, >, >=

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

3.2. Переменные с индексами

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

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

Индексная переменная обозначается записью, состоящей из идентификатора массива и следующего за ним в круглых скобках списка индексов. Число индексов не должно превышать два и в списке они разделяются запятой. Индекс в общем случае является арифметическим выражением. В момент использования индекс должен иметь положительное целое значение. Индексы элементов массивов принимают значения целых чисел, начиная с 0, т.е. для одномерного массива элементы нумеруются А(0), А(1), А(2) и т.д.; соответственно элементы двумерного массива - В(0,0), В(0,1), В(0,2), .... В(1,0), В(1,2) и т.д.

Ддя каждого массива в программе должен быть указан его максимальный размер, т.е. максимальные значения, которые могут принимать индексы. Это нужно для того, чтобы интерпретатор мог зарезервировать соответствующий объем памяти. Информацию об идентификаторах массивов и их размерностях указывают в операторе DIM, который имеет следующий формат:

  • <номер строки> DIM V1(M1), V2(M2),... Vn(Mn)
  • где Vi - идентификатор массива;
  • Mi - размерность массивов Vi (одно или два целых числа, разделенных запятыми).
  • Например: 10 DIM А(10), МТ(3,4), S$(6)

Под массив А отводится II элементов, под матрицу МТ - 4х5 = 20 элементов и символьный массив S$ - 7 элементов. Описание массивов должно предшествовать использованию их элементов в других операторах.

Если в программе размерность индексной переменной не указывается с помощью оператора DIM, то по умолчанию принимается размерность 10 в каждом измерении.

Оператор DIM относится к не выполняемым операторам.

Первоначально все элементы описанных массивов имеют нулевые значения. Для изменения значений индексных переменных используют те же операторы БЕЙСИК ПК-01, что и в случае простых переменных: оператор присваивания, READ и INPUT.

4. ВЫРАЖЕНИЯ И ОПЕРАТОР ПРИСВАИВАНИЯ

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

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

  • + - сложение;
  • - - вычитание;
  • * - умножение;
  • / - деление;
  • ^ - возведение в степень.

Если в выражении отсутствуют круглые скобки, определяющие порядок выполнения операций, то они выполняются в следующей последовательности:

  • - вычисление функций;
  • - возведение в степень;
  • - умножение и деление;
  • - сложение и вычитание.

Операции одного ранга выполняются последовательно слева направо (включая и операции возведения в степень).

Над целыми числами могут выполняться логические операции AND , 0R, NОТ. Эти операции выполняются поразрядно над двоичными представлениями целых чисел в дополнительном коде. Результатом логической операции является целое число, состоящее из последовательности битов, образованных в результате применения данной логической операции к битам заданных операндов.

  • Например:
  • 2 OR 3 = 3
  • 2 AND З = 2
  • NOT 3 = -4

Чтобы понять эти результаты, необходимо помнить, что целые десятичные числа в ПК-01 представляются как двоичные числа в дополнительном коде (при этом старший разряд отводится под знак числа).

Если в арифметических выражениях употребляется и арифметические, и логические операции, то при отсутствии скобок логические операции выполняются после арифметических, причем в таком порядке старшинства между собой: NOT, AND, OR. Логические операнды одного ранга выполняются слева направо.

4.2. Символьные функции и выражения

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

  • Например:
  • "ТРАМ" + "ТАРАРАМ" = "ТРАМТАРАРАМ"

В БЕЙСИКе ПК-01 могут использоваться следующие функции над символьными строками LEFT$(<строка> , N) - выделяет из "строки" подстроку с первого до N-го знака. Здесь и далее над аргументом <cтрока> будем понимать символьное выражение, а аргумент N (в других функциях N1, N2) должен быть целым числом или выражением, принимающим целочисленное значение. Если N равно или больше длины отроки, выдается вся строка. Если N=0, выдается пустая строка. Например: функция LEFT$("АВСD", 3) дает результат "АВС". RIGHT$(<cтрока> , N) - выделяет наиболее правые символы "строки". Если N равно или превышает длину строки, выдается вся строка. Если N=0, выдается пустая строка. Например: функция RIGHT$("ABODE",2) дает строку "DЕ".

MID$(<строка>, N1, N2) - проверяет "строку" я возвращает N2 символов, начиная с позиции NI. Если NI больше, чем строка. MID$ возвращает пустую строку. Например: функция MID$("АВСDЕ", 2, 3) дает результат "BCD".

LEN (<строка>) - функция определяет длину строки, то есть возвращает целое число, равное количеству символов в строке.

  • Например: Функция LEN ("ABCDE") дает результат 5.

VAL (<строка>) - функция преобразует цифровую строку в числовое значение. Строка может включать цифры, знаки "+", "-", "." и "Е". Если строка содержит другие знаки, то значение функции равно нулю.

  • Например: VAL ("1E3") дает числовое значение 1000.

STR$ (<выражение>) - действие функции противоположно действию функции VAL: она преобразует числовое значение в цифровую строку.

  • Например: 5TR$(9372) дает строку 9372.

ASC (<строка>) - функция возвращает код КОИ-7 первого символа указанной строки. Функция ASG ("АВСD") дает значение 65.

CHR$ (<выражение>) - функция возвращает символ КОИ-7, код которого равен значению выражения. Выражение должно приводиться к цело му числу между 0 и 255.

  • Например: Функция CHR$(65) дает символ А.

HEX$ (<выражение)>) - функция возвращает строку, значение которой эквивалентно шестнадцатиричному представлению выражения.

  • Например: Функция HEX$(32) дает строку "20".

IHKEY$ - функция (без аргумента), предназначенная для опроса клавиатуры. Функция возвращает пустую строку, если не нажата ни одна клавиша, или строку с символом, соответствующим нажатой клавише.

4.3. Логические выражения

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

Для логических выражений установлен следующий порядок выполнения действий:

1) сначала действует правило скобок;

2) вычисляются значения функций;

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

4) выполняются операции отношения (= - равно, < - меньше, <= - меньше или равно, > - больше, >= - больше или равно, <> - не равно);

5) логические операции в следующем порядке:

  • NOT - логическое отрицание;
  • АND - конъюнкция;
  • ОR - дизъюнкция.

Операция отношения устанавливает определенные отношения между числовыми или символьными величинами. Отношение имеет формат:

<выражение 1 (арифметическое или символьное)> <знак операции отношения> <выражение 2 (арифметическое яли символьное>.

Символьное отношение означает последовательное попарное сравнение слева направо символов строк операндов в соответствии с упорядоченностью символов кода КОИ-7.

Результат выполнения операций отношения есть "истина" если выражения удовлетворяют отношению, и "'ложь" - и противном случае.

4.4. Оператор присваивания

Оператор присваивания имеет формат:

  • < номер строки> LET <переменная> = <выражение>

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

  • 10 LET A = 6.3
  • 20 LET В = В+2
  • 30 LЕТ A$= "BASIC"

В операторе присваивания могут употребляться переменные число-вого и символьного типа, простые и с индексами. Необходимо, чтобы тип переменной совпадал с типом выражения (т.е. числовая переменная и арифметическое выражение, символьная переменная и символьное выражение).

БЕЙСИК ПК-01 позволяет опускать слово LET в операторе. Например:

  • 10 А = 6.3
  • 20 В = В+2
  • 30 A$ = "BASIC"

5. ОПЕРАТОРЫ УПРАВЛЕНИЯ

5.1. Операторы перехода и оператор STOP

В программе на языке БЕЙСИК ПК-01 операторы выполняются в порядке возрастания номеров строк. Изменение порядка выполнения операторе производятся с помощью операторов управления. К этой группе операторов относятся оператора перехода, оператор STOP, условные операторы и оператор цикла.

В языке БЕЙСИК ПК-01 существует два вида операторов перехода: оператор безусловного перехода GOTO и оператор перехода по вычислению ON - GOTO.

Оператор безусловного перехода GOTO используется в том случае, когда в программе требуется осуществить безусловный переход к какой-либо другой строке с нарушением естественного порядка выполне-ния операторов программы, задаваемого номерами строк. Формат оператора GОТO:

  • <номер строки> GOTO <номер строки 1>

где <номер строки> - это номер строки, к которой осуществляется переход. Номер строки, к которой осуществ-ляется переход в программе, может быть либо больше, либо меньше текущего номера строки.

Оператор ОN - GОТО позволяет осуществить переход к одной из нескольких указанных строк в зависимости от того, какое значение имеет выражение во время выполнения оператора. Этот оператор имеет следующий формат:

  • <номер строки> ОN <ариф. выражение> GOTO <список номеров строк>

Во время выполнения оператора вычисляется выражение и целая часть его используется в качестве указателя перехода на один из пе-речисленных номеров строк.

  • Например, оператор
  • 50 ON P GOTO 100, 140, 180
  • передает управление строке 100, если Р=1, строке 140, если Р=2, или строке 180, если Р=3.

Любые другие значения Р (не выходящие за пределы 0-255) приводят к передаче управления на следующий оператор.

Оператор 5ТОР вызывает прекращение вычислений по программе (останов программы) и выдачу об атом сообщения на терминал. Формат оператора STOP:

  • <номер строки> SТОР

5.2. Условные операторы

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

  • THEN <номер строки l> <номер строки>
  • IF <условие> THEN <оператор>
  • GOTO <номер строки l>

Условие представляет собой логическое выражение. В случае выполнения условия, т.е., когда оно принимает истинное значение, то управление передается на оператор с номером строки I (варианты "ТНЕN <номер строки 1>" и "GOTO <(номер строки l)>") или выполняется оператор, записанный после THEN (вариант "THEN <(оператор)>"); в случае невыполнения условия управление передается оператору с последующим номером строки.

Поскольку любой оператор может следовать за словом THEN, то возможно вложение условных операторов до любого требуемого уровня. Например:

  • 20 IF Х>Y THEN IF Y>Z THEN PRINT "X>Y>Z"

Этот оператор эквивалентен следующему:

  • 20 IF Х>Y AND Y>Z THEH PRINT "X>Y>Z"

6. ОПЕРАТОР ЦИКЛА FOR-NEXT

Циклические прогрммы (участки программ) можно записывать, используя операторы IF и GOТО. Но для упрощения процедуры составления циклов и с целью их четкого выделения в программе могут быть использованы специальные операторы FOR и NEXT. Оператор FOR, называемый заголовком цикла, всегда предшествует повторяющейся группе операторов, составляющих так называемое тело цикла. Формат оператора FOR:

  • <номер строка). FOR <имя переменной> = <выражение 1> ТО <выражение 2> [5ТЕР <выражение 3>]

Имя переменной в операторе FOR называют управляющей переменной или параметром цикла, а <выражение 1>, <выражение 2> и <выражение 3> представляют собой начальное значение параметра цикла, конечное значение параметра цикла и шаг изменения параметра цикла соответственно. Если " STEP <выражение 3)> " опущено, то ваг изменения параметра цикла полагается равным 1.

Во время выполнения оператора FOR вычисляются параметры цикла (начальное и конечное значения управляющей переменной, величина шага изменения) и присваивается начальное значение управляющей переменной. Тело цикла начинается вслед за оператором FOR и завершается оператором NEXT, который имеет следующий формат:

  • <номер строки> NEXT [имя переменной]

Здесь [имя переменной] соответствует управляющей переменной в заголовке цикла. При выполнении оператора next производится изменение значения управляющей переменной на величину шага и производится анализ на конец цикла. Цикл повторяется до тех пор, пока значение управляющей переменной не станет строго больше (при положительном ваге изменения) или строго меньше (при отрицательное шаге изменения) конечного значения. Можно выйти из цикла и в том случае, если параметр цикла не достигает конечного значения. Для этого используют операторы условного к безусловного перехода.

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

Операторы FOR и NEXT не могут выполняться в операторе IF.

7. ФУНКЦИИ

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

Описать функцию можно с помощью определяющего оператора DEF, формат которого следующий:

  • <номер строки> DEF FN a (<аргумент>) = <выражение>

где FN a - имя функции, состоящее из обязательных букв FN и имени произвольной переменной.

  • Пример:
  • 10 DEF FN A(X) =SIN(X)^2 -COS(X)^2

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

  • 30 DEF FN А(Х) = (Х-А)*В + TAN(C/X)

Если в программе введено описание функции, то можно обращаться к нему, т.е. употреблять обозначение этой функции (иначе - указатель функции) в различных операторах, выражениях и т.п. В указателе функции все формальные параметры должны быть заменены на фактические, например, в программе:

  • 10 DEF FNA(Х) = Х^2 + SIN(Х)
  • 20 А = FNA(2.5) + 2*FNA(3)

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

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

8. ПОДПРОГРАММЫ

8.1. Операторы GOSUB и RETURN

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

Для перехода к подпрограмме используется оператор, имеющий следующий формат:

  • <номер строки> GOSUB <номер строки подпрограммы>

где <номер строки подпрограммы> - номер строки подпрограммы, содержащий оператор подпрограммы, с которого начинается ее выполнение (точка входа). При выполнении оператора GOSUB управление передается в точку входа в подпрограмму.

Первая строка подпрограммы может начинаться оператором комментария (оператором REM) или любым выполняемым оператором.

Подпрограмма обрабатывается интерпретатором до тех пор, пока не встретится оператор RETURN, формат которого следующий: <номер строки> RETURN

Оператор RETURNобуславливает возврат управления на оператор, следующий за оператором GOSUB.

БЕЙСИК ПК-01 допускает использование в одной программе нескольких подпрограмм. Подпрограммы могут быть вложенными, то есть одна подпрограмма может осуществить вызов другой подпрограммы. Если при выполнении подпрограммы встречается оператор RETURN, то он вызывает передачу управления тому оператору, который следует после операторе GOSUB, произведшего обращение к этой подпрограмме (в точку возврата).

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

8.2. Оператор ON - GOSUB

Оператор ON - GOSUB используется (аналогично оператору ON - GOTO) для условной передачи управления одной из нескольких подпрограмм или к одной из нескольких входных точек одной (или нескольких) подпрограмм. Формат оператора:

  • <номер строки> ON <арифметическое выражение> GOSUB <список номеров строк подпрограммы>

Во время выполнения оператора ON - GOSUB вычисляется значение арифметического выражения и целая часть этого значения (n) используется в качестве указателя на один из перечисленных номеров строк в списке. В результате происходит передача управления подпрограмме, которая начинается номером строки, находящимся в списке на n-ом месте. Оператор RETURN возвращает управление оператору, следующему за оператором ON - GOSUB.

9. СРЕДСТВА МАШИННОЙ ГРАФИКИ И УПРАВЛЕНИЯ ЗВУКОМ

9.1. Формирование изображения на экране терминала

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

После очистки экрана это поле окрашено в цвет фона. Элементы изображения выводятся одним из трех цветов переднего плана из палитры 8 цветов.

Очистка экрана, т.е. закрашивание всех пикселов поля изображения в цвет фона, осуществляется оператором CLS. Его формат:

  • <номер строки> CLS

Задание конкретного цвета переднего плана, цвета фона и необходимой палитры цветов осуществляется оператором COLOR. Формат этого оператора:

  • <номер строки> COLOR [<цвет>] [,<фон>] [,<палитра>]

где <цвет> - номер цвета переднего плана. Параметр должен принимать значения от 0 до 3. Значение 0 задает цвет фона., Этот параметр задает цвет, которым будет выводиться текстовая информация, а также графическая информация, если в графических операторах цвет переднего плана не был установлен;

<фон> - номер цвета фона. Параметр должен принимать значения в диапазоне от 0 до 7;

<палитра> - номер палитры. Параметр должен принимать значения в диапазоне от 0 до 6.

Параметры <цвет>, <фон> и <палитра> кодируются в соответствии с таблицей 1.

Таблица 1

ФОН Номер палитры Номер цвета переднего плана
Номер фона 0 1 2 3 4 5 6
ЧЕР ЧЕР ЧЕР ЧЕР ЧЕР ЧЕР ЧЕР ЧЕР 0
0 ЗЕЛ ЗЕЛ ЗЕЛ ЗЕЛ ГОЛ ГОЛ БЕЛ 1
СИН СИР СИН СИР КР КР КР 2
КР КР ЖЕЛ ЖЕЛ СИР БЕЛ СИН 3
КР КР КР КР КР КР КР КР 0
1 ЗЕЛ ЗЕЛ ЖЕЛ ЖЕЛ ГОЛ ГОЛ БЕЛ 1
СИН СИР СИР СИН ЧЕР ЧЕР ЧЕР 2
ЖЕЛ ЖЕЛ ЧЕР ЧЕР СИР БЕЛ СИН 3
СИН СИН СИН СИН СИН СИН СИН СИН 0
2 ЗЕЛ ЗЕЛ ЖЕЛ ГОЛ ГОЛ ГОЛ ГОЛ 1
СИР СИР СИР ЧЕР КР ЧЕР КР 2
КР ЖЕЛ ЧЕР СИР СИР БЕЛ БЕЛ 3
СИР СИР СИР СИР СИР СИР СИР СИР 0
3 ЗЕЛ ЗЕЛ ЖЕЛ ГОЛ ГОЛ БЕЛ БЕЛ 1
СИН СИН СИН ЧЕР КР КР ЧЕР 2
КР ЖЕЛ ЧЕР БЕЛ БЕЛ СИН СИН 3
БЕЛ БЕЛ БЕЛ БЕЛ БЕЛ БЕЛ БЕЛ БЕЛ 0
4 СИР СИР СИН СИН КР КР ЧЕР 1
ЖЕЛ ЗЕЛ ЗЕЛ ЖЕЛ ГОЛ ГОЛ ГОЛ 2
ГОЛ ГОЛ СИР СИР ЖЕЛ ЧЕР ЖЕЛ 3
ГОЛ ГОЛ ГОЛ ГОЛ ГОЛ ГОЛ ГОЛ ГОЛ 0
5 СИР СИР СИН СИН КР КР ЧЕР 1
ЖЕЛ ЗЕЛ ЗЕЛ ЖЕЛ БЕЛ БЕЛ БЕЛ 2
СИН СИН БЕЛ БЕЛ ЖЕЛ ЧЕР ЖЕЛ 3
ЗЕЛ ЗЕЛ ЗЕЛ ЗЕЛ ЗЕЛ ЗЕЛ ЗЕЛ ЗЕЛ 0
6 СИР СИР СИН КР КР КР КР 1
ЖЕЛ ЖЕЛ ЖЕЛ БЕЛ ГОЛ БЕЛ ГОЛ 2
ГОЛ СИН БЕЛ ЖЕЛ ЖЕЛ ЧЕР ЧЕР 3
ЖЕЛ ЖЕЛ ЖЕЛ ЖЕЛ ЖЕЛ ЖЕЛ ЗЕЛ ЗЕЛ 0
7 СИР СИР СИН КР КР ЧЕР ЧЕР 1
ЗЕЛ ЗЕЛ ЗЕЛ БЕЛ ГОЛ ГОЛ БЕЛ 2
ГОЛ СИН БЕЛ ЧЕР ЧЕР ЖЕЛ ЖЕЛ 3

Примечания:

1. Ддя фона номер 7 и палитр 5 и 6 фок будет зеленого цвета.

2. В таблице применяются такие сокращения:

  • чер - черный
  • бел - белый
  • кр - красный
  • гол - голубой
  • син - синий
  • зел - зеленый
  • сир - сиреневый
  • жел - желтый

Все параметры долхны быть выражениями числового типа, если значение выражения нецелое, то используется только целая часть зна-чения. Неуказанные параметры по умолчанию принимают ранее заданные значения. Если значения параметров выходят за указанные пределы, то

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

Цвет окантовкиэкрана соответствует второму номеруцвета переднего плана. Примеры:

10 COLOR 1,0,0 ~ устанавливаетзеленый цвет переднего плана для выводатекстовойи графической информация на чертомфоне (цвет окантовки синий).

50 COLOR 3,2,4 - задает сиреневыйцветпереднего плана на синем фоне (цветокантовки ~ красный).

95 CCOLOR ,1 ~ меняеттолько номер цвета фона; номер цвета переднего плана к номер палитры остаются режними.

9.2. Графические операторы

Графические операторы языка БЕЙСИК-2.0 ПК-01 включают операторы: PSET, PRESET, LINE. При выводе изображений при помощи этих операторов адреса пикселов задаются координатами Х и У. Пиксел, находящийся в левом верхнем углу поля изображения, имеет координата (0, 0), в левом нижнем углу координата. (0, 221), в правом верхнее углу - координата (199, 0) и т.д.

Оператор Р5ЕТ позволяет вывести точку определенного цвета в заданную точку экрана. Формат оператора:

  • <номер строки> PSET (<X - коорд>, <Y - коорд.>) [,<'цвет>]

где <X - коорд> и <Y - коорд.> ~ соответственно координата X и координата Y выводимой точки

<цвет> - номер цета переднего плана, который в совокупности с ранее определенными номером фона и номером палитры определяет цвет выводимой точки.

Все параметры - это выражения числового типа. Если параметр <цвет> опущен, то принимается значение заданное оператором COLOR или заданное в одной из графических операторов, выполненных раньше.

  • Примеры:
  • 100 PSET (50, 100), 1 250 PSET (X,Y+1)

Оператор PRESETзакрашивает заданную точку экрана в цвет фона, т.е. стирает точку. Формат оператора:

  • <номер строки> PRESET (<Х - коорд> , <Y - коорд>)

Назначение и формат параметров <Х - коорд> , <Y - коорд> такой-же как и у оператора PSET.

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

  • <номер строки> LINE [(<Х - нач> , <Y - нач>)] - (<X - кон> , <Y - кон>) [, <цвет>] [ ,B[F] ] ]

где <Х - нач>, <Y - нач> - соответственно координата Х и координата Y начала отрезка;

<Х ~ кон>, <Y ~ кон> - соответственно координата Х и координата Y конца отрезка;

<цвет> - номер цвета переднего плана, которым чертится линия.

Необязательный параметр Вуказывает, что на экран выводится не отрезок прямой линии, а прямоугольник,стороны которого параллельны сторонам окантовки экрана, акоординаты крайних точек любых из диагоналей равны <Х -- нач>, <У - нач> и <Х - кон>, <У - кон>.

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

Формат параметров <Х - нач>, <Y - нач>, <X ~ кон>, <Y - кон> и цвет такой-же как и в операторе PSET.

Если параметр (<X - нач>, <У - нач>) опущен, то в качестве координат начальной точки берутся координаты последней, выведенной предыдущими графическими операторами, точки.

  • Пример:
  • 100 LINE (10, 10) -(30, 30),3
  • 110 LINE - (10, 30)
  • 200 LINE (50, 10) -(70, 20),, В
  • 210 LINE (XI, Y1) -(X2, Y2), 2, ВГ

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

  • Формат функции:
  • POINT (<Х - коорд> , <Y - коорд>)

Здесь параметры <Х - коорд> и <Y - коорд>- имеют тоже назначение и формат, что и в операторах описанных выше.

Для обеспечения преемственности с ранее написанными программами, в интерпретатор БЕЙСИК 2.0 ПК-01 включены также операторы PLOT и DRAW предыдущей версии интерпретатора. Для этих операторов точка начала координат расположена в левом нижнем углу и расположение осей координат соответствует первому квадранту декартовой системы координат.

Оператор PLOT позволяет вывести точку определенного цвета в заданную точку экрана.

  • Формат оператора:
  • <номер строки> PLOT <X - коорд>, <У - коорд>, <цвет>

Назначение и формат параметров оператора PLOT такой же, как к у оператора Р5ЕТ.

Оператор DRAW позволяет вывести на экран отрезок прямой линии, который соединяет последний выведенньй предыдущим оператором РLОТ или DRAW пиксел и точку с коордкнатами Х и Y, заданными в данном операторе. Цвет пикселов этого отрезка такойже, как к у пиксела, являющегося началом отрезка.

  • Форматоператора:
  • <номер строки> DRAW <X - коорд>, <Y - коорд>

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

9.3. Средства управления звуком

Средства воспроизведения звука включают операторы ВЕЕР и SOUND.

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

  • Формат оператора:
  • <номер отроки> ВЕЕР

Оператор SOUND позволяет воспроизвести при помощи динамика (капсуля) несложную мелодию.

  • Формат оператора для воспроизводства отдельного звука:
  • <номер строки> SOUND <код частоты>, <код длительности>
  • Формат дляпоследовательности звуков:
  • <номер строки> SOUND <код частоты>, <код длительности> ;
  • ... ; <код частоты> , <код длительности>

где <код частоты> и <код длительности> - числовые выражения. Коды частоты для нот гармонического звукоряда приведены в таблице 2.

Длительность одной единицы значения параметра <код длительности > равна приблизительно 7 мс. Если код частоты равен 0, то задается пауза.

Пример: В ниже приведенных операторах закодированы первые два такта мелодии популярной детской песни "Пусть всегда будет солнце".

  • 10 SOUND 69, 80; 66, 42; 69, 40; 52, 160
  • 20 SOUND 46, 80; 43, 40; 46, 40; 69, 160

Таблица 2

Ноты Малая октава Первая октава Вторая октава Третья октава
ДО 156 78 38 19
ДО # 147 73 36 18
РЕ 139 69 34 17
РЕ # 131 66 32 16
МИ 123 61 30 15
ФА 116 58 29 14
ФА # 110 55 27 13
СОЛЬ 104 52 26 12
СОЛЬ # 98 49 25
ЛЯ 92 46 23
ЛЯ # 87 43 21
СИ 83 41 20

10. СРЕДСТВА РАБОТЫ НА УРОВНЕ МАШИННЫХ КОМАНД

Ддя квалифицированных пользователей, знакомых с программирова-нием в кодах микропроцессора К580ИК80, в состав интерпретатора вклю-чены средства, позволяющие из БЕЙСИК - программы вызывать подпрограм-мы, составленные в кодах машины и читать, и записывать информацию в конкретные ячейки памяти. К этим средствам относятся операторы POKE, УРОКЕ, OUT, WAIT и функции PEEK. VPEEK, INP, USR и VARPTR.

Оператор POKE помещает указанное значение в указанную ячейку памяти.

  • Формат оператора:
  • <номер строки> POKE <адрес памяти>, <значение>

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

<значение> - арифметическое выражение в диапазоне от 0 до

255, целая часть которого записывается в указанную ячейку. Например:

  • 10 POKE 12247,35

Функция PEEK читает 1 байт из указанной ячейки памяти. Формат функции:

  • PEEK (<адрес памяти>)

где <адрес памяти> - это арифметическое выражение, целая часть ко-торого определяет адрес ячейки памяти, из которой производится чтение информации. Например:

  • 20 PRINT PEEK (12247)

Функция USR вызывает подпрограмму, написанную в кодах машины. Адрес точки входа в программу в кодах машины должен быть перед использованием функции USR помещен в фиксированные ячейки памяти. В ячейку с адресом 73 помещается младший байт адреса подпрограммы, в ячейку с адресом 74 - старший байт. Если выполнение подпрограммы в кодах машины завершается командой возврат (RЕТ, RZ и т.п.), то происходит возврат в интерпретатор и возобновится выполнение БЕЙСИК-программы.

  • Формат функции USR:
  • USR (фиктивный аргумент)

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

Функция USR возвращает значение 0. Например:

Пусть необходимо выполнить подпрограмму в кодах машины, размещенную в памяти, начиная с адреса 12288. Число 12288 в шестнадцатиричной системе счисления представляется как 3000. Старший байт адреса равен 30 (48 в десятиричной), младший байт-00. Вызов этой подпрограммы можно осуществить при помощи следующих операторов:

  • 10 POKE 73,00
  • 20 POKE 74,48
  • 30 X = U5R (X)

Оператор VРОКЕ помещает указанное значение в указанную ячейку видеопамяти.

  • Формат оператора:
  • <номер строки> VPOKE <адрес>, <значение>

где <адрес> - это арифметическое выражение, целая часть которого определяет адрес ячейки видеопамяти, в которую производится запись. Значение адреса должно находиться в пределах от 0 до 16383;

<значение> - арифметическое выражение в диапазоне от 0 до 255, целая часть которого записывается в указанную ячейку и кодирует цвет 4-х рядом расположенных пикселов экрана.

Функция VPEEK читает один байт из указанной ячейки ввидеопамяти.

  • Формат функции:
  • VPEEK (<адрес>)

Параметр <адрес> задается так-же, как я в операторе VРОКЕ.

Функция VARPTR возвращает адрес памяти, по которому хранится значение указанной переменной.

  • Формат функции:
  • VARPTR (<переменная>)

где <переменная> - идентификаторпеременной.

Оператор OUT позволяет вывести байт данных на заданный порт вывода.

  • Формат оператора:
  • <номер строки> OUT <порт> , <данные>

где <порт> - это адрес порта вывода, на которые выводятся данные. Параметры <порт> и <данные> - это выражение, которое должно нахдиться в пределах от 192 до 255.

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

  • Формат оператора:
  • <номер строки> WAIT <порт>, <маска AND>, [<маска XOR>]

где <порт> - см.оператор OUT;

<маска АND> и <маска XOR> - выражения> значения которых должно находиться в пределах от 0 до 255. Этот оператор вводит байт данных из указанного порта ввода. С введенными данными и параметром <маска AND> выполняется поразрядная операция "И", а с полученным результатом и параметром <маска ХОR> поразрядная операция "исключающее ИЛИ" Процесс ввода и обработки байта данных повторяется до тех пор, пока полученное значение не станет нулевым.

Функция INP позволяет вводить данные с заданного порта ввода.

  • Формат Функции:
  • INP (<порт>)

где <порт>см. оператор OUT.

11. РАБОТА В РЕЖИМЕ НЕПОСРЕДСТВЕННОГО ИСПОЛНЕНИЯ

11.1. Режим калькулятора

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

  • Пример: Ввод с терминала строки PRINT 2.5 * LOG(3.5) вызовет вывод на экран числа 3.13191

Вместо служебного слова PRINT разрешается использовать вопросительный знак (?). В режиме непосредственного исполнения можно также использовать ряд других операторов (LET, POKE, PLОТ, DRAW и др.). Например, при непосредственном выполнении операторов

  • Х = 25
  • Y = SQR (X)
  • PRINT Y

будет напечатано:

  • 5

Логически не имеет смысла непосредственное исполнение операторов DEF, DIM, DАТА, RESTORE, FOR, NEXT, END, REM, RETURN, STOP; недопустимо использование в режиме непосредственного использования операторов DEF, INPUT, DATA.

11.2. Использование режима непосредственного исполнения при отладке программ

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

Для продолжения выполнения программы следует ввести директиву CONT (см. раздел 13).

Во время отладки, используя функцию FRE, можно определить объём свободной памяти, не занятой программой или объём свободной памяти, отведенной под размещение строковых данных. Формат функции:

  • FRE (<фиктивный аргумент>)

Если задан фиктивный аргумент числового типа, то выдаётся оставшееся количество байт памяти, отводящейся под программу, а если строкового, то под размещение строк.

  • Пример:
  • PRINT FRE (X)

12. ОПЕРАТОРЫ ВВОДА - ВЫВОДА

12.1. Операторы READ, DАТА и RESTORE

Для ввода данных в программу используются операторы READ и DАТА. Оператор DATA содержит значения, которые присваиваются переменным, записанным в операторе READ.

  • Формат оператора DАТА:
  • <номер строки> DАТА <список значений>

Список значений может включать в себя числовые и символьные данные. Элементы данных в списке должны разделяться запятыми. Пример:

  • 10 DАТА 1, -2. 63, 1.5E-6
  • 20 DАТА ABCDE, 3.5, -26

Элементы символьных данных необходимо заключить в кавычки тогда, когда символьная строка включает запятую или пробел. Пример:

  • 10 DАТА "АAB, CD "

В одной программе может быть один или несколько операторов ДАТА. Списки всех операторов рассматриваются как один блок данных. За время выполнения программы информация из блока данных извлекается для присвоения значения переменным с помощью оператора READ. Оператор READ имеет следующий формат:

  • <номер строки> READ <список переменных>.

Список переменных представляет собой перечень имен переменных (числовых и символьных, простых и с индексом), имена переменных в списке разделяются запятыми. Пример:

  • 30 READ M, А, К, ВК, S$, А2

Если при выполнении программы встречается оператор READ, то первой переменной списка оператора READ присваивается первое значение из блока данных, второй переменной - второе значение и т.д.

При этом интерпретатор запоминает последнее значение, присвоен-ное переменкой из списка операторе READ . Поэтому, когда в программе встречается ещё один оператор READ , то переменной присваивается следующее имеющеесязначение из блока данных.

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

Еоли одни и те же данные необходимо использовать несколькораз, то используется оператор RESTORE (восстановить). Оператор RESTORE в программе должен размещаться перед каждым следующем считываниемданных. Формат оператора EESTORE:

  • <номер строки> RESTORE <номвр строки> RESTORE <номер строки 1>

После его выполнения выборка значений операторами READ начнётся повторно с самого первого значения элемента блока данных, в случае первого формата оператора KESTOEE, или со значения элемента блока данных, помещенного в операторе DATA с <номером строки>, во втором случае. Оператор RESTORE можно употреблять в любой момент рабочей программы, не дожидаясь полного исчерпания блока данных.

12.2. Оператор INPUT

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

  • <номер строки> INPUT <список>

Список включает в себя имена переменных (численных и символьных). Выполняя оператор INPUT, компьютер делает паузу во время выполнения программы, печатает на терминале знак вопроса "?". Пользователь должен набрать на клавиатуре значения переменных, разделяя их запятыми. Количество и тип значений должны соответствовать количеству и типу переменных в списке. Для ввода набранных значений следует нажать клавишу ВК. Если вводимые символьные данные содержат запятую, то их нужно заключить в кавычки.

Выдача на терминал вопросительного знака (?), при наличии в программе нескольких операторов INPUT, не даёт возможности определить, значения каких именно переменных должен ввести пользователь. Для устранения этого недостатка используют оператор INPUT следующего формата:

  • <номер строки> INPUT " <сообщение> "; <список>

где <сообщение> - произвольная последовательность печатных символов.

  • Пример:
  • 10 INPUT "МАССА" ; М

При выполнении этого оператора на терминал выводится

  • МАССА ?

Пользователь должен набрать значение переменной М и нажать клавишу ВК.

12.3. Оператор PRINT

Вывод на терминал результатов вычислений и пояснительных текстов осуществляется с помощью оператора PRINT. Формат оператора:

  • <номер строки> PRINT [<список>]

Элементами списка могут быть числа, переменные, выражения и символьные строки. Оператор РRINТ без списка используется для перевода строки.

Дkина строки терминала ПК-01 составляет 32 позиции. Эта строка разбита на 2 зоны по 16 позиций. При выводе на печатающее устройство печатная строка разбивается на соответствующее число зон по 16 позиций (5 зон при длине 80 позиций, 8 зон при длине 128 позиций и т.п. Если за элементом из списка оператора PRINT следует запятая (,), то значение следующего элемента списка будет напечатано в первой свободной зоне данной или следующей строки.

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

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

12.4. Дополнительные возможности оператора PRINT

Дополнительные удобстве для размещения выводимой информвцим могут быть получены при использовании в операторе PRINT фуякции ТАВ(Х) и SPC(X). Функция ТАВ(Х) вызывает перемещение курсора (указывающего позицию вывода очередных данных) к позиции с номером X. Позиции в строке нумеруются, начиная с 0. Формат функции TAB:

  • TAB (<выражение>)
  • Пример:
  • 10 PRINT TAB(5); X; TAB(25); У

Функция SРС(X) возвращает строку пробелов длиной INT(X), которая "вставляется" в выводимую строку. Формат функции SPC:

  • SPC (<выражение>)
  • Пример:
  • 10 PRINT TAB(5); X; SPC(11); Y

Иногда при выводе некоторых результатов на печать возникает необходимость в уточнении положения курсора в внводимой строке. Для этого можно воспользоваться функцией POS(X), где Х-фиктивный аргумент. Эта функция возвращает позицию курсора после последнего оператора PRINT. Пример:

  • 10 PRINT "####";

15 P=POS (0)

Переменная Р примет значение, равное 4.

Номер строки, в которой находится курсор, можно определить при помощи функции CSRLIN. Эта функция не имеет аргумента и возвращает значение текущей строки курсора в пределах от 0 до 23 (0 - для верхней строки, 23 - для нижней строки экрана).

12.5. Управление курсором

Для позиционирования выводимого на экран терминала текста в БЕЙСИКе 2.0 ПК-01 используется оператор LOCATE, позволяющий переместить курсор в определенное место экрана. Формат оператора LOCATE

  • <номер строки> LOCАТЕ [<номер столбца>], [<номер строки>] [, <видимость>]

где <номер столбца> - указывает номер позиции в строке, в которую помещается курсор; может принимать значение от 0 до 31;

<номер строки> - указывает номер строки, в которую помещается курсор, может принимать значение от 0 до 23;

<видимость> - указывает режим вывода курсора; значение 1 указывает, что курсор выводится, 0 - не выводится.

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

13. СРЕДСТВА ПОДГОТОВКИ И ОТЛАДКИ ПРОГРАММ

13.1. Директивы интерпретатора и средства отладки программы

Директивы интерпретатора предназначены для управления его работой. При вводе директивы, в отличие от оператора, номер строки не ставится. Все директивы выполняются немедленно.

Директива NEW используется перед вводом новой программы. Если в памяти находится старая программа, то она стирается. При выполнении директивы NEW инициализируется ряд системных переменных интерпретатора.

  • формат директивы NEW .
  • NEW

Директива LIST предназначена для получения на экране терминала текста всей дли части программы, находящейся, в оперативной памяти.

  • Формат директивы:
  • LIST [n1] [-n2]

где n1 - номер строки с меньшим номером;

n2 - номер строки с большим номером.

При вводе директивы LIST без параметров, выдается листинг всей программы; с параметром n1 - текст от оператора с номером nl до конца программы; а в случае указания nl и n2 - текст программы от оператора с номером строки nl до оператора с номером строки n2.

При выдаче на экран листинга программы возможен приостанов eго выдачи, для этого необходимо нажать функциональную клавишу <F5/AS>. Повторное начатие на клавишу <F5/AS> вызывает выдачу следующей строки программы.

После этого возможно либо продолжение выдачи листинга в автоматическом режиме (путем наития на клавишу "пробел"), либо прекращение выдачи листинга и выход в режим диалога (путем нажатия фупкциональной клавиши <F0> - клавиши в верхнем ряду).

Директива RUN предназначена для запуска программы на выполнение.

  • Формат директивы:
  • RUN [n]

где n - номер строки оператора, с которого начинается интерпретация программы. При отсутствии параметра n интерпретация начинается с оператора с наименьшим номером строки.

После запуска программы на выполнение возможна ее приостановка, путем нажатия на клавишу <F5/AS>. Повторное нажатие на клавишу <F5/AS> вызывает выполнение очередного оператора бейсик - программы, т.е. пошаговое ее выполнение. Возобновление выполнения программы осуществляется путем нажатия на клавишу "пробел". После приостановки программы возможно также прекращение ее выполнения и выход в режим диалога. Такой останов осуществляется путем нажатия на функциональную клавишу F0 (в верхнем ряду клавши).

Директива CONT предназначена для возобновления программы, остановленной при выполнении оператора STOP, оператора END или при нажатии на функциональную клавишу F0. Выполнение программы возобновляется с оператора, следущего за оператором, в котором произошел останов.

  • Формат директивы:
  • CONT

Директива CLEAR предназначена для очистки всех переменных и массивов в БЕЙСИК-программе и для изменения размеров памяти, предназначенной для хранения строковых переменных.

  • Формат директивы:
  • CLEAR[N]

где n - целое число, определяющее количество байт памяти, отводимое под переменные символьного типа (строковые переменные).

Для записи информации на магнитную ленту в интерпретаторе БЕЙСИК 2.0 ПК-01 используются директивы CSAVE, BSAVE, SAVE, а для ввода информации с магнитной ленты-директивы CLOAD, BLOAD, LOAD, MERGE. Способ записи информации, использующийся указанными директивами, совместим со способом записи применяющимися в персональных компьютерах серии MSX.

Директива CSAVE позволяет сохранить на магнитной ленте БЕЙСИК -программу во внутреннем представлении.

  • Формат директивы:
  • CSAVE "<имя файла>"

где <имя файkа> - это последовательность от одного до шести символов. Не рекомендуется в качестве имени файла использовать все пробелы (см. директиву CLOAD).

Директива CLOAD дает возможность загрузить с ленты в память ЭВМ программу, записанную при помощи директивы CSAVE.

  • Формат директивы:
  • CLOAD ["<имя файла>"]

Параметр <имя файла> записывается так-же, как и в директиве CSAVE.

Если <имя файла> в директиве присутствует, то поиск на ленте будет вестись до тех пор, пока не будет обнаружен файл с указанным именем. Если же параметр в директиве CLOAD отсутствует, или заданы только кавычки, или в качестве имени файла используются пробелы, то будет прочитан первый по порядку файл, записанный с помощью директивы CSAVE. Прекратить поиск файла можно путем нажатия на клавишу "стрелка вниз". Сказанное выше относится и к поиску файлов в директивах BLOAD, LOAD и MERGE за исключением того, что ведется поиск BSAVE -файлов или SAVE -файлов.

По директиве SAVE текст БЕЙСИК-программы записывается на магнитную ленту во внешнем представлении (в коде КОИ-7). Запись ведется блоками по 256 байт. Такую программу можно ввести и выполнить (если совпадут форматы операторов и функций) на других компьютерах, использующих формат записи MSX ("Корвет", "Ямаха" и др.). Формат директивы:

  • SAVE "<имя файла>"

Правила записи параметра <имя файла> такие же, как и в директиве CSAVE.

Директива LOAD предписывает загрузить в память программу,записанную директивой SAVE. Формат директивы:

  • LOAD [" [<имя файла>]"]

Директива MERGE дает возможность объединять две программы: программу в памяти с программой, вводимой с магнитной ленты; вторая должна быть записана на ленту директивой SAVE. Если в программе, находящейся в памяти, и в программе, вводимой с магнитной ленты, будут встречаться операторы с одинаковыми номерами строки, то они будут замещаться теми операторами, что вводятся с ленты. Формат директивы:

  • MERGE [" [<имя файла>] "]

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

  • Формат директивы:
  • BSAVE "<имя файла> ", <нач.адрес>, <кон.адре> [, <адрес. запуска>]

где <имя файла> ~ см.директиву CSAVE;

<нач. адрес> и <кон.адрес>- это адреса соответственно начала и конца области памяти, котораявыводится на ленту;

<адр.запуска> - точка входа в программу в машинном коде. Если этот параметр опущен, то точка запуска устанавливается равной параметру <нач. адрес>.

Параметры <нач.адрес> , <кон.адрес> и <адр. запуска> должны быть числовыми выражениями.

Директива BLOAD предназначена для загрузки в память информации записанной директивой BSAVE.

  • Формат директивы:
  • BLOAD " [<имя файла>]" [, R ] [,<смещение>]

где <имя файла> - см директиву CLOAD;

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

<смещение> - необязательный параметр, который позволяет загрузить данные в область памяти, отличающуюся от той,из которой они записывались на ленту. Значение параметра <смещение> прибавляется (по модулю 2^16) к адресам начала и конца области данных, которые были заданы в директиве BSAVE и сохранены на ленте вместе с данными.

Директивы BSAVE и BLOAD, так-же, как и директива RUN , могут использоваться в качестве операторов.

Длязагрузки с ленты БЕЙСИК - программы, созданной в предыдущей версии интерпретатора предусмотрена директива SLOA.D. Ее формат:

  • SLOAD

13.2. Диагностические сообщения интерпретатора

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

Таблица 3

Код ошибки Значение Пояснение
NF NEXT без FOR Программа не содержит соответствующего FOR для NEXT.
SN Синтаксис Неправильное использование ограничителей, символов и т.д.
RG RETURN без GOSUB Оператор RETURN встретился прежде, чем был использован оператор GOSUB.
OD Выход за пределы DATA В программе исчерпаны все элементы списка DАТА, а оператор READ пытается еще прочитать данные.
FC Недопустимый вызов Параметры, передаваемые функции, несоответствуют их пределам. Возможные причины: 1. Отрицательный индекс в элементе массива. 2. А^В, где А - отрицательное, а В не является целым. 3. Недопустимый аргумент при обращении к функциям LOG, SQR, MID$, LEFT$, RIGHT$, TAB, SPC 4. Недопустимые аргументы операторов POKE, PLOT, DRAW, ON.
ОV Переполнение Значение выражения превышает 1,7.10^38
OM Превышение памяти Программа слишком большая, содержит очень много циклов, подпрограмм, переменных или сложных выражений.
US Неопределенный номер Не существует строки, указанной в ссылке.
BS Превышение границ Обращение к переменной с индексами> которая вне описанной размерности массива, или в операторе ON выход за пределы списка меток, или неправильное число размерностей в переменной с индексами.
DD Повторное определение Повторное описание массива.
/0 Деление на 0 Была предпринята попытка деления на 0.
ID Недопустимое непосредственное исполнение В режиме непосредственного исполнения оператор использован неправильно.
TM Смешивание типов Для функции был задан неправильный тип данных; любое неправильное смешивание типов данных.
OS Превышение памяти для строк Для переменных символьного типа требуется больше памяти, чем назначено. Можно увеличить память с помощью директивы CLEAR.
LS Недопустимая длина строки Длина строки больше 255 символов.
ST Сложная строка Строка очень длинная или сложная; ее следует разделить на две части.
CN Не может быть CONT Была произведена попытка продолжить программу, которая не допускает продолжения (ни после останова по STOP, ни после останова по END, ни после останова по функциональной клавиши F0, или при отсутствии следующих операторов программы).
VF He определенная функция пользователя Ссылка на неопределенную функцию пользователя.

13.3. Средства редактирования

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

Если при выводе строки последний набранный символ неверный, то его можно уничтожить путем нажатия на клавишу ЗБ; для уничтожения двух последних символов необходимо дважды нажать на клавишу ЗБ и т.д.

Для уничтожения всей набранной строки необходимо нажать на функциональную клавишу <F5/AS>

Указанными средствами можно пользоваться до окончания ввода строки, т.е. до нажатия на клавишу ВК.

С целью облегчения ввода наиболее часто встречающихся ключевых слов БЕЙСИКа в интерпретаторе версии 2.0 предусмотрено использование некоторых функциональных клавиш, специальных клавиш и комбинации клавиш СУ и алравитно-цифрових клавиш. Так, нажатие функциональной клавиши <F1/ЧМЛ> вызывает ввод ключевого слова CLOAD, функциональ ной клавиши <F2/ЗМЛ> - C5AVE, функциональной клавиши <F3/BS> - LIST, функциональной клавиши <F4/ED> - EDIT; путем нажатая на клавишу TAB инициируем ввод символов TAB (, а нажатием на клавишу ПС - ввод директивы RUN и символа ВК, т.е. запуск программы на выполнение. Одновременное нажатие на клавишу СУ и одну из алфавитно-цифровых клавиш вызывает ввод еще одного из 32 ключевых слов БЕЙСИКа (см. табл. 4). Например, комбинация клавиш СУ и С дает слово COLOR, СУ и Р -PRINT, СУ и L -LOСАТЕ, СУ и Т - ТНЕN и т.д. В ряде случаев первая буква ключевого слова и алфавитно-цифровой символ не совпадают, однако можно составить некоторые мнемонические правила: СУ и Z - SOUND (звук), СУ и Х - PSET, CY и Y - LINE (графика, которая связана с системой координат XY) и т.д.

Таблица 4

Таблица ключевых слов

Клавиша Ключевое слово Примечание
@ READ
А DATA
В BSAVE
С COLOR
D DELETE
Е RENUM Не реализовано
F FOR
G GOTO
Н HEX$
I INPUT
J ВЕЕР
K POKE
L LOCATE
M MERGE
N NEXT
B BLOAD
P PRINT
Q RESTORE
R RUN
S STEP
Т THEN
U RETURN
V VAL
W DRAW
X PSET
Y LINE
Z SOUND
[ LOAD
\ GOSUB
] SAVE
^ CLEAR
_ CLS

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

Более мощными средствами редактирования являются средства, предоставляемые директивной EDIT. Формат директивы:

  • EDIT <номер строки>

После ввода этой директивы оператор (операторы) с указанным номером строки называются в специальный буфер редактирования, содержимое которого "высвечивается" в нижней части экрана. При помощи клавиш управления курсором, курсор устанавливается в нужное место буфера, путем нажатия на алфавитно-цифровые клавиши осуществляется замена (исправление) текста редактируемого оператора, клавишей ГТ освобождается место для вставки, клавишей ЗБ уничтожаются ненужные символы. Выход из режима редактирования осуществляется путем нажатия на клавишу ВК; при этом курсор может находиться в произвольной части буфера.

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

Для удаления группы строк программы можно использовать директи-ву:

  • DELETE <начальная строка>-<конечная строка>

где <начальная строка> и <конечная строка> - это номера строк операторов того участка программы, который подлежит удалению.

ПРИЛОЖЕНИЕ

ДОПОЛНИТЕЛЬНЫЕ ОПЕРАТОРЫ БЕЙСИКА

К дополнительным операторам БЕЙСИКа версии 2.0 относятся операторы CIRCLE, PAINT и оператор DEF USR.

В графических операторах CIRCLE, PAINT координаты точек задаются так же, как и в операторах РSЕТ, РRЕSEТ и LINE, т.е. точка с координатами (0,0) находится в левом верхнем углу экрана.

Оператор CIRCLE позволяет выводить на экран видеотерминала окружности, овалы, сектор круга, дуги. Формат оператора:

  • <номер строки> CIRCLE (<Х - коорд> , <Y - коорд>),. <радиус> [, [<цвет>]
  • [, [<нач.угол>] [, [<кон.угол>] [, <отношение>]]]]

где Х - коорд и Y - коорд - выражения, задающие значения соответственно координаты Х и Y центра окружности;

<радиус> - значение радиуса окружности (дуги окружности);

<цвет> - номер цвета переднего плана, которым чертится окружность (дуга);

<нач.угол>- начало дуги (в радианах); по умолчанию равно нулю;

<кон.угол>- конец дуги (в радианах); по умолчанию равно 2pi

<отношение> - характеристический коэффициент, задающий отношение горизонтальной и вертикальной осей и позволяющий рисовать овалы; по умолчанию равен 1.

Если заданы параметры <нач.угол>, <кон.угол>, то рисуется дуга окружности. Если любой из этих параметров отрицательный, то используется его абсолютное значение; при этом соответствующий конец дуги соединяется с центром линии радиуса. Значение углов долзкно находиться в пределах от 0 до 6.28318.

При указании параметра <отношение> рисуется овал, у которого отношений вертикальной оси к горизонтальной равно значению параметра.

Если значение параметра меньше 1, то размер горизонтальной оси равен диаметру (двум значениям параметра <радиус>), а при значении большем 1 - вертикальная ось равна диаметру.

Оператор PAINT используется для закрашивания области экрана видеотерминала сплошным цветом.

  • Формат оператора:
  • <номер строки> PAINT (<Х - коорд>, <Y - коорд>), <цвет> [, <граница>]

где <Х - коорд>, <Y - коорд> - выражения, значения которых равны соответственно координате Х и координате Y - точки, с которой начинается закрашивание области;

<цвет> - выражение, задающее значение номера цвета закраски (если опущено, то используется цвет переднего плана, определенный ранее);

<граница> - выражение, определяющее номер цвета границы области закраски (если опущено, то номер цвета границы совпадает с номером цвета закраски).

Параметр <граница> указывается в том случае, если цвет закрашивания не совпадает с цветом границы закрашиваемой области. Точка начала закраски области может быть любой точкой внутри области (но не на границе). Оператор PAINT проверяет наличие границ только по вертикали и горизонтали - и объект признается ограниченным, если ограничены вертикаль и горизонталь. Но малейшая прореха в границе позволяет оператору PAINT "пролезть" наружу и там закрасить область экрана (а том числе и всего).

Следующий пример иллюстрирует применение операторов CIRCLE и PAINT:

  • 10 CLS
  • 20 CIRCLE (100, 100), 90, 1,,,3
  • 30 CIRCLE (100, 100), 70, , ,0.5
  • 40 LINE (100, 40) - (100, 160) ,0
  • 50 LINE (40, 100) - (160, 100)
  • 60 PAINT (100, 100), 3,1

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

  • Формат оператора:
  • <номер строки> DEF USR = <выражение>

где <выражение> - это арифметическое выражение определяющее адрес точки входа в подпрограмму.

Параметр <выражение> должен иметь положительное значение в диапазоне от 0 до 65535; при нецелом значении дробная часть отбрасывается, а при значении большем чем 65535 берется остаток от деления на 65556. Полученное значение адреса (2 байта) заносится в ячейки памяти с адресом 73 или 74. Определенный оператором DEF USR адрес действительный только во время выполнения БЕЙСИК-программы (или программой строки в режиме непосредственного исполнения) и при выходе в режим диалога стирается.

Напомним, что запуск подпрограммы в машинном коде на выполнение, осуществляется с помощью функции USR.

Тип. ЛПО им. В.И. Ленина. Зак. 2077-1500