Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZX-Review-1992-01-12.pdf
Скачиваний:
244
Добавлен:
28.03.2015
Размер:
2.43 Mб
Скачать

экране, после этого Вам захотелось разделить экран пополам (по вертикали) и в правой половине экрана распечатывать листинг программы, а в левой половине результат ее работы. Это сделать несложно, задав два окна. Но теперь есть проблема в том, что раз графические команды у Вас были рассчитаны на полный экран, то они не смогут работать нормально в его одной половине. В этом случае при переключении на окно Вы можете поменять и масштаб LET XRG = 128.

РАЗДЕЛ 3. ФУНКЦИИ

Бета Бейсик версии 3.0 имеет более 20 новых функций. Эти функции определены в нулевой строке (которая при листинге не воспроизводится). Там же содержится и указание на машинный код, выполняющий непосредственные расчеты для этих функций.

В программе эти функции существуют как обычные функции, заданные пользователем, а в листинге они являются обычными ключевыми словами. Например, если строка программы содержит FN S$, в листинге это проявляется, как STRING$ и курсор проскакивает это слово за одно нажатие. Функции, заданные пользователем и не являющиеся составной частью Бета Бейсика, действуют как обычно.

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

Ввод имен функций Бета Бейсика может осуществляться полностью, (если Вы работаете в режимах KEYWORDS 3 или 4) или вводом FN, затем буквы, а затем символа "$" или символа "(". "FN" можно получить нажатием клавиши "Y" в графическом режиме или по буквам. Дополнительные функции Бета Бейсика не будут работать, если в памяти отсутствует машиннокодовая часть программы Бета Бейсик. С другой стороны, если будет отсутствовать нулевая строка, то будут потеряны определения функций и Вы получите сообщение об ошибке "FN without DEF". В этом случае остальная часть языка будет работать, но воспользоваться новыми функциями Вы не сможете.

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

Если же Вы захотите специально удалить нулевую строку, то это можно сделать командой DELETE 0 TO 0.

Ниже мы приводим список новых функций Бета Бейсика.

AND

