ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 9

                         Функция ENVIRON$
-----------------------------------------------------------------
Назначение  Функция ENVIRON$ отыскивает параметры таблицы среды.  
 
Синтаксис   s$ = ENVIRON$ (parameter string)
            s$ = ENVIRON$ (n)
 
Комментарий    parameter string - это символьное  выражение,  со-
            держащее отыскиваемые параметры;
               n - это целочисленное выражение в диапазоне  от  1  
            до  255.  
               Функция   ENVIRON$   и   соответствующий  оператор 
            ENVIRON используются для конфигурации среды,  которая 
            переходит к программам,  выполняемым  через  оператор 
            SHELL  (подробнее  см.  статью  об  операторе SHELL в 
            настоящем руководстве и о команде SET  в  справочнике 
            DOS).  
               Если  используется  символьный  аргумент,  функция 
            ENVIRON$ возвращает текст, следующий за строкой пара- 
            метра в таблице среды. Заметьте, что функция ENVIRON$ 
            различает прописные и строчные буквы. Если строка па- 
            раметра отсутствует или после знака равенства нет ни- 
            какого текста, возвращается нулевая строка.  
               Если используеться численный вид, функция ENVIRON$ 
            возвращает строку, содержащую n-ный параметр с начала 
            таблицы.  Если n-го параметра нет, возвращается нуле- 
            вая строка.  

Пример      См. пример в статье ENVIRON
 
                           Функция  EOF
-----------------------------------------------------------------
Назначение  Функция EOF возвращает статус "конец файла".  
 
Синтаксис   Y = EOF (filenum)
 
Комментарий    filenum - это значение, описанное при открытии 
            файла (OPEN).  
               EOF  возвращает TRUE (-1),  если в указанном файле 
            достигнут "конец файла";  в противном случае, возвра- 
            щается FALSE (0).  Фуекция EOF  действительна  только 
            для  дисковых файлов,  открытых для последовательного 
            ввода и для коммуникационных файлов. Возврат EOF -1 в 
            случае коммуникационного файла  означает,  что  буфер 
            пустой.  

Пример      Следующий пример считывает информацию с TEXT.DTA пос- 
            ледовательного  файла  до  тех  пор,  пока  не  будет 
            достигнут конец файла: 

              OPEN "TEXT DTA" FOR INPUT AS #1
            top:
                 IF EOF (1) THEN
              PRINT c "records (lines) in file TEXT.DTA"
                 END IF
              INPUT #1, dummy$
              c = c + 1
            GOTO top
   
           или более элегантно:

            OPEN "TEXT.DTA" FOR INPUT AS #1
            WHILE NOT EOF (1)
              INPUT #1, dummy$
              INCR c
            WEND
            PRINT c "records (lines) in file TEXT.DTA" : END
 
                          Функция ERADR
-----------------------------------------------------------------
Назначение  ERADR возвращает адрес самой последней ошибки.
 
Синтаксис   Y = ERADR
  
Комментарий    Функция  ERADR  возвращает  длинное  целочисленное 
            значение,  представляющее  местонахождение самой пос-
            ледней  ошибки.  ERADR  -  это  то  же самое значение 
            счетчика программы, которое было бы напечатано в слу- 
            чае,  если бы не была выполнена  ловушка  ошибок  (то 
            есть, может быть использовано выбором ошибки выполне- 
            ние  меню  Options  для нахождения положения исходной 
            программы оператора, генерирующего ошибку).  
               ERADR используется в качестве последнего обращения 
            в программах с ошибками из-за  неправильного  обраще- 
            ния. Если программа с ошибкой не имеет плана обработ- 
            ки  конкретной ошибки,  можно по крайней мере вывести 
            код ошибки (ERR) и ERADR  на  экран  и  дать  команду 
            сообщать пользователю о ее наличии.  

См.также    ERL     ERR     ERROR    ON ERROR

Пример      ON ERROR GOTO Trap 'установите обработку ошибки 
                               'выполнения
            DIM X%(10)
            FOR I% = 1 TO 10
              READ X%(I%)    'считайте X 10 раз
              PRINT X%(I%)   'только с семью данными
            NEXT I%          'возвращает ошибку вне данных

            'недостаточное количество доступных элементов данных

            DATA 1,2,3,4,5,6,7
            END              'закончить программу

              Следующая программа обработки ошибок печатает номер 
            ошибки (ERR) и адрес (ADD).

          ON ERROR COTO Trap  'при ошибке обратиться к процедуре
                              'Trap -  обработка ошибки 
 
            Trap:
              LOCATE 10,15
            'напечатать сообщение в середине экрана
      PRINT  "An error of type " ERR " has occurred at address"
            ERADR
            LOCATE 11,15
          PRINT "Please note these values and check your manual"
            END              'закончить программу
 
                          Оператор ERASE
-----------------------------------------------------------------
Назначение  Оператор ERASE стирает динамические массивы и восста-
            навливает статические массивы.

Синтаксис   ERASE array name [,array name]...
 
Комментарий    array name -  это имя массива, который  вы  хотите 
            восстановить или переместить.  Заметьте, что с именем 
            массива не должны использоваться пустые скобки.  
              Если имя массива динамическое,  его пространство  в 
            памяти  освобождается  и  имя  массива затем задается 
            вновь с помощью нового оператора DIM.  
              Если  имя  массива  статическое,  стирание  (ERASE) 
            просто  очищает  его  элементы  до  0 (или до нулевой 
            строки для символьных массивов).  

Ограничения    Невозможно стереть (ERASE)  несуществующий  массив 
            или  в  случае динамических массивов массив,  который 
            уже был стерт.  
 
