Тайники ZX Spectrum 1969 г.

Basic - Структура программы. Типы данных. Имена. Выражения.


                           3. BASIC
     В этом разделе кратко представлен алфавитный перечень  функций
и команд языка ZX-BASIC. Его стоит просмотреть даже тем, кто хорошо
знает этот диалект, так как мы приводим и информацию, пропущенную в
оригинале инструкции по эксплуатации.
     В перечне используются следующие обозначения:
        @       - единичная литера;
        V       - переменная любого типа;
        X,Y,Z   - численные выражения с действительными
                  значениями;
        K,M,N   - численные выражения со значениями, ав-
                  томатически округляемыми ближайшими
                  целыми числами;
        E       - численное выражение или строка;
        F       - строка;
        S       - последовательность команд, отделенных
                  друг от друга двоеточием;
        C       - последовательность инструкций, определяющих
                  цвета и способ высвечивания (INK, PAPER,
                  BRIGHT, FLASH, OVER, INVERSE), отделяемых
                  запятыми и точками с запятой.
     Символы, помещенные  в квадратные  скобки (  [ ]  ) можно   не
употреблять, например, LOAD F  CODE [M[,N]] означает, что   верными
являются формы:
        LOAD F CODE
        LOAD F CODE M
        LOAD F CODE M,N
     В этом случае Spectrum обычно дополняет пропущенные  параметры
значениями, вытекающими из контекста, в нашем случае - считанными с
магнитной ленты. Запись @[Z] означает   @Z или @, т.е.  допускается
использование как числовой переменной, так и текстовой.
     Spectrum  почти  во  всех  случаях  допускает использование  в
качестве параметров  выражений, требующих  дополнительных расчетов.
Ограничения затрагивают   лишь допустимые   значения рассчитываемых
результатов  и  их  типы.  Выражения  типа  K,M,N  могут  давать  в
результате любые  действительные числа,  меньшие 65535   (2**16-1),
которые  будут  округлены  ближайшими  целыми  числами.   Появление
большего числа сигнализируется как ошибка сообщением B (Integer out
of range).
                    3.1 Структура программы
     Программа  на  BASIC  -  это  последовательность   инструкций,
разделенных на строки.  Каждая строка начинается со своего  номера,
или  натурального   числа  в   диапазоне  1-9999.   Пронумерованные
операторы могут  вводиться в  любой последовательности,  они  будут
автоматически упорядочены   по возрастанию   номеров. Необязательно
нумеровать   подряд,     например,    1,2,3,...,     такой    стиль
программирования не рекомендуется.   Удобнее пользоваться  номерами
через 10,  т.е. 10,20,30,...,  что позволяет  вставку новых   строк
между старыми.
     Ввод новой строки с  уже существующим номером вызывает  замену
старой  версии  этой  строки.   Допускается  размещение  в   тексте
программы строк, содержащих лишь  номер строки с целью  визуального
выделения фрагментов программы.
     Единичный оператор программы  может быть значительно   длиннее
экранной  строки  (32  знака),  но  не  может  содержать более  127
инструкций. Команды  в операторе  должны быть  отделены двоеточием.
Между  инструкциями  в  строке  можно  размещать  любое  количество
пробелов с целью улучшения читабельности программ.
     Нажатие "Enter" завершает ввод строки. Компьютер проверяет  ее
синтаксис  и,  если  она  начинается   с  номера,  включает  ее   в
существующую программу, вставляя ее в требуемое место, а если номер
опущен, компьютер приступает  к немедленному выполнению   введенной
последовательности команд.
                        3.2 Типы данных
     ZX-BASIC  позволяет  непосредственно  оперировать  числами   и
текстами. Числа могут записываться в одной из трех форм:
        - целочисленной, например 0, +17, -12, 13;
        - дробной, например +31.169, 3303.76, -.45;
        - показательной, например 7.32E-7 обозначает число
          7.32*10**-7.
     Максимальное значение действительного числа не может превышать
1.7E38. Числа хранятся с точностью до 9-10 значащих цифр. Пробелы в
середине записи  числа не  допускаются. Spectrum  для  высвечивания
числа потребует максимально 14   знакомест. Значения, требующие  не
более 8 цифр, выводятся точно, остальные - в показательной форме.
     Другим типом  данных ZX-BASIC  являются текстовые   константы,
