ОПЕРАЦИИ С СИМВОЛАМИ_
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, к описанию которого мы еще
вернемся.