Программирование на языке BASIC 1990 г.

Глава 6,7,8 - операторы READ, DATA, RESTORE. Арифметические операции. Строки символов.


Глава 6
                 Операторы READ, DATA, RESTORE
В некоторых предыдущих программах мы видели,  что информация  или
данные могут быть введены в компьютер при помощи оператора INPUT,
иногда  это может быть очень утомительно,  особенно если  многие
данные  повторяются  каждый  раз при выполнении  программы.  Вы
можете сэкономить много времени  используя команды READ,  DATA  и
RESTORE. Например:        10 READ A, B, C
                          20 PRINT A, B, C
                          30 DATA 10, 20, 30
                          40 STOP
    Оператор READ состоит из слова READ за которым следует список
имен переменных, разделенных запятыми, он выполняется значительно
эффективнее  оператора  INPUT,  особенно когда вводимые  значения
присваиваются переменным,  в этом случае компьютер ищет  величины
переменных в утверждении DATA.
    Каждый  оператор  DATA - это список значения  - числовых  или
строчных - разделенных запятыми,  вы можете вводить их где угодно
в программе,  так как компьютер игнорирует их, за исключением тех
случаев, когда их использует оператор READ.
Вы  должны  представлять  выражения для всех  операторов  DATA  в
программе, что позволит вам вводить совместно формы DATA.
     Длинны списка выражения (списка DATA).
Сначала  компьютер  выбирает первое значение из списка  DATA  для
величины  из  операторов READ,  в следуюжий раз он  берет  второе
значение из списка DATA и, таким образом, выбираемые последовате
льно  операторы READ обрабатываются с использованием списка DATA.
Заметьте для себя,  что является бесполезным  введение  оператора
DATA  в  виде управляющего оператора,  так как оператор  READ  не
обнаружит его. Оператор DATA выполняется только в программе.
   Можно  посмотреть,  как  эти требования выполняются  в  весьма
характерной программе:  строка 10 дает указание компьютеру читать
три значения DATA и присвоить их переменным A, B, C.
    Строка 20 говорит о том,  что надо вывести (PRINT) три значе-
ния. В строке 30 оператор DATA задает значения для A, B, C.
    Строка 40 заканчивает программу.
    Информация  об операторе DATA может быть частью  FOR...  NEXT
цикла. Например:           10 FOR N=1 TO 6
                           20 READ D
                           30 DATA 2,4,6,8,10,12
                           40 PRINT D
                           50 NEXT N
                           60 STOP
    Когда  выполняется эта программа то можно увидеть,  как  READ
оператор перебирает весь список DATA.
    Оператор DATA может содержать также и строчные перпример:
                           10 READ D$
                           20 PRINT "THE DATE IS", D$
                           30 DATA  "JONE IST, 1982"
                           40 STOP
    Это простой способ получения выражения из DATA списка:  старт
и выполнение от начала до тех пор, пока не будет достигнут конец,
однако  вы  можете  использовать и программный переход  для  DATA
списков,  используя оператор RESTORE.  В этом случае используется
оператор RESTORE  с указанием после него номера строки с операто-
ром DATA,  и все последовательно встречающиеся в программе опера-
торы READ вводят данные подряд, начиная с первого оператора DATA.
Вообще-то  вы можете не указывать номер строки в  операторе  RES-
TORE,  и  в  этом  случае  указатель данных становится на  первый
оператор в программе.
    Попробуйте выполнить такую программу:
                            10 READ A,B
                            20 PRINT A,B
                            30 RESTORE 10
                            40 READ X,Y,Z
                            50 PRINT X,Y,Z
                            60 DATA 1,2,3
                            70 STOP
    В  этой программе переменным вводимым в строке 10 будут прис-
воены значения X=1 и B=2.  оператор RESTORE 10 сбрасывает  указа-
тель  данных в начальное положение и строка 40 присвоит  значения
переменным X, Y и Z начиная с первого значения в DATA.
    Выполните  программу  без строки 30,  вы увидите сами что  из
этого получится.
Глава 7
          А Р И Ф М Е Т И Ч Е С К И Е   О П Е Р А Ц И И
   Краткое содержание: операции +, -, *,  /  выражения, условнные
обозначения, имена переменных.
    Вы  видели  несколько примеров в которых  ZX  SPEKTRUM  может
