ОПЕРАЦИИ С СИМВОЛАМИ_
TO, LEN, STR$, VAL
Каждый язык программирования высокого уровня и, конечно
же, Бейсик, кроме обработки числовых значений должен уметь
преобразовывать и символьные данные — строки, составленные
из букв, цифр и прочих знаков.
Простейшее действие, которое можно выполнить над символь-
ными значениями, — это сложить их с помощью обычного знака +:
PRINT "BAS"+"IC"
BASIC
Результат такой же, как если бы мы попросили компьютер
напечатать слово BASIC целиком (PRINT "BASIC").
В Бейсике ZX Spectrum можно выполнить операцию, обратную
сложению: выделить из символьного значения некоторую его часть
— подстроку. Это действие также называют сечением. Для его
выполнения после строки символов в скобках через ключевое
слово ТО указывается, с какого и по какой символы требуется
выделить подстроку:
PRINT "ABCDEF"(2 ТО 5)
BCDE
Если подстрока выделяется, начиная с первого символа, то мож-
но писать сокращенно: (ТО 5). И, аналогично, если подстрока
выделяется до конца символьной строки, то разрешается записать:
(2 ТО). Допустимо задавать сечение и вообще без параметров:
PRINT "ABCDEF"(TO)
ABCDEF
Последнее сечение можно было записать и без ТО:
ABCDEF()
Слово ТО также можно опустить, если выделяется лишь один
символ, то есть вместо (3 ТО 3) использовать (3):
PRINT "ABCDEF"(3)
С
Если границы сечения выходят за пределы строки, компьютер
выдаст сообщение об ошибке. Попробуйте ввести:
PRINT "ABCDEF"(2 ТО 10)
— и получите внизу экрана сообщение Subscript wrong (неправиль-
ный индекс).
Вообще, если компьютеру что-нибудь не нравится в наших
действиях, он будет ругаться различными английскими словами.
Перевод сообщений об ошибках и описание ситуаций, в которых
они возникают, можно посмотреть в «Справочнике».
С помощью функции LEN можно выяснить длину символьной
строки, то есть определить, сколько позиций займет она на экране
при печати*:
PRINT LEN " SINCLAIR "
II
Пробелы также считаются сим-
волами и учитываются при рас-
чете длины.
Функция STR$ преобразует
числовые значения в символьные
(«прицепляет» к числу кавычки).
Например, STR$ 3 возвращает
символьное значение "3й.
Можно рассчитать его длину:
PRINT LEN STR$ 3
1
При необходимости можно выполнить преобразование, обрат-
ное функции STR$, — превратить строковое значение в числовое.
Нужно только воспользоваться функцией VAL:
PRINT VAL "5.25м—2.25
3
Это не совсем точно: строка может содержать символы, которые не выводятся на
экран.
VAL «оторвала» кавычки, пре-
вратив строковое значение в
нормальное число, с которым
можно производить математи-
ческие операции.
Функция VAL может обраба-
тывать и числовые выражения,
представленные как символь-
ные значения. Например:
PRINT VAL "3*3+1"
11
Если VAL применить к сим-
вольному значению, не имею-
щему ничего общего с числами,
то компьютер воспримет это как
ошибку.
Символы и их коды
CODE, CHR$
Каждая буква, цифра, знак — вообще все, что мы называем
символами, кроме визуального представления на экране (и клави-
атуре), имеет еще и свой числовой эквивалент — код. Именно
последовательность этих кодов сохраняется в памяти компьютера
при записи символьного значения.
ZX Spectrum так организован, что ключевые слова Бейсика
(PRINT, VAL ит. д.) также являются отдельными знаками, каждый со
своим кодом*.
Всего в ZX Spectrum опре-
делено 256 символов с кода-
ми от 0 до 255. Полный на-
бор и тех и других можно по-
смотреть в таблице символов
на стр. 100.
Выяснить, какой код со-
ответствует символу или, на-
оборот, символ — коду, мож-
но и не пользуясь таблицей, а
с помощью функций code и
chr$:
PRINT CODE "А"
65
Это существенно сокращает объем памяти, занимаемый бейсик-программой.
Так мы узнали, что код заглавной буквы А равен 65. Или,
наоборот:
PRINT CHR$ 65
А
Что и требовалось проверить — коду 65 соответствует символ А.
Если символьное значение, подставляемое вслед за CODE, со-
стоит больше чем из одного символа, функция возвратит код
первого символа.
ГРАФИКА__
PLOT, DRAW, CIRCLE, CLS
Оператор PRINT за одно элементарное действие — вывод символа
— воздействует сразу на 64 точки экрана (8x8). Это, конечно же,
хорошо с точки зрения ускорения процесса вывода символьной
информации, но хотелось бы иметь возможность «обращаться» и к
отдельным точкам (пикселям).
Spectrum-Бейсик говорит: «Пожалуйста», — и предоставляет в
наше распоряжение оператор PLOT. С его помощью можно «вклю-
чить» любой пиксель основного экрана*. Для оператора PLOT не
существует разделения экрана на знакоместа. Для него экран —
поле высотой 176 и шириной 256 пикселей. Каждый пиксель
имеет свои координаты, не координаты знакомест в строках и
столбцах, а графические координаты:
х — по горизонтали (0...255),
у— по вертикали (0...175).
Начало отсчета системы координат (пиксель с координатами
х=0, у=0) находится в нижнем левом углу основного экрана. Об-
ратите внимание на то, что отсчет вертикальной графической
координаты идет снизу вверх, в отличие от нумерации символьных
строк, которая производит-
ся от верха экрана (см.
рис. 3).
После получения некото-
рого представления об уст-
ройстве графического экра-
на можно вернуться к опе-
ратору PLOT. Нетрудно
предположить, что для рабо-
ты ему нужны два па-
раметра — координаты точ-
ки. Они записываются че-
рез запятую после ключево-
го слова: сначала х, потом у.
Рис. 3. Строение графического экрана.
Рис. 3. Строение графического экрана.
Операторам, занимающимся графическими построениями, недоступны две стро-
ки служебного экрана.
К примеру, оператор
PLOT 130, 80 высветит точку
почти по центру экрана.
Ставя точку за точкой с
помощью PLOT, в принципе,
можно нарисовать чудесную
картинку. Попробуйте. Од-
нако вряд ли у кого-нибудь
хватит терпения выставить
более десятка точек. Кое в
чем поможет сам Бейсик.
Например, построение от-
резков и дуг берет на себя
оператор DRAW (от англ. ри-
совать, чертить).
DRAW при проведении
прямой использует лишь два
параметра: расстояние в
пикселях по х ч по у от некой
начальной точки до конеч-
ной ^оч^л строящейся ли-
нии. Следовательно, пара-
метры DRAW задают только направление и длину отрезка, но не
устанавливают его начальную точку. Выполнив, например, опера-
тор DRAW 127, 87 сразу после включения компьютера, увидим, что
линия будет проведена к середине экрана от начала координат
(0, 0). Следующий оператор, скажем, DRAW 0, —50 проведет отрезок
длиной в 50 пикселей вертикально вниз от конца предыдущей
линии. Вообще, началом линии для DRAW всегда является послед-
няя выставленная на экране точка. На-
глядней и проще всего начальную точку
можно задать с помощью оператора PLOT.
Если к оператору DRAW через запятую
добавить еще один параметр, то на экра-
не появится дуга. Этот дополнительный
параметр задает величину угла (в ради-
анах), который будет образован дугой.
Знак параметра определяет направление
построения дуги: положительный — про-
тив часовой стрелки, отрицательный —
по часовой. Принцип получения началь-
ной и конечных точек дуги остается тем
же, что и при построении отрезка. По-
пробуем:
PLOT 150, 100
DRAW -100, 0, PI
Получим полуокружность с центром в
точке (100, 100) и радиусом 50 пикселей.
С константой PI мы уже сталкивались:
она подставляет вместо себя число «пи».
Используя конструкцию с PLOT и DRAW,
можно, конечно, построить и полную окруж-
ность. Но зачем, когда в Бейсике существует
специально «обученный» для этого оператор
CIRCLE? Его параметры очевидны: координа-
ты центра и радиус окружности. Например,
нарисуем окружность с центром в середине
экрана и радиусом 50:
CIRCLE 127, 87, 50
Оператор CIRCLE строит окружности до-
статочно точно, но уж очень медленно.
Очистить экран от любого изображения
(как от графики, так и от текста), то есть
«выключить*» все пиксели, можно опе-
ратором CLS, к описанию которого мы еще
вернемся.