Продолжение табл. 1
Функция |
Значение функции |
RND |
Следующее псевдослучайное число во встроенной-в-реализацию последовательности псевдослучайных чисел, равномерно распределенных в диапазоне 0 < RND < 1 (см. также п. 3.16) |
SGN(X) |
Алгебраический ’’знак” X: -1, если X < 0; 0, если X = 0 и +1, если X > 0 |
SIN(X) |
Синус X, где X измеряется в радианах |
SQU(X) |
Неотрицательное значение квадратного корня их X; X должен быть неотрицательным |
TAN(X) |
Тангенс X, где X измеряется в радианах |
Исключения
Значение аргумента функции LOG равно нулю или отрицательное (неустранимая ошибка).
Значение аргумента функции SQR отрицательное (неустранимая ошибка).
Величина функции экспоненты или тангенса больше машинного максимума (значение функции должно заменяться машинным максимумом; вычисления продолжаются).
Примечания
Функция RND в отсутствии оператора-запуска-генератора-псевдо- случайных-чисел должна генерировать одинаковую последовательность псевдослучайных чисел во время каждого выполнения программы. Это требование выбрано с Той целью, чтобы программы, использующие псевдослучайные числа, выполнялись каждый раз с одним результатом.
Если значение функции-экспоненты меньше машинного минимума, то реализация должна выдать сообщение о потере точности, а затем продолжать вьиисление.
Алгоритмы вычисления встроенных-функций должны быть построены таким образом, чтобы переполнение, возникшее при промежуточных вычислениях, не вызывало исключительной ситуации, если конечное значение находится в допустимом диапазоне.
Функции, определенные пользователем
Общее описание
Кроме встроенных-функций, Бейсик должен предоставлять пользователю возможность определения новых функций.
Общая синтаксическая форма оператора-определения-функций следующая:
DEF FNx = выражение
или
DEF FNx (параметр) = выражение
где х это одна буква, а параметр — простая-числовая-переменная.
Синтакси
соператор-определения-функции = DEF определяемая-числовая- функция списцк-параметров? знак-равенства арифметическое-выражение
определяемая-числовая-функция = FN буква
список-параметров = круглая-скобка-левая параметр круглая- скобка-правая
параметр = простая-числовая-переменная
Примеры
DEF FNF(x) = хл4—I
DEF FNA(x) =А*Х+В
DEFFNP = 3.14159
Семантика
Определение функции специфицирует способ вычисления функции в терминах значения выражения, включающего параметр, если он есть в списке параметров и, возможно, другие переменные или константы. Если в определении функции отсутствует список-параметров, то обращения к функции не должны содержать список-аргументов. Если определение функции содержит список-параметров, то обращения к функции должны содержать список-аргументов. В этом случае вычисляется выражение в списке-аргументов, и его значение присваивается параметру из списка параметров в определении функции. Затем вычисляется выражение в определении функции, его значение присваивается функции и является значением функции.
Параметр из списка-параметров, заданный в определении функции, является локальным для этой функции, т.е. переменная с тем же идентификатором, что и внешняя переменная, не имеют ничего общего между собой. Переменные, не описанные как параметры и входящие в арифметическое-выражение, являются одними и теми же как в определении функции, так и вне его.
Определение функции должно находиться в строке с меньшим номером, чем первое обращение к этой функции.
Выражение, заданное в операторе-определения-функции, вычисляется только при обращении к описанной им функции. При выполнении оператора-определения-функции никаких действий в программе не производится и происходят переход на следующую строку.
Определение функции может ссылаться на другие уже определенные функции, но не может ссылаться на текущее определение функции. В программе функции может ссылаться на другие уже определенные функции. В программе функция может быть определена не более одного раза.
О п е р а т о р-п р и с в а и в а н и я
Общее описание
Оператор-присваивания предназначен для присваивания значения выражения переменной. Общая синтаксическая форма следующая:
LET переменная = выражение
Синтаксис
оператор-присваивания = арифметический-оператор-присваивания текстовый-оператор-присваивания
арифметический-оператор-присваивания = LET числовая-перемен- ная знак-равенства арифметическое-выражение
текстовый-оператор-присваивания = LET текстовая-переменная знак-равенства текстовое-выражение
Примеры
LET Р = 3.14159
LET А(х, 3) = SIN(Y)*Y+I
LET АД= ”АВС”
LET А Д= ВЦ
Семантика
Вычисляется выражение (см. п. 3.5) и его значение присваивается переменной, находящейся слева от знака равенства.
Исключения
При присваивании значения текстового выражения текстовой переменной длина результирующего текста превышает допустимую. Возникает переполнение, приводящее к неустранимой ошибке.
Операторы управления
Общее описание
Операторы управления позволяют изменить нормальную последовательность выполнения операторов, указывают номер строки, которая должна выполняться следующей вместо идущей по порядке строки со следующим большим номером-строки.
Оператор-безусловного-перехода.
GO ТО номер-строки
допускает безусловную передачу управления.
Оператор-условного-перехода.
IF вырі отношение выр2 THEN номер-строки
где ”выр1” и ”выр2” - выражения, ’’отношение” - это операция отношения. Этот оператор позволяет выполнять условную передачу управления.
Оператор-вызова-подпрограммы и оператор-возврата-из-подпрограм- мы
GOSUB номер-строки
RETURN _
позволяют вызывать подпрограммы.
Оператор-вычисляемого-перехода.
ON выражение GOTO номер строки, . . ., номер-строки позволяет передать управление строке с выбранным номером.
Оператор-останова
STOP
завершает выполнение программы.
СинтаксисСинтаксис определяется следующим образом:
оператор-безусловного-перехода = GO пробел* ТО номер-строки
оператор-условного-перехода = IF выражение-отношений THEN номер-строки
З Т выражение отношения = (арифметическое-выражение отношение арифметическое выражение) | (текстовое-выражение отношение-эквива- лентности текстовое выражение)
отношение = отношение-эквивалентности | меньше I больше I неменьше I не-больше
отношение эквивалентности = знак-равенства | знак-неравенства
не-меньше = больше знак-равенства
не-больше = меньше знак-равенства
не-равно = меньше больше
оператор-вызова-подпрограммы = GO пробел* SUB номер-строки
оператор-возврата-из-подпрограммы = RETURN
оператор-вычисляемого-перехода = ON арифметическое-выражение GO пробел* ТО номер-строки (запятая номер-строки) *
оператор-останова = STOP
3.9.3. Примеры
GO ТО 999
GOTO 999
IF X > Y+83 THEN 200
9) GO SUB 100
GOSUB 100
ON L + 10 GO TO 300,400, 500
STOP
.4. Семантика
Оператор-безусловного-перехода указывает, что выполнение программы должно быть продолжено со строки, указанной в номере-строки.
Если значение выражения-отношения в операторе-условного-перехо- да — исійна, то выполнение программы будет продолжено со строки с указанным номером-строки; если значение выражения-отношения — ложь, то последовательность выполнения строк не изменяется, т.е. выполняется строка, идущая по порядку за строкой с оператором-условно- го-перехода.
Отношение не-больше обозначается <=. Аналогично отношение неменьше обозначается >=. Отношение не-равно обозначается О.
Два текста считаются эквивалентными тогда и только тогда, когда они имеют одинаковую длину и содержат одинаковые последовательности символов.
Выполнение оператора-вызова-подпрограммы и оператора-возврата- из-подпрограммы может быть описано в терминах стека номеров-строк (но может быть выполнено и по-другому).
Перед выполнением первого оператора-вызова-подпрограммы в программе стек является пустым. Во время выполнения очередного оператора-вызова-подпрограммы номер-строки, в котором расположен опера- тор-вызова-подпрограммы, помещается в вершину стека, после чего выполнение программы продолжается со строки, объявленной в операторе- вызова-подпрограммы.
При выполнении каждого оператора-возврата-из-подпрограммы из вершины стека извлекается номер строки, после чего программа выполняется со строки, следующей за строкой с данным номером.
Не обязательно, чтобы перед окончанием программы было выполнено одинаковое количество операторов-ьь.эова-подпрограммы и опера- торов-возврата-из-подпрограммы.
Выражение в операторе-вычисляемого-перехода вычисляется и округляется до ближайшего целого. Это значение затем используется для выбора номера-строки из списка в операторе-вычисляемого-перехода (номера-строк в списке нумеруются слева направо, начиная с 1). Выполнение программы продолжается со строки с выбранным номером-стро- ки.
Все номера-строк в операторах управления должны ссылаться на конкретные строки в программе.
Оператор-останова вызывает окончание программы.
.5 .Исключения
Попытка выполнения оператора-возврата-из-подпрограммы без выполнения до него соответствующего оператора-вызова-подпрограммы (неустранимая ошибка). .
Целое, полученное в выражении в операторе-вычисляемого-перехода, меньше единицы или больше числа элементов в списке номеров-строк (неустранимая ошибка).
0. О п е р а т о р ы цикла
Общее описание
Оператор-начала-цикла и оператор-конца-цикла служат для создания цикловГрбщая синтаксическая форма операторов начала-цикла и конца- цикла следующая:
FOR V = начальное-значение ТО конечное-значение STEP шаг NEXT v
где V — простая-числовая-переменная, а начальное-значение, конечное-значение и шаг суть арифметические-выражения; указание STEP шаг является необязательным. .
Синтаксис
цикл-с-шагом = строка-цикла тело-цикла
тело-цикла = блок* строка-конца-цикла
строка-цикла = номер-строки оператор-начала-цикла конец-стро- ки
строка-конца-цикла = номер-строки оператор-конца-цикла конец- строки
оператор-началащикла = FOR управляющая-переменная равно начальное-значение ТО конечное значение (STEP приращение)?
управляющая-переменная = простая-числовая-переменная
начальное-значение = арифметическое-выражение
конечное-значение = арифметическое-выражение
шаг = арифметическое-выражение
оператор-конца-цикла = NEXT управляющая-переменная
Примеры
100 FOR I = ITOIO
... другие блоки или строки
200 NEXT I
5) FORI = А ТО В STEP-I
10) NEXT С7
Семантика
Оператор-начала-цикла и оператор-конца-цикла описываются совместно. Физическая последовательность операторов, включающая оператор-начала-цикла и все последующие операторы вплоть до первого опера- тора-конца-цикла с той же управляющей переменной, называется цик- лом-с-шагом. Циклы-с-шагом могут быть физически вложенными, т.е.1 цикл-с-шагом может содержать в себе другой цикл-с-шагом, но они не могут пересекаться, т.е. цикл-с-шагом, который содержит оператор-начала-цикла или оператор-конца-цикла, должен содержать весь цикл-с- шагом, начинающийся или, соответственно, кончающийся этим оператором.
Физически вложенные операторы не могут иметь одну и ту же управ- ляюшу ю-переменную.
При отсутствии указания STEP в операторе-начала-цикла приращение по умолчанию принимается равным +1.
В терминах других операторов можно описать действие оператора- начала-цикла и оператора-конца-цикла следующим образом:
FOR = начальное-значение ТО конечное-значение STEP шаг (блок) NEXT эквивалентно
LET ownl = конечное-значение
LET own2 = mat
LET v = начальное значение
строка I IF (v—ownI)*SGN(own2) > 0 THEN строка 2
(блок)
LET V = v+own2
GOTO строка I
.строка 2 REM
Здесь v - любая простая-числовая-переменная, ownl и own2 - переменные, связанные с конкретным циклом-с-шагом и не доступные программисту; строка! и строка 2 — номера-строк, связанные с конкретным циклом-с-шагом и не доступные программисту. Переменные ownl и own2 отличаются от аналогичных переменных, связанных с другими цик- лами-с-шагом.
Программа может передавать управление внутрь тела-цикла только при помощи оператора-возврата-из-подпрограммы (см. п. 3.9)
Примечания
Если в цикле есть приближенные вычисления (например, действия с десятичными дробями в двоичной машине), то цикл будет выполняться в диапазоне граничных значений машинной арифметики. Никаких требований на приближенный результат конечной проверки не накладывается. Нужно заметить, что в большинстве ординарных ситуаций, когда реализованный метод вычислений усекает, а ни округляет результат, конструкции вида