оперировать числами,  также можно выполнять четыре арифметические
операции: +, -, *, /. Пример:    LET TAX= SUM*15/100
Отсюда видно что вычисления могут быть комбинированными.
    Комбинации такого типа как SUM*15/100 называются  выражениями.
    Выражение - это самый короткий путь для указания  компьютеру
на то, что вычисления надо делать одно за другим. В нашем примере
выражение: SUM*15/100 указывает:  возьми  значение  переменной  с
именем "SUM ", умножь его  на 15 и затем раздели на 100.  Если
вы не можнте  еще  этого сделать,  мы  рекомендуем  просмотреть
вводную  часть  этой  книги, чтобы ознакомится, как  ZX  SPEKTRUM
работает с числами и каков порядок, в котором выполняются матема-
тические  выражения.
   Краткое повторение:
   Умножение и деление выполняются первыми, они имеют более высо-
кий приоритет, чем сложение и вычитание.
    Относительно  друг  друга  умножение и деление  имеют  равные
приоритеты,  существует правило,  по которому умножение и деление
выполняются последовательно слева на право,  когда все они выпол-
няются, то затем будут выполняться сложение и вычитание по поряд-
ку также слева направо.
    Для задания приоритета в компьютере ZX SPEKTRUM  используются
числа от 1 до 16,  например,  операция '*', и '/' имеет приоритет
8,  а '+' и '-'- 6, этот порядок вычисления является жестким,  но
его можно изменить при помощи скобок выражение в скобках вычисля-
ется  первым,  а  затем подставляется в общее выражение как  одно
число.
    Вы  можете  использовать операцию сложения '+' для  сцепления
строк (конкатенции) в выражениях.
    Имя строковой переменной состоит из буквы с последующим  зна-
ком  '$',  имя  управляющей  переменной в FOR-NEXT  цикле  должно
состоять  из  одной буквы,  а имена обычных  числовых  переменных
могут выбираться произвольно,  они могут содержать несколько букв
и цифр, но первой всегда должна быть буква.
    Вы  можете  вставлять в имена пробелы  для  удобства  чтения,
поскольку  компьютер  не считает их частью  имени,  запись  имени
прописными или заглавными буквами не делает их различными.
    Примеры допустимых имен переменных:
                  X
                  T42
                  THIS NAME IS SO LONG THAT I SHALL NEVE
                  TO IT OUT AGAIN WITHOUT
                  MAKING A MISTAKE
                  NOW   WE  ARE  SIX  эти два имени указывают
                  NOWWEARESIX         на одну и ту же переменную
    Примеры не допустимых имен переменных:
                  2001               (начинается с цифры)
                  3 беарс                      --//--
                  м*а*с*х             знак '*'не буква и не цифра
                  FOTHERINGTON-TOMAS  ( содержит знак '-')
    Числа в выражениях могут задаваться в экспоненциальной форме.
Попробуйте выполнить :
                  PRINT 2,34E0
                  PRINT 2,34E1
                  PRINT 2,34E2      и т.д до
                  PRINT 2,34E18
    Помните что оператор PRINT дает лишь 8 значащих цифр числа.
Попробуйте выполнить еще:
                  PRINT 4294967296, 4294967295-429E7
и  вы  увидите,  что  компьютер  может  воспринять  только  число
    Компьютер  ZX SPEKTRUM использует арифметику с плавающей точ-
кой (запятой),  при этом различные части числа (мантиса и  поря-
док) хранятся в отдельных байтах, что приводит к не всегда точным
результатам даже для целых чисел, выполните:
                   PRINT 1E10+1-1E10, 1E10-1E10+1
    1E10 и 1E10+1 не различаются компьютером как разные числа
(1E10 усекается справа)
    Еще один более наглядный пример:
                    PRINT 5E9+1-5E9
погрешность в 5E9 составляет около 1, а с прибавлением 1 фактиче-
ски округлится до 2.
    Числа  5E9+1 и 5E9+2 для компьютера равны,  наибольшее  целое
которое  может воспринять компьютер,  равно 2**32-1  ( 4 294  957
295)
    Строка""  без  единого символа называется пустой  или  нуль
строкой, не путайте ее с пробелом, наберите:
    PRINT "HAVE YOU FINISHED"FINNEGANS WAKE" YET?"
