Запись и загрузка экранного изображения_
save...screens, load...screens, verify...screens
Сохранить на магнитной ленте можно и картинку, изображен-
ную на экране, записав ее на ленту с помощью оператора
save "picture" screens
После чего, вставив в программу строку:
5 load "picture" screens
— можно (если не выключать магнитофон после загрузки програм-
мы) загрузить картинку с ленты прямо на экран. Для этого надо
поместить на ленте файл с картинкой вслед за программным
файлом.
Лучше написать специальный загрузочный модуль — коротень-
кую программку, которая должна загрузиться и запуститься пер-
вой и обеспечить последовательную загрузку сначала заставки
(чтобы скрасить ожидание), потом основного текста программы.
В нашем случае программа-загрузчик может выглядеть так:
5 load "picture" screen$
10 load "dollar"
Запись экранного изображения можно проверить на отсутствие
ошибок оператором
verify "picture" screens
Запись и загрузка содержимого областей памяти
save...code, load...code, verify...code
Сохранить на магнитной ленте экранное изображение можно и
другим способом — как область памяти:
save "picture" code 16384, 6912
Приведенный оператор запишет на ленту содержимое области
памяти, начиная с адреса* 16384 (первый параметр после ключе-
вого слова code) длиной в 6912 байт** (второй параметр). Именно
в этой области памяти хранится информация об экранном изобра-
жении.
Таким же образом, указывая начальный адрес и размер в бай-
тах, можно скопировать на магнитную ленту любую область памя-
ти компьютера. После чего загрузить ее обычным образом, только
указав компьютеру, что следует ожидать блок кодов:
load "picture" code
Если после code не стоит никаких параметров, то блок кодов
загрузится в то место, с которого его записывали. Но можно и
изменить адрес начала области памяти, куда должна производить-
ся загрузка блока, и указать количество загружаемых байт:
load "picture" code 16384, 6912
Запись блока кодов можно проверить на отсутствие ошибок
оператором
verify "picture" code 16384, 6912
Что такое адрес в памяти, см. на стр. 60.
** Напомним, байтом называется восьмиразрядное двоичное число.
РАБОТА С ПРИНТЕРОМ_
LPRINT, LLIST
ZX Spectrum с подключенным к нему принтером открывает
перед программистом новые горизонты.
Во-первых, намного упрощается отладка больших программ.
Ведь с помощью оператора LLIST (аналогичного LIST) можно выве-
сти листинг на принтер и, уже не уткнувшись в экран, а аккуратно
разложив перед собой листки с текстом программы, разбираться:
что, куда и как.
Во-вторых, имея принтер, результаты выполнения собственно-
ручно написанных программ можно не только наблюдать на экра-
не монитора, но и получать материальный продукт их работы в
виде распечаток. Так, например, при работе с нашей «долларовой»
программой можно автоматически распечатывать ведомость расче-
тов. Для этого потребуется лишь добавить в программу несколько
строчек:
1 LET NP=1
2 INPUT "Введите сегодняшнее число "; LINE D$;
3 LPRINT "Ведомость на "; D$
76 LPRINT NP;" " ; Rub; " - "; Dol; "$ ";
77 LET NP=NP+1
В переменной NP хранится номер очередного вычисления.
С помощью оператора COPY на принтере можно получить и
целиком копию экрана. Причем безразлично, что в этот момент
находится на экране — текст или графическая картинка.
При отключенном принтере операторы LLIST, LPRINT и COPY игно-
рируются. Печать всегда можно остановить нажатием Break
(CS/Space).
Как компьютер общается с принтером, на какие управляющие
символы и ключевые слова тот реагирует, зависит от многих при-
чин. В основном, от специальной подпрограммы (драйвера), обслу-
живающей принтер. Тут уж кто как устроится.
О ЧЕМ ЕЩЕ МОЖНО РАССКАЗАТЬ
В этом разделе мы дадим информацию, без которой наш рассказ
был бы неполным.
Экспоненциальная форма записи чисел
Кроме обычной формы представления чисел Speccy понимает и
экспоненциальную, записывая степень через букву Е. Например,
числа 5,5*105, 2,3*10"1 запишутся следующим образом:
print 5.5е5
55ММ
print 2.3е—1
•.23
Оператор print при расчетах выводит результат не более чем с
8 значащими цифрами. Причем и те не всегда точны, даже при
обращении с целыми числами. Например, гт^лолним:
print 1е10+1-1 ею: print 1е10-1е10+1
1
Сравнение чисел
Сравнение чисел может использоваться не только как условие в
операторе if...then, но и при обычных математических расчетах.
Например, попросим print вывести результат выражений, в кото-
рых сравниваются два числа:
print 5<4
•
print 5>4
1
Что и следовало ожидать: результат истинного сравнения — 1,
ложного — 0. В выражениях, сравнивающих величины, использу-
ются все возможные сочетания знаков: «равно» (=), «больше» (>),
«меньше» (<), «больше или равно» (>=), «неравно» (О), «меньше
или равно» (<=).
Выражения со сравнением можно вставлять и в «нормальные»
числовые выражения:
print 5+2*(3>6)
5
Сравнив числа 3 и 6, компьютер сделал заключение, что выра-
жение в скобках ложно и подставил вместо него ноль.
Сравнение символьных значений
Поскольку каждому символу соответствует некий числовой эк-
вивалент — код, то можно сравнивать не только числовые, но и
символьные значения. Например, казалось бы, абсолютно бес-
смысленное с точки зрения математики выражение:
print "а"<"в"
1
— для компьютера имеет вполне конкретное значение. Подумав,
он сделал заключение, что оно верно, поскольку код буквы А
меньше кода буквы В. При сравнении символьных значений,
состоящих более чем из одного символа, происходит последова-
тельное сравнение кодов до тех пор, пока не встретятся неравные
коды:
print "аааас">"аааав"
1
При прочих равных условиях меньшим будет признано более
короткое символьное значение:
print "аааа">"аааав"
Двоичное счисление
_
Реально компьютер обрабатывает числа, записанные в двоич-
ном счислении: нулями и единицами. Поэтому часто приходится
сталкиваться с необходимостью преобразовывать числа, записан-
ные в двоичном виде, в привычные и для глаза, и для счета,
десятичные. Специализируется на этом функция BIN. Например:
print bin о
•
print bin 1
1
print bin 10
2
print bin 11
3
print bin 100
4
Мы привели так много примеров, чтобы хоть как-то помочь тем,
кто впервые сталкивается с двоичной записью чисел.
Математически оператор bin эквивалентен формуле:
Dox2° + Dix2X + D2X22 + D3X23 + ...
- где Do, Di, D2, D3, соответственно, разряды двоичного числа,
читаемые справа налево и принимающие значения 0 или 1. Пере-
ведем из двоичного в десятичный вид число 1101:
Do=l, Di=0, D2=l, D3=0, D4=l
1x2° + 0X21 + 1х22 + lx23 = 13
Проверим:
PRINT BIN 1101
13
Так оно и есть.