FN A(

BIN$

FN B$

CHAR$

FN C$

COSE

FN C(

DEC

FN D(

DPEEK

FN P(

EOF

FN K(

FILLED

FN F(

HEX$

FN H$

INARRAY

FN U(

INSTRING

FN I(

ITEM

FN T(

LENGTH

FN L(

MEM

FN M(

MEMORY$

FN M$

MOD

FN V(

NUMBER

FN N(I

OK

FN O(

RNDM

FN R(

SCRN$

FN K$

SHIFT$

FN Z$

SINE

FN S(

STRING$

FN S$

TIME$

FN T$

USING$

FN U$

XOR

FN X(

1. AND (число, число)

FN A (число, число)

По написанию эта функция похожа на обычное ключевое слово AND, но в программе их можно различить по различному синтаксису. Она выполняет побитную операцию AND для двух чисел от 0 до 65535. Если какой то бит и в первом числе и во втором равен единице, то только в этом случае соответствующий бит результата тоже будет равен единице. Если хотя бы один из них равен нулю, то и в результате этот бит будет равен нулю.

Чтобы лучше понять, как все это происходит, мы воспользуемся функцией BIN$, о которой речь пойдет ниже.

BIN$ (254) = "11111110"

BIN$ (120) = "01111000" BIN$(AND(254,120)) = "01111000"

Таким образом, с помощью функции AND можно выключать (маскировать) нежелаемые биты, например:

PRINT AND(BIN 00000111, ATTR(line,column))

Эта конструкция позволит получить значение INK, установленное для знакоместа с координатами (line, column), а прочие цветовые атрибуты в байте окажутся замаскированы. Поскольку BIN 00000111 = 7, то мы могли записать эту команду и так:

PRINT AND (7,ATTR(line,column))

Нижеприведенный пример напечатает на экране слово "Bang", если на клавиатуре будет нажата клавиша "F". При этом не имеет значения, какие еще клавиши будут нажаты вместе с ней. В примере клавиатура рассматривается как серия внешних портов. Если Вы не знакомы с тем, как это происходит, читайте нашу книгу ("Программирование в машинных кодах"; М:. "ИНФОРКОМ", 1990, 1992).

10 IF AND(BIN 00001000, IN 65022) = 0 THEN PRINT "Bang! "; 20 GO TO 10

2. BIN$ (число) FN B$ (число)

Функция дает двоичный эквивалент для заданного числа в виде восьмисимвольной строки, если число меньше 256 или в виде шестнадцатисимвольной строки, если число больше 255, но меньше 65535. Речь идет только о целых числах.

Эта функция очень полезна для тех, кто осваивает программирование в машинных кодах и (или) пользуется функциями Бета Бейсика для битовых операций AND, OR, XOR.

Кроме того, эта функция может пригодиться при работе с генератором символов, с графикой пользователя UDG и при анализе цветовых атрибутов, системных переменных или при опросе клавиатуры, например:

10 PRINT AT 10, 10; BIN$(IN65022)

20 GO TO 10

Символьная строка, выдаваемая этой функцией, это последовательность нулей и единиц. Может быть, вам захочется, чтобы это были иные символы, например, при распечатывании на экране конструкции шрифта знакогенератора очень удобно вместо единиц иметь крестики, а вместо нулей пробелы, это тоже можно сделать, если принудительно заслать (РОКЕ) в ячейку 62865 код буквы "X", а в ячейку 62869 код пробела " ".

3. CHAR$ (число)

FN C$ (число)

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

LET а = INT(number/25б): LET b = number a*256 LET с$ = CHR$ a + CHR$ b

Полученная в результате строка не всегда может быть распечатана, т.к. не всегда в результате получается печатный символ. В этом случае может, например, появиться сообщение об ошибке " invalid colour", если в итоге получился символ, являющийся управляющим кодом. Перед печатью на экран желательно сделать обратную конверсию. Это может сделать функция NUMBER, которая заменит двухсимвольную строку на соответствующее ей число. Поскольку на хранение двухсимвольной строки расходуются только два байта, а не пять, как на число, то мы рекомендуем Вам очень серьезно подумать о том, чтобы использовать эти возможности, если Ваша программа обслуживает и хранит большие массивы чисел (что часто бывает в научных расчетах).

Если Вы не можете работать только с целыми числами, то попробуйте воспользоваться преобразованием их. Например, вам надо хранить число 87.643. Умножив его на 100, вы получите 8764.3. Округлите и преобразуйте 8764 в двухсимвольную строку перед сохранением этого числа в памяти. Когда же оно вновь Вам понадобится, сделайте обратное преобразование, с помощью NUMBER преобразуйте двухсимвольную строку в 8764 и поделите результат на 100. Полученное значение 87.64 имеет неплохую точность по сравнению с исходным числом, эта точность достаточна для большинства практических приложений.

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

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

100 DIM a$ (500,2)

110 FOR i = 1 TO 500

120 LET a$(i) = CHR$ (i*10)

130 NEXT i

140 PRINT "Array is ready!"

100 PRINT "Press any key!'

160 PAUSE 0

170 FOR i=1 TO 500

180 PRINT i, NUMBER(a$(i))

190 NEXT i

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

Оператор SORT работает с конвертированными в символьные строки массивами совершенно правильно.

4. COSE (ЧИСЛО)

FN C (число)

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

5. DEC (символьная строка)

FN D (символьная строка)

См. также HEX$ (число).

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

число в целое десятиричное число от 0 до 65535. При этом шестнадцатиричное число должно быть выражено символьной строкой длиной от 1 до 4 х символов, а регистр символов не имеет значения.

DEC ("FF") 255

DEC ("10") = 16

DEC ("4000") = 16384 DEC ("e") = 14

Эта функция предназначена для обеспечения ввода в программу шестнадцатиричных данных. Например:

INPUT a$: POKE address,DEC(a$)

Использование "пустой строки" или строки, содержащей символы, не являющиеся шестнадцатиричной формой записи дает сообщение об ошибке "Invalid argument".

(Окончание следует).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]