называемые также цепочками (строками). Это любая последовательность
знаков (символов с кодами от  0 до 255), размещенная в  кавычках. В
текстовую константу можно также включать контрольные  (управляющие)
символы,  коды   ключевых   слов   и  даже    коды  символов,    не
задействованные  в  ZX  Spectrum.  Длина  текстовой константы - это
число содержащихся в ней  символов, а не число  знаков, необходимых
для высвечивания константы  на  экране. Это  число ограничено  лишь
размером  допустимой  памяти.  Допускаются  тексты  длиной 0,  т.е.
пустые.
     Во время  конструирования текста  большинство символов   можно
вводить  непосредственно   с   клавиатуры,   но  некоторые    могут
потребовать дополнительных усилий. Чтобы включить в текст  кавычку,
необходимо ввести ее с   клавиатуры дважды. Универсальным  способом
вставки  в  текстовую  строку  символов,  не  задействованных в  ZX
Spectrum, является   использование алфавитно-цифровых   выражений и
функции CHR$.  Например, конструкция  "Это"+CHR$13+"текст" даст   в
результате текст:
        Это
        текст
     ZX-BASIC не знает логических   переменных. Эту роль  исполняют
числа. Значения,  отличающиеся от 0, интерпретируются  как  истина,
равные 0 - ложь. Результатом расчетов логических выражений являются
числа 0 и 1.
     Кроме констант  ZX-BASIC допускает  использование числовых   и
текстовых переменных. Они служат для сохранения в памяти компьютера
констант определенного  типа. Переменные  идентифицируются именами,
которые им присваивает программист.
     Переменные,  хранящие  число  или  цепочку знаков,  называются
простыми переменными.  Кроме них  мы можем  также применять  и  так
называемые  табличные  переменные  (массивы),  но  они должны  быть
объявлены инструкцией DIM. Допускаются как числовые массивы, так  и
знаковые. Элементом числовой таблицы является число, а  знаковой  -
единичный символ с кодом от  0 до 255. Операторы знаковых  массивов
могут использоваться  как алфавитно-цифровые  переменные постоянной
длины, определенной последним индексом (размерностью) в  декларации
данного массива.  Число размерностей   ограничено 255.  Индексы  не
могут превышать значение  65535.  На практике  эти значения  должны
быть  значительно  меньше  из-за  допустимых  размеров  памяти.   В
объявлении массива дается только верхняя граница индекса. За нижнюю
границу индекса всегда принимается 1.
                           3.3 Имена
     Одно из неудобств ZX-BASIC -это ограничения в определении имен
используемых переменных. Только  простые числовые переменные  могут
быть  любой  последовательностью  букв,  цифр  и  пробелов.  Первым
символом имени должна быть литера.
     Все остальные переменные  должны иметь однобуквенные  имена, в
том числе и управляющие циклами переменные (FOR...NEXT).
     Текстовые  переменные   отличаются  от   числовых  знаком   $,
размещенным после  литеры. Это   также касается  названий  функций,
определенных  пользователем  с  помощью  директивы  DEF  FN  и  ее
аргументов.
     Для задания имен в программе можно использовать как малые, так
и большие литеры. Spectrum автоматически заменяет большие литеры на
малые. Также игнорируются все пробелы.
     Ограничение  использования   имен    частично   компенсируется
возможностью  использования  одной  и  той  же  литеры  как   имени
переменных  различных  типов.  Единственное  требование  при  этом:
текстовая переменная не должна помечаться   тем же символом, что  и
знаковый массив. Например, литера A в программе может обозначать:
        A                   - числовая или управляющая переменная;
        A$ или A$(I,J)      - текстовая переменная или знаковый
                              массив;
        A(I)                - числовой массив;
        FN A...             - функция с числовым значением;
        FN A$...            - функция с текстовым значением;
        DEF FN A$(A,A$,...) - параметры в определении функции.
Все это не приводит к неоднозначному толкованию этих имен.

                         3.4 Выражения
     Выражения  в  ZX_BASIC  строятся  из  постоянных,  переменных,