Различия       В ТУРБО БЕЙСИКе статические массивы обрабатываются 
            быстрее динамических массивов.  Интерпретатор  БЕЙСИК 
            работает только с динамическими массивами.  

См.также    CLEAR   DIM  $DYNAMIC   FRE   $STATIC
 
Пример      ON ERROR GOTO ErrorHandler 'установить программу
            PRINT FRE(-1)      'показать доступное простран-
                               'ство массива
                               'обьявить динамический массив,
                               'присвоить ему данные и показать 
                               'доступное пространство массива
            DIM DYNAMIC BigArray(1000)
            BigArray(6666) = 66
            PRINT FRE(-1)
            ERASE BigArray  'переместить динамический массив
            PRINT FRE(-1)   'показать доступное пространство массива
                     'Данный оператор возвратит ошибку выполнения,
                     'если программа вывполняется с проверкой границ.
            PRINT BigArray(6666)
            END             'закончить программу
            ErrorHandler:
            PRINT "An error of type" ERR
            PRINT "has occurred at address" ERADR
            END
 
                       Функции ERDEV, ERDEV$
-----------------------------------------------------------------
Назначение     Функции ERDEV и ERDEV$ возвращают информацию зада-
               ющего  устройства (драйвера).

Синтаксис      Y = ERDEV
               Y$= ERDEV$
 
Комментарий    Когда происходит ошибка в устройстве, целочислен-
            ная  функция ERDEV возвращает инфоромацию об ошибке в 
            наименее значимый байт. Этот байт представляет ошибку 
            кода  INT  24   Наиболее   значимый   байт   включает 
            15,14,13,3,2,1 и 0 биты аттрибута слова устройства.  
              Функция ERDEV  содержит  имя  3  байтов  устройств, 
            предназначенных  для  знаковых  устройств  и  2 - для 
            блочных устройств  (Более  подробно  см.  Техническое 
            руководство- справочник IBM DOS) 

Пример                        'установить обработку ошибок
            ON ERROR GOTO ErrorHandler
            PRINT "Open the door to drive A and press any key..."
            WHILE NOT INSTAT : WEND   'подождать клавишу
                'попытайтесь получить каталог
            FILES "A:\*.*"
                     END           'закончить программу

       ErrorHandle      'программа обработки критических ошибок
                        'показать сообщение об ошибке с указанием
                        'проблемы и источника
            PRINT USING "Critical error ## occurred with &";
                         ERDEV,ERDEV$
            RESUME NEXT
 
                         Функции ERL,ERR
-----------------------------------------------------------------
Назначение     Функции ERL и ERR возврвщают строку  и  код  самой
               последней ошибки.

Синтаксис      Y = ERL      Y = ERR

Комментарий    ERL возвращает номер строки последней ошибки. Если
            ошибка происходит в операторе без номера строки,  ERL 
            возвращает номер ближайшей строки с номером, оперируя 
            в обратном порядке по направлению к началу программы.  
            Если  между  местом  ошибки  и  началом программы нет 
            пронумерованных строк, ERL возвращает 0.  
               Функция  ERR возвращает  номер  последней   ошибки 
            выполнения.  Проверьте ее в программах ловушки ошибок 
            для выполнения кода, соответствующего типу ошибки.  