Когда вы нажмете клавишу ENTER, вы получите мерцающий знак вопро-
са, указывающий ошибочное место в строке, когда при интерпретации
всей  строки  компьютер найдет двойную  кавычку,  открывающую  "
FINNEGANS WAKE", то сочтет ее закрывающей кавычкой для строки "
HAVE  YOU FINISHED" и затем не сможет вывести "FINNEGANS WAKE',
здесь  надо помнить специальное правило:  если вы хотите  вывести
кавычки внутри строки,  они должны удваиваться.
Например:
        PRINT"HAVE  YOU  FINISHED"" FINNEGANS WAKE" YET?"
в данном  случае будет выведена только фраза, обрамленная двойными
кавычками:
        "FINNEGANS WAKE"
Глава 8
                  С Т Р О К И   С И М В О Л О В
Краткое содержание: сечения, использование TO
Примечание: эти операции отсутствуют в стандартном бейсике
    Пусть  имеется  строка символов,  тогда ее  подстрокой  будет
некоторая  последовательность  символов  из  этой   строки,   так
"STRING"  является  подстрокой  от  "BIGGEN  STRING",  а  "R
STRING" и "BIG STRING" не является. Существует действие, назы-
ваемое сечением для определения подстрок и которое может применя-
ться к строковым выражениям.
    Общая его форма:
               '  строковое  выражение'( 'начало' то 'конец')
    Следующее выражение истинно:
                "ABCDEF" (2 TO 5)= "BCDE",
    Если  опущено ' начало',  то по умолчанию подразумевается  1,
если - 'конец', то то подразумевается длина всей строки, так:
      "ABCDEF"(TO 5) = "ABCDEF"(1 TO 5 )= "ABCDE"
      "ABCDEF"(2 TO) = "ABCDEF"( 2 TO 6)= "BCDEF"
      "ABCDEF" (TO)  = "ABCDEF"( TO 6  )= "ABCDEF"
    Последнее выражение можно было бы записать и так:
      "ABCDEF"() ,
что тоже верно, можно опускать и слово TO:
      "ABCDEF" (3)= "ABCDEF"( 3 TO 3) = "C "
    'начало  '  и ' конец ' должны находится в  пределах  строки,
иначе будет выдано сообщение об ошибке. Так, выражение
       "ABCDEF "( 5 TO 7 )
вызывает сообщение '3SUBSTRIPT WRONG',  так как 'конец ' превыша-
ет длину строки ( 6 ).
    Если 'начало' больше чем 'конец',  либо обе страницы лежат за
пределами строки, то результатом будет пустая строка:
                 "ABCDEF"( 8 TO 7 ) = " "
                 "ABCDEF"( 1 TO 0 ) = " "
    'начало ' и ' конец ' не могут быть  отрицательными,  иначе
выдается собщение '  INTEGER OUT OF RANGE'.
    Следующая программа иллюстрирует эти правила:
                    10 LET A$ = "ABCDEF "
                    20 FOR N=1 TO 6
                    30 PRINT A$ (N TO 6)
                    40 NEXT N
                    50 STOP
    Можно также присваивать значение подстроке, попробуйте:
                     10 LET A$ = "I Aм THE ZX SPECTRUM "
                     20 PRINT A$
                     30 LET A$ ( 5 TO 8 ) = "******"
                     40 PRINT A$
    Подстрока  A$  (  5 TO 8 ) имеет длину только  в  4  символа,
поэтому  будут использованы только первые четыре  звездочки.  Это
особенность присвоения значения подстроке: длинные данные усекаю-
тся справа, а короткие дополняются пробелами до длины подстройки.
Действие  называется прокрустианом в честь мифического разбойника
прокруста, который своим гостям либо отрубал ноги, либо вытягивал
их если они не подходили по длине к его кровати.
    Если вы теперь выполните:
            LET A$ () = "HELLO THERE" и PRINT A$; " , "
вы увидите что будут выведены дополнительные пробелы, так  'а$()'
считается подстрокой. Для правильного заполнения следует писать:
            LET A$ = "HELLO THERE "
    Можно использовать скобки,  что позволяет вычислять  значение
строкового выражения перед тем, как брать сечение, например:
             "ABC" + "DEF" ( 1 TO 2 ) = "ABCDE "
           ( "ABC" + "DEF")( 1 TO 2 ) = " AB "



СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Реклама - Реклама и объявления...
Введение - Создание Technology insys.
MinskZXNet - все по старому.
Новости - новости от AREAsoft и FLASH inc.
IS-DOS - Рубрика "IS-DOS - начинающим" No 4.

В этот день...   21 ноября