операторов, функций, а также скобок. Последовательность  выполнения
действий  в  выражении  определяют  круглые  скобки  и   приоритеты
отдельных операций.  Ниже рассмотрены   все допустимые  в  ZX_BASIC
операции в последовательности их приоритетов.
               3.4.1 Выделение фрагмента текста
     Операция  может  быть  выполнена  над  цепочками,   текстовыми
переменными, а также знаковыми массивами. Для цепочек и  переменных
параметры, определяющие извлекаемый фрагмент, должны записываться в
круглых  скобках,  для  массивов   эти  данные  размещают  в   поле
последнего индекса или, при  его отсутствии, в отдельных   скобках,
аналогично  простым    переменным.  Эти    параметры  могут    быть
представлены:
                - отсутствовать, изменению не подвергать;
       (K)      - арифметическое выражение, результат  -  единичный
                  символ, находящийся в K-й позиции текста;
       (K to N) - арифметическое выражение с ключевым словом  "to",
                  результат -  фрагмент текста,  включающий символы
                  от K-го до N-го включительно. Если K>M>0, резуль-
                  тат - пустая  цепочка, а если  текст короче M   -
                  сигнализируется ошибка.
Например, при выполнении программы:
10 LET A$="ТЕКСТ"
20 DIM B$(2,3)
30 LET B$(1)="ARS"
40 LET B$(2)="XYZ"
Получаем:
A$=A$()=A$(to)=A$(1 to 5)="TEKСТ"
A$(1)=A$(to 1)=A$(1 to 1)="Т"
A$(3 to 3)=A$(3)=A$(5-2)="К"
A$(to 2)=A$(1 to 2)="ТЕ"
A$(3 to)=A$(3 to 5)="КСТ"
A$(2 to 4)="ЕКС"
B$(1)=B$(1,)=B$(1)()=B$(1)(to)=B$(1,to)=B$(1,1 to 3)=
=B$(1)(1 to 3)="ABS"
B$(2,2)=B$(2)(2)=B$(2,2 to 2)=B$(2)(2 to 2)="Y"
     В других диалектах BASIC подобную роль выполняют функции:
        LEFT(A$,N)   = A$(to N)
        RIGHT(A$,N)  = A$(N to)
        MID(A$,K,M)  = A$(K to M)
        TL(A$)       = A$(2 to)
                3.4.2 Возведение в степень (^)
     Аргументами   операции   возведения    в   степень    являются
вещественные  числа.  Основание  всегда  должно быть  положительным
числом. Следует помнить,  что A^B рассчитывается  как EXP(B*LN(A)),
поэтому A^2 будет вычисляться дольше, чем A*A.
                3.4.3 Минус как знак числа (-)
     Аргументом этой операции всегда является число, результатом  -
то же число с противоположным знаком. Минус как знак числа  следует
отличать от обозначаемой тем же знаком операции вычитания.  Высокий
приоритет   этой    операции   позволяет    написать   A*-B,    что
интерпретируется как A*(-B). В   иных диалектах BASIC  употребление
подряд двух операторов не допускается.
                3.4.4 Умножение и деление (*,/)
     Умножение  и  деление  арифметически  выполняются  в  той   же
последовательности,  в   какой  встречаются   в  выражении.   Знаки
умножения  опускать  нельзя.   Умножение  выполняется   компьютером
быстрее, чем деление, следовательно, лучше писать A*.5, чем A/2.
               3.4.5 Сложение и вычитание (+,-)
     Для  числовых  аргументов  эти  символы  означают  сложение  и
вычитание. Обе операции имеют одинаковый приоритет и выполняются  в
порядке очередности появления.
     Плюс в применении  к  текстовым константам  и переменным  дает
текст, который складывается из  символов первого и, добавленных   к
его концу, символов второго.  В отличие от сложения  чисел свойство
перестановки здесь не выполняется.
            3.4.6 Знаки отношений (=,<,>,<=,>=,<>)
     Это двухаргументные операции сравнения   одного типа. Все  они
имеют одинаковый  приоритет и  означают отношения:  равно,  меньше,
больше, меньше или равно,  больше или равно, не  равно. Результатом
является  число  1,  если  отношение  соблюдается  и  0, если  нет.
Результаты  проверки    отношений  могут    быть  использованы    в
арифметических выражениях как обычные числа.
     Как пример,  разберем следующую  проблему: имеем  в  программе