Примечание     Операторы  ERL,  RESOME  и  RESUME  NEXT  вызывают
            генерирование  компилятором  4-байтового пойнтера для 
            каждого оператора в программе.  
               Это должны  учитывать  программисты,  для  которых 
            важен  размер их генерированного кода.  Использование 
            оператора RESUME  [строка  #]  генерирует  инструкцию 
            одной   операции   перехода.   Обычно,   функция  ERL 
            используется при отладке программ.  
 
Различия       Правила,  касающиеся того на какой стороне реляци-
            онного  оператора  должен  находиться  номер  строки, 
            сопоставляемой  с  функцией  ERL,  неприемлемы.   Это 
            происходит потому, что в Турбо Бейсике нет инcтрукции 
            RENUM.  В Турбо Бейсике также не  применим  результат 
            функции  ERL  интерпритатора Бейсик, когда происходит 
            ошибка во время  выполнения  оператора  DIRECT  MODE.  

См. также   ERARD   ERROR    ON ERROR
 
Пример     'установить обработку ошибки выполнения

            ON ERROR GOTO Trap
            
            DIM X% (10)

            FOR I% = 1 TO 10
            40 READ X% (I%)  'считать X 10 раз
               PRINT X% (I%) 'только с данными Y
            NEXT I%          'возвращает ошибку вне данных
            'недостаточное количество элементов данных
            70 DATA 1,2,3,4,5,6,7
            80 END 'закончить программу
            90 Trap:
          IF  ERL=40 THEN
            RESTORE
            RESUME
          ELSE
                 PRINT "Unknown Error" : END
                       "Неизвестная ошибка"
            END IF

                          Оператор ERROR
-----------------------------------------------------------------
Назначение  Оператор ERROR формирует ошибку выполнения

Синтаксис   ERROR errcode

Комментарий     errcode есть целочисленное выражение от 0 до 255.
            Если  errcode  является предопределенным кодом ошибки 
            выполнения (см.  приложение Е),  тогда оператор ERROR 
            вызывает  такое  поведение  вашей  программы,  как  в 
            случае появления  ошибки.  Это  способствует  отладке 
            программ,  ловушке  ошибок.   Для  определения  ваших 
            кодов ошибок используйте значения errcode, которые не 
            используются Турбо Бейсиком.  Если вы  не  определите 
            процедуру  обработки  ошибок этих новых кодов ошибок, 
            Турбо Бейсик выдаст сообщение:  Error n  at  pgm-ctr: 
            address, где n - это код ошибки, а address - значения 
            в  счетчике  программы  процессора во время появления 
            ошибки.  
Пример
            'Форсировать ошибку неправильного вызова
            'функции из-за плохого ввода
            
            DEF FN func%= (X%)
            IF X% > 65 THEN
         ERROR 5     'вызвать ошибку неправильного вызова функции
            ELSE
              FNfunc%= X%*1000
              END IF
            END DEF

         PRINT FN func(66)  'вызвать ошибку неправильного вызова
                            'функции

                          Оператор EXIT
-----------------------------------------------------------------
Назначение  Оператор EXIT преждевременно оставляет структуру.

Синтаксис   EXIT {SELECT/DEF/FOR/IF/LOOP/SUB}

Комментарий    Оператор EXIT дает вам возможность выйти из cтрук- 
            турного оператора,  процедуры или  определения  функ- 
            ции, не выполнив их до конца.  Тип структуры, к кото- 
            рой  применен оператор EXIT,  должен быть включен как 
            часть оператора EXIT, в соответствии со следующим: 

-----------------------------------------------------------------
       Вариант EXIT           Выходная структура
-----------------------------------------------------------------
       SELECT                 оператор SELECT
       DEF                    определение функции
       FOR                    петля FOR/NEXT
       IF                     блок IF
       LOOP                   петля DO/LOOP или WHILE/WEND
       SUB                    определение процедуры
--------------------------------------------------------------------------

            Использование   EXIT   может   спасти   беспорядочные 
            операторы GOTO.  

Ограничения    Используя оператор EXIT для выхода из функции,  вы 
            должны назначить этой функции результат до выполнения 
            оператора EXIT.  

Пример      'Данная программа демонстрирует все операторы EXIT.
            'Для терминирования выполнения используется как процедура
            'так и функция. Подпрограммы также демонстрируют различные
            'доступные операторы EXIT, используя конструкции LOOP
            'на ряду с SELECT CASE и IF THEN ELSE.

            SUB Controls(Se I%, Dummy %)

            'Операторы EXIT могут использоваться для терминирования
            'конструкции SELECT CASE и IF THEN ELSE.
            'EXIT также терминирует выполнение процедуры

            SELECT CASE Se I%
         CASE 1
            'Используйте выбирающий оператор для передачи пользователю
            'информации о введенном числе
            SELECT CASE Dummy%
            CASE < 0
            PRINT "Number is less the zero"
            'вывести оператор выбора
            EXIT SELECT
            CASE > 0
            PRINT "Number is greater then zero"
            'вывести оператор выбора
            EXIT SELECT
            CASE ELSE
            PRINT "Number is 0"
            END SELECT
            EXIT SUB    'вывести процедуру
         CASE 2
            'исползуйте IF THEN ELSE для выполнения того, что
            'делает SELECT CASE
         IF Dummy % < 0 THEN
            PRINT "Number is less then zero"
         EXIT IF
            ELSE IF Dummy % > 0 THEN
            PRINT  "Number is greated then zero"

         EXIT IF   'вывести если, тогда
            ELSE
            PRINT "NUMBER IS 0"
            END IF
            END SELECT
            PRINT "You selected number 2"
            END SUB
            DEF FN Loops (Set%)
      'Параметр, переходящий к функции указывает, какой EXIT
      'будет выполнен. Каждая структура петли делает то же самое
      'чтобы продемонстрировать как оператор EXIT может быть
      'использован для завершения выполнения петли.
      'Мы также демонстрируем как EXIT может использоваться для
      'вывода функции. EXIT DEF используется для выполнения EXIT
      'из двух первых отборов. Это предотвращает от выполнения
      'оператора печатания.

      'Присвоить значение результату функции
            FN Loops = -1
            SELECT CASE Se I%
                        
                    CASE 1
      'используйте оператор EXIT для выхода из петли вместо того,
      'чтобы закончить ее в норме.
            FOR I% = 1 TO 32767
              PRINT RND (Dummy %)
            EXIT FOR        'вывести петлю для ...
            NEXT I%
            EXIT DEF        'вывести всю функцию
  
                    CASE 2
            'используйте EXIT для выхода из этой петли
            'вместо того, чтобы закончить ее в норме
            DO
            PRINT RND (Dummy %)
            EXIT Loop       'вывести петлю
            Loop
            EXIT DEF        'вывести всю функцию

                    CASE 3
            'используйте EXIT для вывода из этой петли
            'вместо окончания ее в норме
            WHILE 1
            PRINT RND (Dummy %)
            'это то же самое, что и вывод
            EXIT Loop
            WEND       'петля DO
            END SELECT
            PRINT "Yoy executed selection 3"
            END DEF    'закончить определение функции
            'начать главную программу
     'произвести три вызова Loops, выбирая каждую доступную петлю
            PRINT FN Loops (1)
            PRINT FN Loops (2)
            PRINT FN Loops (3)
         INPUT "Enter a number":" Dummy %  'получите ввод пользо-
                                           'вателя
           'выполните Controls, выбирая каждую структуру контроля
        FOR Count % = 1 TO 2
            CALL Controls (Count %, Dummy %)
            CALL Controls (Count %, Dummy %)
        NEXT Count %
            END     'закончить программу

                     Функции EXP,EXP2, EXP10
-----------------------------------------------------------------
Назначение  EXP       возвращает e; 
            EXP10     возвращает 10; 
            EXP2      возвращает 2.,

Синтаксис   EXP:           EXP2:            EXP10:
            Y = EXP (X)    Y = EXP2 (X)     Y = EXP10 (X)

Комментарий    EXP возвращает е в степени х, где х есть численное 
            выражение,  а  е - основание натуральных  логарифмов,   
            приблизительно e=2.718282. Такой же результат вы  по-
            лучите  с  оператором  е  х.  Что вы можете сделать с 
            функцией EXP, так это вычислить само е: е = EXP (1) 
               EXP2 (X) возвращает 2 в  степени  х,  где  х  есть 
            численное  выражение или численная переменная.  Такой 
            же результат вы получите в выражении 2^х.  
               EXP10 (X) возвращает 10 в степени х,  где  х  есть 
            численная переменная или выражение. Такой  же резуль-
            тат вы получите в выражении 10^Х.  
               EXP,   EXP2  и  EXP10  возвращают   результаты   с 
            удвоенной точностью.  
Пример
            FOR I% = 1 TO 10
            PRINT USING "EXP OF ## = #### "; I%,EXP(I%)
            NEXT I%
            END

                          Оператор FIELD
-----------------------------------------------------------------
Назначение     Оператор  FIELD определяет переменные поля с буфе-
            ром файла с произвольной организацией.

Синтаксис   FIELD [#] filenum, width AS string-var
                  [,width AS string-var]...

Комментарий    filenum есть номер открытия файла;  
               width (ширина)  есть количество байтов, выделенных 
            переменной поля, а 
               string-var - это сама переменная поля.  
            
               Оператор FIELD  определяет  преобразование  данных 
            между  символьными  переменными и буфером I/O файла с 
            произвольной выборкой. Будучи однажды использованными 
            в операторе FIELD, эти символьные переменные получают 
            специальный статус "переменные поля". Они присваивают-
            ся  только  используя  RSET  и  LSET при подготовке к 
            записи в указанном файле с произвольной выборкой.  

Ограничения    Идентификатор оператора  FIELD  никогда  не должен 
            использоваться  с левой стороны оператора назначения. 
            Если это произойдет, то идентификатор больше не будет 
            идентифицироваться   с  определениями  поля  файла  с 
            произвольной выборкой.  

См. также   LSET    RSET

Пример      'открыть файл с произвольной выборкой
            OPEN "R", #1, "SYISLD.DTA" ,18
                  'OPEN "FIELD.DTA" FOR OUTPUT AS #1 LEN = 18
            'сделать два определения поля для каждого поля
            FIELD #1, 2 AS Integer $, 4 AS LongInt$,_
                      4 AS SinglePre$, 8 AS DoublePre$
            FIELD #1, 2 AS A$, 4 AS B$, 8  AS D$
            MaxInt% = 32767
                               'записать данные в файл
         FOR I% = 1 TO 5
                    'преобразовать данные и назначить их буферу
                     'до записи его в файл данных
            LSET Integer$  = MKIS(I%)
            LSET LongInt$ = MKL$(I% + CLNG(MaxInt%))
            LSET Singlepre$ = MKS$(CSNG(I% * CSNG(MaxInt%))
            LSET DoublePre$ = MKD$(MaxInt% I%)
            PUT #1,I%
            NEXT I%
                               'считать данные с файла
            FOR I% = 1 TO 5
                                'и показать их на экране
            GET #1, I%
            PRINT CVI(A$), CVL(B$), CVD(D$)
            NEXT I%
            CLOSE #1  'закрыть файл
            END       'закончить программу

                          Оператор FILES
-----------------------------------------------------------------
Назначение  Оператор FILES показывает содержимое каталога (аналог
            команды DIR DOS).

Синтаксис   FILTS [filespec]

Комментарий    filespec  есть символьное выражение, следующее ус-
            ловным  обозначениям  DOS,  оно  может  факультативно 
            включать в себя спецификатор накопителя и  информацию 
            о маршруте.  Если filespec опущен, будут показаны все 
            файлы в текущем каталоге 

               filespec,  как и команда DIR DOS,  может содержать 
            знаки ? и * , например: 

            FILES **.**   -перечисляет все файлы в данном текущем 
                           каталоге; 
    
            FILES **.BAS"- перечисляет  только  исходные  файлы 
                           Турбо Бейсика. 
             
               В конце списка файлов (FILES) ТУРБО БЕЙСИК показы-
            вает  количество свободных байтов на устройстве,  со-
            держащем  текущий  каталог.  Файлы подкаталога указы- 
            ваются суффиксом DIR.  
 
Ограничения    Описание несуществующего накопителя или каталога в 
            операторе FILES вызовет ошибку выполнения.

Пример
    
    INPUT "Enter the drive and directory you would like tolist";_
           Dir$
                            'показать описанный каталог
            FILES Dir$
            END             'закончить программу

                           Функция FIX
-----------------------------------------------------------------
Назначение  Функция FIX усекается до целого числа.

Синтаксис   Y + FIX (numeric expression)
                    (численное выражение)

Комментарий    Функция FIX отбрасывает дробную часть  аргумента и
            возвращает  целочисленную часть  (в отличие от CINT и 
            INT, которые производят округление).  

См. также   CEIL    CINT    INT

Пример      FOR I = 50 TO 52 STEP RND
           PRINT USING "The integer part of ##.## is ##";I,FIX(I)
            NEXT I
            END   'закончить программу

                        Оператор FOR/NEXT
-----------------------------------------------------------------
Назначение  Операторы FOR  и  NEXT  определяют    автоматически
            приращающийся цикл (или отрицательно приращающийся)

Синтаксис  FOR variable = x TO y [step z]
            .
            . statements
            .
            NEXT [variable]...]

Комментарий    variable есть численная переменная, служащая счет-
            чиком цикла, а x, y и z являются численными выражени-
            ями,  определяющими начальные и конечные условия цик-
            ла,  x - начальное значение,  а y - конечное значение 
            счетчика,  z - необязательное значение шага  прираще- 
            ния. 
               Выполнение операторов между FOR и NEXT повторяется.
               С каждым прохождением через цикл значение перемен-
            ной увеличивается на величину шага приращения z. Если 
            z опускается,  пошаговое приращение по умолчанию ста-
            новится равным 1.  Цикл завершается, когда переменная 
            счетчика будет больше или равна y (или,  для  отрица-
            тельного x, меньше или равна y).  
               Циклы  FOR/NEXT  выполняются быстрее всего с цело-
            численными переменными в качестве переменной счетчика 
            и константами x,y и z.  
               Тело цикла полностью пропускается,  если начальное 
            значение  x  больше  y  или,  если  z - отрицательное 
            значение, а x меньше y.  
               Циклы FOR/NEXT  могут  быть  помещены  в  пределах 
            других  циклов  FOR/NEXT (вложение циклов). При вло-
            жениях циклов необходимо следить, чтобы у каждого 
            цикла была своя переменная счетчика и чтобы внутрен-
            ний цикл завершался оператрором NEXT до появления  
            NEXT, завершающего внешний цикл.  
               Пример неправильной организации вложенного цикла:

            FOR n = 1 TO 10     'внешний цикл по n
            FOR m = 1 TO 20     ' внутренний цикл по m
             .
             .
             .
       NEXT n  'ОШИБКА внешний цикл завершен раньше внутреннего
       NEXT m
               Поскольку коды циклов пересекаются, данный цикл не 
            будет компилироваться.  

               Если множественные  циклы  заканчиваются  в  одной 
            точке,  единственный оператор NEXT, содержащий каждую 
            переменную счетчика, будет достаточным: 

            FOR n = 1 TO 10
            FOR m = 1 TO 20
              .
              .
              .
            NEXT m,n

               В  операторе  NEXT   переменная   счетчика   может 
            опускаться,  но  если  вы включите ее,  то это должна 
            быть единственно верная переменная. Например: 

            FOR n = 1 TO 10
              .
              .
              .
            NEXT   'NEXT n будет тоже работать, но не NEXT m

               Несмотря на то, что компилятору все это безразлич-
            но,  расположите операторы между FOR и NEXT двумя или 
            тремя пространствами для структурирования цикла.  
               Для выхода из цикла FOR/NEXT до его завершения ис-
            пользуйте оператор EXIT FOR.  
               Если NEXT появился без предшевствовавшего ему FOR,
            происходит  ошибка  выполнения 1,  NEXT  Without  FOR 
            (NEXT без FOR).

Пример
            FOR I% = 1 TO 10
              PRINT "For loop iteration " I%  'показать интерации
            NEXT I%

            PRINT "Press any key..."    'пауза
            WHILE NOT INSTAT
            WEND
            
      'используйте STEP для отрицательного приращения цикла 
            FOR I% = 50 to 1 STEP -5
                  PRINT "For loop iteration" 45-I%)\ 5
             'обратите внимание на отсутствие параметра next
            NEXT
            END

                           Функция FRE
-----------------------------------------------------------------
Назначение     Функция  FRE  возвращает доступное вашей программе 
            количество свободной памяти.

Синтаксис   Y = FRE( string expression/-1/-2 )

Комментарий    Функция  FRE с  символьным  аргументом  возвращает 
            длинное целое число, представляющее количество свобо-
            дных байтов оперативной  памяти.  FRE(-1)  возвращает 
            число свободных байтов оперативной памяти, отведенных 
            под   массивы  вашей  программы.   FRE(-2)  сообщает, 
            сколько места осталось на стеке.  

Различия       Функция FRE  ТУКБО БЕЙСИКА обеспечивает больше ин-
            формации, чем функция Интерпретатора БЕЙСИК. Оператор 
            FRE  в   интерпретаторе   БЕЙСИК   возвращает   обьем 
            доступной  памяти  в  сегмент  данных БЕЙСИКа:  таким 
            образом вызов FRE(s$) и FRE(0)  возвращают  такое  же 
            количество.  
               Однако,  учитывая,что  ТУРБО  БЕЙСИК  обеспечивает 
            больший обьем памяти для  работы,  его  оператор  FRE 
            имеет  больше  функций.  ТУРБО БЕЙСИК имеет отдельный 
            символьный   сегмент;    таким   образоми,    FRE(S$) 
            возвращает  доступное символьное пространство.  Турбо 
            Бейсик имеет большое  (>64К)  пространство  массивов, 
            поэтому FRE(-1) возвращает доступную память массивов. 
            Турбо Бейсик обеспечивает также процедуру и рекурсию, 
            поэтому FRE(-2) возвращает доступный обьем стека.  
Пример
            ON ERROR GOTO Erroandler 'установить обработку ошибок
            'показать память, доступную в сегментах строки,
            'данных и стека
            PRINT FRE("String Space"),FRE(-1),FRE(-2)

        DIM DINAVIC BigArray(10000) 'обьявить динамический массив
            BigArray(6666) = 66   'назначить ему данные
            'показать память, доступную в сегментах строки,
            'данных и стека
            S$="abc..z"
            PRINT FRE("String Spase"),FRE(-1),FRE(-2)

            ERASE BigArray   'перераспределить динамический массив
            'показать память, доступную в сегментах строки,
            'данных и стека
            S$=""
            PRINT FRE("String Spase"),FRE(-1),FRE(-2)
            'Данный оператор возвращает ошибку выполнения, если
            'программа прогоняется с контролем границ
            PRINT BigFrray(6666)
            END       'закончить программу

            ErrorHandler:
       PRINT "An error of type " ERR " has occurred at address"
               ERADR
            END

                      Оператор  GET (файлы)
-----------------------------------------------------------------
Назначение  Оператор  GET считывает запись с файла c произвольной
            организацией.

Синтаксис   GET [#]filenum[,recnum]

Комментарий    filenum - номер открытия файла; 
               recnum - запись, которую надо считать,  от 1  до  
               16 777 215*(2^24-1).

               Если recnum опускается,  то считывается  следующая 
            запись  (следом за записью, указанной самым последним 
            GET или PUT).  

Пример      'открыть файл с произвольной выборкой
            OPEN "GET.DTA" AS #1 LEN = 18

         'сделать два определения поля для каждого элемента поля
            FIELD #1, 2 AS Integer$, 4 AS LongInt$,-
                      4 AS SinglePre$, 8 AS DoublePre$
            FIELD #1, 2 AS A$, 4 AS B$, 4 AS C$, 8 AS D$

            MaxInt% = 32767

            FOR I% = 1 TO 5   'записать данные в файл
            'преобразовать данные и назначить буфер перед
            'записью в файл данных
            LSET Integer$ = MKI$(I%)
            LSET Integer$ = MKL$(I% + CLNG(MaxInt%))
            LSET Integer$ = MKS$(CSNG(I% * CSNG(MaxInt%)))
            LSET Integer$ = MKD$(MaxInt%-I%)
            PUT #1,I%
            NEXT I%

            FOR I% = 1 TO 5  'считать данные с файла
            GET #1, I%       'показать их на экране
              PRINT CVI(A$), CYL(B$), CVD(D$)
            NEXT I%

            CLOSE #1         'закрыть файл
            END              'закончить программу

                   Оператор  GET (графический)
-----------------------------------------------------------------
Назначение  Оператор  GET  считывает  весь или часть графического 
            экрана в массив.

Синтаксис   GET (x1,y1)-(x2,y2),array

Комментарий    (x1,y1) и (x2,y2) описывают соответственно верхнюю 
            левую и нижнюю правую  границы  зоны  на  графическом 
            экране оператора GET. 
               array - это численный массив.  

               Оператор  GET  и соответствующий ему оператор  PUT 
            используются для считывания, а затем для записи  гра-
            фических образов на экране.  Единственное ограничение 
            в отношении  численного  массива,  используемого  для 
            удерживания данных, считываемых с экрана, это то, что 
            он  должен  быть  достаточно большим для того,  чтобы 
            удержать их.  Используйте для вычисления размера мас- 
            сива,  необходимого  для  удержания данного диапазона 
            экрана, следующую формулу: 

            ByteNecessary = 4 + INT((X * bitsPerPixel + 7)/8) * Y  

            где X и Y представляют собой соответсвенно размеры по 
            горизонтали   и   вертикали    захватываемой    зоны, 
            bitsPerPixel   является  константой,   относящейся  к 
            графическому режиму:  2 для среднего разрешения  и  1 
            для высокого разрешения.  

            -----------------------------------------------------
              Экран                  Биты на растровый элемент
            -----------------------------------------------------
                1                                2
                2                                1
                7                                4
                8                                4
                9                                4
               10                                2
            -----------------------------------------------------

               Например, для сохранения образа среднего  разреше-
            ния 35 растровых элементов  на  45,  вам  потребуется 
            массив в  4 + INT((35 * 2 + 7)/8) * 45 байтов или 409 
            байтов. 
               409 байтов представляют  целочисленный  массив  из 
            205 элементов, таким образом массив, объявленный опе-
            раторром DIM :

                  DIM buffer%(204) 

            будет достаточным.   Помните, что по умолчанию каждый 
            массив содержит нулевой элемент,  так массив  buffer% 
            имеет 205 двухбайтных элементов,  от 0 до 204,  всего 
            410 байтов.  
               ТУКБО  БЕЙСИК  сохраняет  графические   данные   в 
            массиве буфера в следующем формате: 

               buffer%(0):    Количество байт по-горизонтали
               buffer%(1):    Количество байт по-вертикали
               buffer%(2):   }
               .             } Собственно
               .             } графическая 
               .             } информация
               buffer%(204): }

               В результате организации памяти дисплея, оживление 
            основанное на GET и PUT,  происходит быстрее, если вы 

            выберете участки экрана,  примыкающие к границам бай-
            тов.  Для средней разрешающей способности используйте 
            значения X кратные 4; для высокого разрешения - крат-
            ные 8.  
               Основная стратегия использования  GET  и  PUT  для 
            оживления объекта от точки A до точки B заключается в 
            следующем: 

            Draw the object
            GET the object into an array
            position = old location = point A
            DO UNTIL position = point B
          PUT XOR the object at old location  'стереть/построить
               position = position + increment
          PUT XOR the object at position
               Delay if necessary
               old location = position
            LOOP

