ОПЕРАЦИИ С СИМВОЛАМИ_
ТО, LEN, STR$, VAL
Каждый язык программирования высокого уровня и,
конечно же, Бейсик, кроме обработки числовых значений должен уметь
преобразовывать и символьные данные — строки, составленные из
букв, цифр и прочих знаков.
Простейшее действие, которое можно выполнить над символьными значениями, — это сложить их с помощью обычного знака +:
PRINT "BAS"+"IC" BASIC
Результат такой же, как если бы мы попросили компьютер напечатать слово BASIC целиком (PRINT "BASIC").
В Бейсике ZX Spectrum можно выполнить операцию, обратную сложению: выделить из символьного значения некоторую его часть — подстроку. Это действие также называют сечением. Для его выполнения после строки символов в скобках через ключевое слово ТО указывается, с какого и по какой символы требуется выделить подстроку:
PRINT "ABCDEF"(2 ТО 5) BCDE
Если подстрока выделяется, начиная с первого
символа, то можно писать сокращенно: (ТО 5). И, аналогично, если
подстрока выделяется до конца символьной строки, то разрешается
записать: (2 ТО). Допустимо задавать сечение и вообще без параметров:
PRINT "ABCDEF"(TO) ABCDEF
Последнее сечение можно было записать и без ТО: ABCDEF0
Слово ТО также можно опустить, если выделяется лишь один символ, то есть вместо (3 ТО 3) использовать (3):
PRINT "ABCDEF"(3) С
Если границы сечения выходят за пределы строки, компьютер выдаст сообщение об ошибке. Попробуйте ввести:
PRINT "ABCDEF"(2 ТО 10) — и получите внизу экрана сообщение Subscript wrong (неправильный индекс).
Вообще, если компьютеру что-нибудь не нравится
в наших действиях, он будет ругаться различными английскими словами.
Перевод сообщений об ошибках и описание ситуаций, в которых они
возникают, можно посмотреть в «Справочнике».
С помощью функции LEN можно выяснить длину символьной строки, то есть определить, сколько позиций займет она на экране при печати4:
PRINT LEN " SINCLAIR " 1#
Пробелы также считаются символами и учитываются при расчете длины.
Функция STR$
преобразует числовые значения в символьные («прицепляет» к
числу кавычки). Например, STR$ 3 возвращает символьное значение "3м.
Можно рассчитать его длину:
PRINT LEN STR$ 3 1
При необходимости можно выполнить
преобразование, обратное функции STR$, — превратить строковое
значение в числовое. Нужно только воспользоваться функцией VAL:
PRINT VAL "5.25"—2.25 3
VAL «оторвала» кавычки, превратив
строковое значение в нормальное число, с которым можно производить
математические операции.
Функция VAL может обрабатывать и числовые выражения, представленные как символьные значения. Например:
PRINT VAL "353+1"
Если VAL применить к символьному значению, не имеющему ничего общего с числами, то компьютер воспримет это как ошибку.
Символы и их коды
CODE, CHR$
Каждая буква, цифра, знак — вообще все,
что мы называем символами, кроме визуального представления на экране (и
клавиатуре), имеет еще и свой числовой эквивалент — код. Именно последовательность этих кодов сохраняется в памяти компьютера при записи символьного значения.
ZX Spectrum так организован, что ключевые слова
Бейсика (PRINT, VAL ит. д.) также являются отдельными знаками, каждый
со своим кодом*.
Всего в ZX Spectrum определено 256 символов с
кодами от 0 до 255. Полный набор и тех и других можно посмотреть в
таблице символов на стр. 100.
Выяснить, какой код соответствует символу или, наоборот, символ — коду, можно и не пользуясь таблицей, а с помощью функций CODE и CHR$:
PRINT CODE "А" 65
Так мы узнали, что код заглавной буквы А равен 65. Или, наоборот:
PRINT CHR$ 65 А
Что и требовалось проверить — коду 65 соответствует символ А.
Если символьное значение, подставляемое вслед
за CODE, состоит больше чем из одного символа, функция возвратит код
первого символа.
Основной экран
Рис. 3. Строение графического экрана.