числовой массив B,  объявленный инструкцией DIM  B(100). Необходимо
определить, сколько элементов этого  массива больше 7. Проще  всего
этого можно добиться командами:
   LET X=0: FOR I=1 TO 100: LET X=X+(B(I)>7): NEXT I
После выполнения этих команд  переменная X будет содержать  искомое
число.
     Эти  же   операторы  применяются    к текстовым переменным   и
константам.     Результат     выполнения     операции     сравнения
последовательности   символов    определяется    лексикографическим
порядком, наименьший  код у  пустого текста.  Сравнивая  поочередно
символ  за  символом,    ищется  первое  место,    в  котором   обе
последовательности отличаются. За меньший  принимается тот текст, в
котором первый  отличающийся символ  имеет меньший  код.  Например,
истинны следующие отношения:
        ""<"TEKST"<"TZ"<"TZ0"
               3.4.7 Логическое отрицание (NOT)
     Это  операция   логического    отрицания  значения   числового
выражения, являющегося ее  аргументом, которое рассматривается  как
логическая величина.
                [ 0, если X<>0
      NOT X =  <
                [ 1, если X=0
Помним,  что  логические  выражения  типа  (A>B)OR(C=D)   компьютер
трактует как числовые выражения.
                  3.4.8 Логическое "И" (AND)
     Логическое "И"  - это   двухаргументная операция.  Это  весьма
полезная  операция,  применение  которой  выходит  далеко за  рамки
расчета логических выражений.  Первым операндом операции  AND может
быть  как  числовое,  так  и  алфавитно-цифровое выражение,  вторым
должно быть только числовое. Ниже дано определение логического  "И"
как его понимает ZX-BASIC:
                [ X, если Y<>0
    X AND Y =  <
                [ 0, если Y=0
                [ F, если Y<>0
    F AND Y =  <
                [ "", если Y=0
Определение это может показаться странным и не связанным с тем, что
мы привыкли  считать логическим  "И". Обратим  внимание, что   если
оператор AND будет находиться между двумя логическими  выражениями,
то его результатом  будет 1 тогда   и только тогда,  когда оба  эти
выражения  истинны.  Достоинства  такого  определения операции  AND
проявляются ниже в примерах.  Допустим, что переменной MAXIMUM   мы
хотим присвоить значение максимального из  чисел A и B. Для   этого
достаточно одной инструкции:
        LET MAXIMUM=(A AND A>B)+(B AND A<=B)
Скобки  в  этом  выражении  обязательны  ввиду высокого  приоритета
операции +.
     Еще  более  наглядные  результаты  можно  получить, работая  с
текстами. Последующая программа распознает пол пользователя по  его
имени:
        10 PRINT "Сообщи свое имя";A$
        20 PRINT "Привет пан"+("и" AND A$(LEN A$)="а")
Не  располагая  операцией  "И"  такого  типа,  необходимо  было  бы
многократно использовать инструкции IF...THEN, а также GO TO...
                3.4.9 Логическое сложение (OR)
     Операция OR  - это   двухаргументная операция.  Оба  аргумента
должны  быть   числовыми  выражениями.    Действие  этой   операции
следующее:
                [ 1, если Y<>0
     X OR Y =  <
                [ X, если Y=0
Применение OR вне логических  выражений значительно реже, чем  AND.
Например, инструкцию, рассчитывающую максимум из двух чисел,  можно
записать в следующей форме: LET MAXIMUM=A*(0 OR A>B)+B*(0 OR A<=B).



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Статьи - КОМПЬЮТЕРНАЯ ТЕХНИКА КОМПЬЮТЕР "KAY-256"
Мозаика - Где они? Что стало с людьми, писавших фирменные игры для Спектрума.
Обозрение - ИГРЫ. Знакомство с новинками игрового ПО: Козел, Охота на кротов, Белый Орел, Leprikon, 12 Тайных Книг, King, C.H.I.F., Черный Ворон - новые миссии.
Железо - схема сканера для ZX Spectrum.
Об авторах

В этот день...   28 апреля