Пример      'выделить буфер для хранения графических образов

            DIM Buffer%(143)

            'перейти в графический режим средней
            'разрешающей способности

            SCREEN 1
            CIRCLE (16,16),8,2    'нарисовать круг
         GET (0,0)-(31,31),Buffer%  'получить круг
                                    'копировать его 
                                    'по всему экрану
             FOR I% = 0 TO 9
         PUT (I% * 32,100),Buffer%
            NEXT I%
            END         'закончить программу

                          Функция  GET$
-----------------------------------------------------------------
Назначение  Функция  GET$  считывает строку  с  файла открытого в 
            режиме   BINARY.

Синтаксис   GET$ [#] filenum, count, string variable

Комментарий  count  есть целочисленное выражение в диапазоне от 0 
             до  32,767.

               GET считывает счетные байты начиная с текущего по-
            ложения  файла  (которое  может  быть  установлено  с 
            помощью SEEK), с номера файла filenum и назначает его 
            символьной переменной.  Filenum файла должно быть от-
            крыто в режиме BINARY.  После функции  GET$,  текущее 
            положение  файла  будет  продвинуто с помощью счетных 
            байтов.  
               GET$, PUT$ и SEEK обеспечивают альтернативу низко-
            го уровня технике обработки последовательных файлов и 
            файлов с произвольной организацией, которая позволяет 
            вам иметь дело с файлами  на  основе  байт/байт.  

См. также   OPEN      PUT$    SEEK

Пример      SUB Create File   'процедура создания файла
            'GET$  открывает файл и записывает в него 256 знаков 

            LOCAL I%

            'открыть файл для BINARY  I/O

            OPEN  "GETS.DATA" FOR BINARY AS #1

            'записать в него данные

            FOR I% = 0 TO 255
                 PUT$ #1, I%, CHRS(I%)
            NEXT  I%
            END SUB  'закончить процедуру создания файла

        DEF FNReagIt$(Styart%,Size%)  'функция считывания данных
            `GET$ считывает указанное количество данных из файла

            LOCAL TempStr$, Char$, I%

            'поиск для коррекции положения в файле
            SEEK 1, Start%

            'считать байты Size%
            GET$ #$1, Size% TempStr$

            FNReadIt$ = TempStr$
        END DEF     'закончить функцию ReadIt

            CALL CreateFile   'создать файл данных
                              'получить ввод пользователя
          PRINT "Enter the starting point[0...255] and how many"
          PRINT "bytes of data[0...255] yon wish to"
          INPUT "read from the file: ",St%, Sz%

            PRINT FNReadit$(St%, Sz%)  'считать данные

            END  'закончить программу

                         Оператор  GOSUB
-----------------------------------------------------------------
Назначение  Оператор  GOSUB  вызывает подпрограмму.

Синтаксис   GOSUB label

Комментарий    Оперратор GOSUB заставляет ТУРБО БЕЙСИК перескаки-
            вать на оператор с предшествующей меткой,  после пер-
            вой записи его текущего адреса на  стеке.  Выполнение 
            RETURN возвращает управление на оператор, следующий в
            программе непосредственно за GOSUB .  
               Процедуры и функции ТУРБО БУЙСИКА могут  выполнять 
            работу   подпрограммы  с  извлечением  дополнительных 
            пиреимуществ  от  рекурсии,  прохождения  параметров, 
            локальных и статических переменных.  

См. также  DEF FN     SUB     RETURN

Пример      PI# = ATN(1) * 4 'вычисление значения Pi
            Radius! = 55   'объявить переменную с 
                           'одинарной точностью
            GOSUB CalcArea 'переход на подпрограмму

            END            'закончить программу

            'вычислить и показать на экране площадь круга
            СalcArea:
                Area = PI# * Radius^2  'вычислить площадь
                PRINT Area             'показать результат
                RETURN                 'выход из подпрограммы

                          Оператор  GOTO
-----------------------------------------------------------------
Назначение  GOTO посылает выполнение программы к оператору с мет-
            кой.

Синтаксис   GOTO label

Комментарий    Оператор  GOTO  перемещает выполнение программы к 
            коду с меткой.
               GOTO - быстрое и эффективное  программное  устрой-
            ство,  если пользоваться им умеренно.  Если же приме-
            нять  COTO  беспечно,  они  могут "удушить" программу 
            своими кодами,  которые практически невозможно  отга-
            дать  (особенно  по прошествии месяцев или нескольких 
            лет). Современное использование операторов GOTO мини-
            мизировано в практике программирования  подпрограмма-
            ми,  процедурами, функциями и структурными оператора-
            ми,  такими как:   FOR/NEXT,   WHILE/WEND,   DO/LOOP, 
            IF BLOCK и SELECT Оператор  EXIT  тоже  может  помочь 
            сократиь использование GOTO. 

См. также   EXIT 

Пример      X = 0

            Start:     'определите метку
              X = X + 1  'приращение  X
              IF X < 20 THEN  'если X<20, то перейти к PrintOut
                 GOTO  PrintOut
              END IF
            END

            PrintOut:      'показать значение  X
              PRINT "Variable X = "X
              GOTO Start  'вернуться на Start(начало)

                          Функция  HEX$
-----------------------------------------------------------------
Назначение  Функция  HEX$ преобразует число в его шестнадцатирич-
            ный символьный эквивалент.

Синтаксис   s$ = HEX$(numeric expression)
                     (чисоленное выражение)

Комментарий    численное выражение может принимать  значения   от 
            -32,768 до 65,535. Любая дробная часть численного вы- 
            ражения округляется до создания строки. Если аргумент 
            HEX$ отрицательный,  HEX$ возвращает  двузначный  вид 
            числа.  

См. такжке BIN$    OCT$

Пример      PRINT HEX$(65535)
            PRINT HEX$(-1)

                           Оператор  IF
-----------------------------------------------------------------
Назначение  Оператор IF тестирует условия и меняет ход выполнения
            программы в соответствии с заданными условиям.

Синтаксис  

  IF integer expression [,] THEN statement(s) [ELSE statement(s)]
     целочисленное выражение     оператор(ы)       оператор(ы)

Комментарий    Если  целочисленное выражение есть  TRUE (не равно 
            нулю), т.е. соблюдены заданные условия, то выполняет-
            ся оператор(ы),  следующий за THEN и  перед  необяза-
            тельным ELSE.  Если выражение является FALSE (нулевой 
            результат),  т.е.  заданные условия  не  соблюдаются, 
            тогда выполняется оператор,  следующий за ELSE.  Если 
            необязательный ELSE опускается, продолжается выполне-
            ние следующей строки программы.  
               Обычно,     целочисленное    выражение    является 
            результатом,   возвращенным  реляционным  оператором, 
            хотя и не всегда, как видно из примера: 

            IF printerOn THEN LPRINT answer$

               Здесь  оператор LPRINT выполняется в случае,  если 
            "флаговая" переменная printerOn(вкл.) имеет  значение 
            не равное нулю.  
               Перед клавишей ELSE не должно быть двоеточия, нап-
            ример, следующий оператор не будет компилироваться: 

            IF a < b THEN c = d  :ELSE e = f

               Оператор  IF и родственные операторы,  включая те, 
            что идут после ELSE, должны появляться на одной и той 
            же логической строке. Поэтому следующая запись ошибо-
            чна: 

            IF a < b THEN t = 15 : u = 16 : v = 17
                ELSE t = 17 : u = 16 : v = 15

            потому  что  компилятор  рассматривает вторую строку, 
            как новый вид оператора,  не связанный с  предыдущим.  
            Если у вас операторв больше,  чем может вместить одна 
            строка,  вы можете воспользоваться знаком продолжения 
            строки  (низкая  черта) и распростронить единую логи-
            ческую  строку   на   несколько   физических   строк.  
               Например, нижеследующая запись верна: 
  
            IF a < b THEN t = 15 : u = 16 : v = 17_ 
              ELSE t = 17 : u = 16 : v = 15

               Однако   альтернативой  может  быть  использование 
            блочного оператора  IF.  Блочный  оператор  IF  можно 
            также  использовать  для  формирования  многострочных 
            серий операторов IF.  
                                               
Различия       ТУРБО БЕЙСИК  расширил оператор  IF THEN ELSE  для
            олбеспечения многострочных  кодов  в  конструкции  IF 
            THEN ELSE.  ТУРБО БЕЙСИК также обеспечивает операторы 
            ELSEIF и ENDIF для блочного оператора IF.  

См.также    блочный оператор IF     SELECT

Пример      'одна строка IF
            INPUT "Enter a number", X
            IF X > 100 THEN PRINT "Bignumber" ELSE_ 
                            PRINT "SmallNumber"
            END

                       Блочный оператор IF
-----------------------------------------------------------------
Назначение  Блок  IF создает серию операторов  IF.

Синтаксис   IF integer expression[,] THEN
            .
            .  statement(s)
            .
            [ELSEIF integer expression [,] THEN
            .
            . statement(s)]
            .
            .
            [ELSE
            .
            . statement(s)]
            .
            END IF

Комментарий    Блок IF  представляет собой расширение Интерприта-
            тора БЕЙСИК,  он позволяет многократные тесты  многих 
            строк.  
               При выполнении блока операторов IF,  сперва прове-
            ряется  истинность  выражения  в  оператора IF.  Если 
            FALSE(нулевой результат),  каждый из последующих опе- 
            раторов ELSEIF проверется по порядку (операторов ELSE 
            может  быть сколько угодно).  Как только ТУРБО БУЙСИК 
            подтверждает истинность одного из операторов,  он вы- 
            полняет этот оператор, следуя за связанным с ним THEN 
            и перескакивает на этот оператор сразу же по заверше- 
            нии END IF без дальнейших тестов. Этот оператор после 
            необязательного  ELSE  выполняется,  если  ни один из 
            предшествующих тестов не удается.  
               Заметьте,  что после ключевого слова THEN в первой 
            строке блока IF не может быть больше ничего; по этому 
            признаку  компилятор  может  отличить  блок   IF   от 
            обычного оператора IF.  Также помните, что после ELSE 
            ничего нет.  
               Операторы блока IF допускают вложения, т.е.  любой 
            оператор после любого THEN может содержать блоки IF.  
               Операторы блока IF должны  заканчиваться  END  IF.  
            Обратите внимание,  что END IF имеет пространство,  а 
            ELSEIF не имеет.  

 См. также  SELECT

Пример        RANDOMIZE TIMER
              bankroll = 100 : bet = 5 : delayVal = .5
              WHILE NOT INSTAT   'для завершения нажать клавишу
                roll = INT(RND(1) * 6) + INT(RND(1) * 6) + 2
                PRINT STRING$(30,"-")
                PRINT "Сумма наличности =" bancroll
                PRINT roll : DELAY delayVal
                IF roll = 2 OR roll = 3 OR roll = 12 THEN
                  PRINT "Вы проиграли"
                  bancroll = bancroll + bet
                ELSEIF roll = 7 OR roll = 11 THEN
                  PRINT "Вы выиграли !"
                  bancroll = bancroll - bet
                ELSE
                  PRINT "Ваши очки" roll
                  noPoint = -1
                  WHILE noPoint
                    nextRoll : DELAY delayVal
                    IF roll = nextRoll THEN   'вложенный блок IF
                      PRINT "Вы выиграли !"
                      bancroll = bancroll + bet
                      noPoint = 0
                    ELSE IF nextRoll = 7 THEN
                      PRINT "Вы проиграли"
                      bancroll = bancroll - bet
                      noPoint = 0
                    ENDIF
                  WEND              'завершает цикл WHILE noPoint
                ENDIF               'завершает первый блок IF
              WEND                  'конец цикла WHILE NOT INSTAT











Яндекс цитирования