Спектрум Бейсик - Операции с символами.

Диалекты бейсика для ZX Spectrum

ОПЕРАЦИИ С СИМВОЛАМИ_

ТО, 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. Строение графического экрана.