Оператор RANDOMIZE
----------------------------------------------------------------
Назначение RANDOMIZE устанавливает начальное число в генера-
торе псевдослучайных чисел
Синтаксис RANDOMIZE [числовое выражение]
Замечания Если числовое выражение опущено, выполнение
программы останавливается на операторе RANDOMIZE и
пользователь получает запрос на ввод начального
числа:
RANDOM NUMBER SEED?
(начальное число генератора псевдослучайных чисел ?)
О случайных числах
Без задания всякий раз нового начального числа
значения функции RND вовсе не являются случайными;
для данного начального числа RND всегда дает одну и
ту же последовательность значений. Без изменения
начального числа имитация бросания костей будет
приводить к одному и тому же результату всякий раз,
когда запускается программа. Удобным способом
обеспечить уникальность каждого прогона (при
условии, что программа не запускается каждый день
точно в одно и то же время) является задание
начального числа с помощью функции TIMER:
RANDOMIZE TIMER
Другой способ состоит в использовании оператора
высокого разрешения MTIMER (микросчетчик времени),
которым замеряется время, истекшее с момента нажатия
некоторой клавиши в начале программы. Это время
используется для задания начального числа датчика
случайных чисел:
MTIMER
PRINT "Нажмите любую клавишу, чтобы начать..."
WHILE NOT INSTAT : WEND
RANDOMIZE MTIMER
См.также RND
Пример ' инициализация микротаймера
MTIMER
PRINT "Нажать любую клавишу, чтобы начать..."
WHILE NOT INSTAT
WEND
Dummy$ = INKEY$
' установить начальное значение
' датчика случайных чисел
RANDOMIZE MTIMER
FOR I% = 1 TO 5 STEP RND(1.5)
PRINT I%
IF INSTAT THEN STOP
NEXT I%
END 'конец программы
Оператор READ
----------------------------------------------------------------
Назначение Оператор READ загружает переменные значениями
констант из списка оператора DATA
Синтаксис READ переменная [, переменная] ...
Замечания переменная может быть числовой или символьной
READ загружает заданные переменные значениями
констант, следующих за служебным словом DATA. Во
время выполнения программы оператор READ считывает
константы из оператора DATA в том порядке, в
котором они появляются. Наиболее распространенной
ошибкой, связанной с использованием операторов DATA
и READ, является несовпадение типов константы и
соответствующей переменной; например, попытка
загрузить значение символьной константы в числовую
переменную. В этом случае появляется синтаксическая
ошибка (ошибка выполнения). Сообщение об ошибке не
появляется, если, наоборот, вы пытаетесь загрузить
числовую константу в символьную переменную. Если
вы пытаетесь считать оператором READ больше
констант, чем объявлено в вашей программе
операторами DATA, ТУРБО БЕЙСИК регистрирует ошибку
выполнения 4, Out of Data (не хватает данных).
Оператор RESTORE позволяет заново считать
константы, заданные первым или каким-то другим
оператором DATA.
См.также RESTORE
Пример см. DATA
Функция и оператор REG
----------------------------------------------------------------
Назначение REG возвращает или задает заданное значение в ре-
гистровом буфере
Синтаксис Функция:
y = REG (номер-регистра)
Оператор:
REG номер-регистра, значение
Замечания Номер-регистра задает процессорный регистр согласно
следующей таблице
----------------------------
номер регистра регистр
----------------------------
0 флаги
1 AX
2 BX
3 CX
4 DX
5 SI
6 DI
7 BP
8 DS
9 ES
----------------------------
Если номер регистра меньше 0 или больше 9, то
возникает ошибка выполнения 5 Illegal Function Call
(неверный вызов функции). Значение - это числовая
переменная или выражение в диапазоне от 0 до 65536.
Функция REG возвращает значение выбранного элемента
в регистровом буфере. Оператор REG, наоборот, за-
гружает выбранный элемент в регистровом буфере зна-
чением заданной целой переменной. Оператор и функ-
ция REG используются для передачи информации от
одной программы, написанной на ассемблере к другой.
Содержимое регистрового буфера загружается в про-
цессорные регистры непосредственно перед вызовами
ABSOLUTE или INTERRUPT. Обратная загрузка осущест-
вляется непосредственно после возврата. В каждый
данный момент времени содержимое регистрового буфе-
ра соответствует процессорным регистрам на момент
выхода из последней внутренней программы.
Пример DEFINT a-z
DIM a(100)
DIM fillRoutine(10)
FillRoutine (0) = &HF2FC
FillRoutine (1) = &HCBAA
REG 1,-1
REG 3, 101 -2
REG 9, VARSEG(a(0))
REG 6, VARPTR(a(0))
DEF SEG = VARSEG(FillRoutine(0))
PRINT a(I)
WHILE NOT INSTAT:WEND
FillAdr = VARPIR(FillRoutine(0))
CALL ABSOLUTE FillAdr '(REG)
PRINT a(I)
END
Оператор REM
-----------------------------------------------------------------
Назначение REM отделяет комментарии в программе
Синтаксис REM комментарий
Замечания Комментарий - это любая последовательность симво-
лов. В отличие от комментариев в интерпретаторе
БЕЙСИКА, комментарии ТУРБО БЕЙСИКА появляются толь-
ко в исходной версии программы и, соответственно,
никоим образом не влияют на ее выполнение.
Внимание! комментарии могут появляться в одной
строке с другими оператороми, но комментарий непрe-
менно должен быть последним оператором в строке.
Так, например, следующая последовательность опера-
торов не будет выполняться:
REM теперь сложим числа : a = b+c,
так как компилятор не сможет отделить конец коммен-
тария от начала следующего оператора.
Правильным вариантом записи такой последовательности
операторов будет:
a = b+c : REM теперь складываем числа...
Другим обозначением комментария является знак
апострофа ('). Если используется апостроф, нет
необходимости отделять двоеточием предшествующий
комментарию оператор. Не следует использовать
апостроф для отделения комментария от оператора
DATA, пользуйтесь вместо этого последовательностью
:REM. Компилятор игнорирует комментарии, они
не занимают места в объектных программах, поэтому
вы можете их щедро использовать.
Пример REM эта программа демонстрирует оператор REM
PRINT "эта программа демонстрирует оператор REM"
REM "END"
END
DATA 1, 2, 3, I'm return : REM комментарий
'заметьте, что одиночный апостроф в данном случае
'не считается разделителем комментария
Оператор RESET
-----------------------------------------------------------------
Назначение RESET закрывает и делает скрытыми для программы все
дисковые файлы
Синтаксис RESET
Замечания RESET эквивалентен оператору CLOSE без аргументов
Оператор RESTORE
-----------------------------------------------------------------
Назначение RESTORE позволяет повторно читать константы, задан-
ные в операторе DATA.
Синтаксис RESTORE [метка]
Замечания Наличие метки необязательно. Метка указывает
оператор DATA, который будет использоваться
следующим оператором READ. Оператор RESTORE
вынуждает ТУРБО БЕЙСИК заново устанавливать счетчик
операторов DATA, так что следующий оператор READ
будет повторно использовать данные первого (или
заданного меткой) оператора DATA.
См.также READ
Пример READ A$, B$ ' чтение данных
RESTORE ' восстановление указателя
READ C$, D$ ' чтение еще некоторых данных
PRINT A$, B$, C$, D$ ' вывод данных
RESTORE MoreData ' установка указателя на первый
' оператор DATA после метки
READ A$, B$ ' чтение и вывод данных
PRINT A$, B$
END 'конец программы
' определение данных
DATA CAT, DOG
MoreData:
DATA MONKEY, GNU
Оператор RESUME
-----------------------------------------------------------------
Назначение RESUME перезапускает выполнение после обработки
ошибки
Синтаксис RESUME [{0 | NEXT | метка}]
Замечания RESUME или RESUME 0 возобновляют выполнение с
оператора, вызвавшего ошибку.
RESUME метка возобновляет выполнение с помеченого
оператора.
Если оператор RESUME выполняется не в
подпрограмме, обрабатывающей ошибку, возникает
ошибка выполнения 20: RESUME WITHOUT ERROR.
Внимание! При наличии операторов ERL, RESUME и
RESUME NEXT, компилятор генерирует 4-байтовый
указатель для каждого оператора программы. То есть,
программисты, для которых важен размер программного
кода, генерируемого компилятором, должны принять
это к сведению. Использование RESUME [строка #]
генерирует простую инструкцию перехода. ERL обычно
используется в целях отладки так, что это
обстоятельство не слишком важно.
Пример ' установить обработку ошибок
ON ERROR GOTO ErrorHandler
' этот оператор вызывает ошибку выполнения
I# = LOG(-1)
PRINT "произошло прерывание по ошибке"...
END
ErrorHandler:
PRINT "ошибка" ERR "в операторе" ERL
RESUME NEXT
Оператор RETURN
-----------------------------------------------------------------
Назначение RETURN возвращает управление из подпрограммы в
вызвавшую ее программу
Синтаксис RETURN [метка]
Замечания метка указывает строку, на которую, по желанию, вы
можете передать управление.
RETURN прерывает выполнение подпрограммы и
передает управление оператору, непосредственно
следующему за вызовом подпрограммы (GOSUB).
Необязательная метка предназначена для
облегчения возвращения из подпрограмм обработки
прерываний и ошибок. RETURN метка очищает адрес на
вершине стека и выполняет оператор перехода (GOTO)
на оператор, идентифицируемый меткой. В некоторых
версиях БЕЙСИКА эта операция выполняется с
помощью оператора POP и GOTO.
Выполнение RETURN без предварительного
обращения GOSUB вызовет неожиданные и трудно
обнаруживаемые ошибки. Мы советуем включить тест
стека (Stacktest) в спускающемся меню "вариантов"
для обнаружения подобных ошибок.
См.также GOSUB , GOTO
Пример См. пример к оператору GOSUB
Функция RIGHT$
------------------------------------------------------------------
Назначение Функция RIGHT$ возвращает n правых символов
заданной строки
Синтаксис s$ = RIGHT$ (символьное выражение, n)
Замечания n - целое выражение, задающее число возвращаемых
знаков символьного выражения; n должно быть в
диапазоне от 0 до 32767. RIGHT$ возвращает
указанное число знаков своего символьного
аргумента, начиная с самого правого символа. Если
n больше длины строки символьного выражения,
возвращается все символьное выражение целиком. Если
n=0, RIGHT$ возвращает пустую строку.
См.также LEFT$ , MID$
Пример RIGHT$ ("JOHN JONES",5)
Оператор RMDIR
-----------------------------------------------------------------
Назначение RMDIR удаляет каталог (аналогично команде RMDIR DOS)
Синтаксис RMDIR маршрут
Замечания маршрут - стандартная строка описания маршрута.
RMDIR удаляет каталог, соответствующий маршруту.
Этот оператор эквивалентен команде RMDIR DOS (за
исключением того, что служебное слово оператора не
может быть сокращено). На оператор распространяются
те же ограничения, а именно, что маршрут задает
существующий, пустой каталог. Если каталог не
является пустым, возникает ошибка выполнения 75
Path/File Access Error (ошибка доступа к
маршруту/файлу).
Пример ' установить обработку ошибок
ON ERROR GOTO ErrorHandler
INPUT "Введите имя удаляемого каталога : ",D$
RMDIR D$ 'удаление каталога
END 'конец программы
ErrorHandler:
PRINT "Ошибка " ERR " в операторе " ERADR
RESUME NEXT
Функция RND
-----------------------------------------------------------------
Назначение RND возвращает псевдослучайное число
Синтаксис y = RND [(числовое выражение)]
Замечания RND возвращает псевдослучайное число от 0 до 1
с двойной точностью.
Числа, генерируемые с помощью RND, на самом
деле, вовсе не являются случайными, а являются
результатом применения алгоритма псевдослучайного
преобразования к начальному значению (к значению
"посева"). Если даны одни и те же начальные
значения, алгоритм RND ТУРБО БЕЙСИКА производит
одинаковые цепочки "случайных" чисел.
Действие функции RND зависит от необязательного
числового значения, заданного в качестве аргумента.
Если аргумент не задан или положителен, RND
генерирует следующее число в последовательности
случайных чисел, зависящей от начальной установки.
Если аргумент равен 0, RND повторяет число,
сгенерированное функцией последним. Отрицательный
аргумент задает новую начальную установку датчика
случайных чисел так,что последующие вызовы функции
RND без аргумента или с положительным аргументом
будут возвращать новую последовательность значений.
В общем, используйте RANDOMIZE TIMER один раз в на-
чале программы для того, чтобы оператор RND выдавал
новую последовательность значений. Не следует ис-
пользовать нулевое или отрицательное значения аргу-
мента за исключением тех случаев, когда вам не
нужны вызываемые или особые последствия. Для того,
чтобы получить случайное целое от 1 до n включи-
тельно, можно использовать следующий способ:
randomNo% = INT(RND * n) + 1
Еще лучше создать функцию:
DEF FNRndInt% (x%) = INT (RND * x%) + 1
См.также RANDOMIZE
Пример FOR I = 1 TO 10 STEP 1.34
PRINT USING "###.##^^^^"; RND(I)
NEXT I
END
Оператор RSET
-----------------------------------------------------------------
Назначение RSET перемещает символьные данные в буфер файла с
произвольным доступом
Синтаксис RSET переменная-поле = символьное-выражение
Замечания Операторы RSET и LSET пересылают символьные данные в
переменную-поле, которая определена в предшест-
вующем операторе FIELD и принадлежит буферу файла с
произвольным доступом. Если длина символьного вы-
ражения меньше, чем длина переменной-поле, оператор
RSET выполняет выравнивание по правому знаку, до-
полняя поле пробелами. Это означает, что пробелы
добавляются перед первым знаком символьного
выражения с тем, чтобы функция LEN (переменная-поле)
возвращала то же значение, которое указано в соот-
ветствующем операторе FIELD. LSET выполняет вырав-
нивание по левому знаку, дополняя поле пробелами
(пробелы добавляются после последнего знака символь-
ного выражения). RSET может также использоваться
для форматирования выводимых на экран или на принтер
данных:
a$ = space$(20)
RSET a$ = "Right-just"
PRINT a$
См.также LSET
Пример OPEN "RSET.DTA" AS #1 LEN=18
' определение имен и размеров полей
FIELD 1, 2 AS FileInt$, 4 AS FileLong$,_
4 AS FileSngl$, 8 AS FileDbl$
' присвоение некоторых значений полям и
' занесение записи в файл с произвольным доступом
FOR Count% = 1 TO 5
RSET FileInt$ = MKI$(Count%)
RSET FileLong$ = MKL$(Count%^2)
RSET FileSngl$ = MKS$(Count%^2.1)
RSET FileDbl$ = MKD$(Count%^4.4)
PUT 1, Count%
NEXT Count%
CLOSE 1 'закрытие файла
END 'конец программы
Оператор RUN
------------------------------------------------------------------
Назначение RUN перезапускает программу
Синтаксис RUN [имя-файла]
Замечания Оператор RUN без аргумента перезапускает с начала
программу на ТУРБО БЕЙСИКЕ. Все числовые переменные
(включая элементы массива) устанавливаются в 0, а
всем символьным переменным присваивается пустая
строка.
Имя файла, если оно задано, - это символьное
выражение, представляющее файл типа .TBC или .EXE,
(которые являются результатом команды Chain или EXE
из меню "варианты", устанавливающей режимы работы
компилятора). Если в имени файла не указано
расширение, то по умолчанию предполагается .TBC;
если расширение указано, оно и используется. При
запуске или связывании в .EXE файл следует в явном
виде присоединить .EXE к имени файла.
Пример ' компиляция этой программы в файл, названный
' MASTER.EXE
' ввод имени SLAVE в ответ на подсказку
INPUT "Введите имя запускаемой программы:", N$
RUN N$ 'прогон заданной программы
END 'конец программы
' компиляция этой программы в SLAVE.TBC
' по команде "компиляция в цепной файл"
' в меню "Варианты"
PRINT "Теперь мы в программе SLAVE"
END 'конец программы
Функция SCREEN
-----------------------------------------------------------------
Назначение SCREEN возвращает ASCII-код символа, находящегося
в указанной строке и позиции
Синтаксис y = SCREEN (строка, позиция [, вариант])
Замечания строка и позиция - целые выражения в диапазоне от 1
до 25 и от 1 до 80, соответственно.
Функция SCREEN в текстовом режиме - двойник
функции POINT в графическом режиме. SCREEN
возвращает информацию о символе в заданной позиции
указанной строки; например, SCREEN 1,1 возвращает
ASCII-код символа в первой позиции первой строки.
Если необязательный параметр "вариант" равен
1, SCREEN возвращает атрибут, хранимый в заданной
позиции (строка, колонка), а не код символа.
Пример LOCATE 10,10
PRINT "ASCII"
' ASCII-код для A - 65,
' по умолчанию атрибут экрана (белый на черном)
' равен 7
PRINT SCREEN (10,10), SCREEN (10,10,1)
END 'конец программы
Оператор SCREEN
-----------------------------------------------------------------
Назначение: SCREEN устанавливает режим изображения на экране.
Синтаксис: SCREEN [режим] [, [флажок-цвета]] _
[, [активная-страница]] [, [видимая-страница]]
Замечания: Режим - целочисленное выражение в диапазоне от 0 до
12. Характеристики экрана после его установки определя-
ются следующей таблицей.
---------------------------------------------------------------
Режим Действие
---------------------------------------------------------------
0 Текстовый режим без изменения числа знаков в строке
1 Графический режим со средним разрешением (320х200
пикселов), число знаков в строке равно 40
2 Графический режим с высоким разрешением (640х200
пикселов), число знаков в строке равно 80
7 Для адаптера EGA режим со средним разрешением, допускает
16 цветов, число пикселов на экране - 320х200
8 Для адаптера EGA режим с высоким разрешением, допускает
16 цветов, число пикселов на экране - 640х200
9 Усиленный режим с высоким разрешением для адаптера EGA с
усиленным дисплеем; допускает от 4 до 16 цветов
(в зависимости от памяти на EGA) из палитры, состоящей
из 64 цветов, число пикселов на экране - 640х350
10 Режим с высоким разрешением для адаптера EGA с монохром-
ным монитором, допускает 4 атрибута и 640х350 пикселов
11 Черно-белый режим с наивысшим разрешением для адаптеров
VGA или MCGA, число пикселов - 640х480
12 Режим с наивысшим разрешением для VGA, допускает 16 цве-
тов из палитры с 64 цветами, число пикселов - 640х480
---------------------------------------------------------------
Флажок цвета - управляет тем, будет ли информация
о цвете передана монитором с совмещенным управлением
цветовыми лучами, которые присоединены к композитным
видео-портаm цветных графических адаптеров. В тексто-
вом режиме значение FALSE (0) отменяет использование
цвета. В графическом режиме со средним разрешением,
значение FALSE включает цвет.
Активная страница - целое выражениев диапазоне от
0 до 7, которое управляет тем, куда записывается
текст, формируется оператором PRINT или другими ко-
мандами записи на экран. Этот аргумент допустим толь-
ко для CGA и для EGA при установке режима 0, 7, 8, 9
и 10. (См. в главе 4 раздел о графике).
Видимая страница - определяет какая из
виртуальных страниц (от 0 до 7) выводится на экран в
данный момент. Этот аргумент допустим только для
CGA и для EGA при установке режима 0, 7, 8, 9 и 10.
Выполнение оператора SCREEN запускает новый режим
и стирает экран. Наивысший приоритет присваевается
белому цвету, а фону и границе - черный цвет.
Если в операторе SCREEN устанавливается такой же
режим, как и текущий, ничего не происходит.
Если текущий режим - текстовый и в операторе
SCREEN указаны только аргументы активной и
виртуальной страниц, то корректируются в соответствии
с запросом только дисплейные "страницы".
Пример.
'переключение в графический режим среднего разрешения
'с отменой цвета
SCREEN 1,0
CIRCLE (160,100),50,2
WHILE NOT INSTAT:WEND
A$=INKEY$
'переключение в текстовый режим с отменой цвета,
'назначение активной и видимой страницам страницы с
'номером 0
SCREEN 0,0,0,0
PRINT "Активная страница - 0"
WHILE NOT INSTAT:WEND
A$=INKEY$
'сделать активной страницу 2
SCREEN ,,2
PRINT "Активная страница - 2"
WHILE NOT INSTAT:WEND
A$=INKEY$
'переключение в другой графический режим
SCREEN 2
CIRCLE (320,100),100,1
END
Оператор SEEK
-------------------------------------------------------------
Назначение: SEEK устанавливает позицию в двоичном файле для
функций GET$ и PUT$.
Синтаксис: SEEK [#] номер-файла, позиция
Замечания: SEEK объявляет, что следующий GET$ или PUT$ над
файлом с заданным номером начнут свои действия с
байта, номер которого указан в аргументе "позиция".
Для определения текущей позиции, установленной
для двоичного файла оператором SEEK, следует
использовать функцию LOC.
Пример
SUB CreateFile
'открытие файла и запись в него 256 символов
LOCAL I%
'открытие файла типа BINARY для ввода/вывода
OPEN "SEEK.DTA" FOR BINARY AS #1
'запись данных в файл
FOR I%=1 TO 256
PUT$ 1,CHR$(I%-1)
NEXT I%
END SUB 'конец подпрограммы CreateFile
DEF FNReadIt$(START%,SIZE%)
'функция читает указанные данные из файла
LOCAL TEMPSTR$,CHAR$,I%
'установка заданной позиции в файле
SEEK 1,START%
I%=1
TEMPSTR$=""
'считывание указанных данных - не более, чем до конца
'файла
WHILE (NOT EOF(1)) AND (I%<=SIZE%)
GET 1,I%,CHAR$
TEMPSTR$=TEMPSTR$+CHAR$
INCR I%
WEND
'присвоение функции результата
FNReadIt$=TEMPSTR$
END DEF 'конец функции ReadIt
' создание файла данных
CALL CreateFile
'запрос пользователю на ввод
PRINT "Введите начало [1..256] и число байтов данных"
PRINT "(не более, чем 256-начало), которые"
INPUT "Вы хотите прочитать из файла:",ST%,SZ%
PRINT FNReadIt$(ST%,SZ%) 'чтение данных
END 'конец программы
Оператор SELECT
-------------------------------------------------------------
Назначение: Оператор SELECT (вместе с оператором CASE)
формирует операторы проверки общего назначения.
Синтаксис:
SELECT CASE выражение
CASE список-тестов
.
. операторы
.
[CASE список-тестов
.
. операторы
. ]
[СASE ELSE
.
. операторы
. ]
END SELECT
Замечания: Список тестов - это один или несколько тестов,
разделенных запятыми, которые выполняются над
выражением. Выражение может быть символьным или
числовым, однако, все тесты в списке из отдельного
блока оператора SELECT должны быть одного и того же
типа.
Тесты, которые могут выполняться в предложении
CASE, включают проверки на равенство, неравенство,
больше, меньше, диапазон (от-до).
Примеры включения тестов в предложение CASE:
CASE <b 'отношение
CASE 14 'равенство (предполагается =)
CASE b TO 90 'диапазон
CASE b,14 'два теста проверки равенства
CASE b TO 90,14 'комбинация (неявное ИЛИ)
В предложении CASE с несколькими тестами между
ними выполняется неявная логическая операция ИЛИ.
Если один или несколько тестов в предложении
удовлетворяются (TRUE), выполняются все операторы
вплоть до следующего предложения CASE. После
выполнения последнего оператора, управление
передается оператору, следующему за END SELECT.
Оператор SELECT является мощным средством
сравнения переменной с некоторым числом её возможных
значений и соответствующей обработки. Его
использование может иногда помочь построить более
ясную исходную программу, чем могло бы получиться с
использованием многократных операторов IF.
См. также END SELECT , EXIT , CASE
Пример.
INPUT "Введите число",X
SELECT CASE X
CASE <10
PRINT "Маленькое число"
CASE <1000
PRINT "Среднее число"
CASE 1111,2222,3333,4444
PRINT "Скучное число"
CASE ELSE
PRINT "Просто какое-то большое число"
END SELECT
Функция SGN
-------------------------------------------------------------
Назначение: SGN определяет знак числового выражения
Синтаксис: Y=SGN(числовое-выражение)
Замечания: Если числовое выражение положительно, SGN
возвращает +1. Если числовое выражение равно 0, SGN
возвращает 0. Если числовое выражение отрицательно,
SGN возвращает -1.
При сочетании функции SGN с операторами ON/GOTO
или ON/GOSUB можно получить разветвление с тремя
выходами (подобное аналогичному разветвлению языка
FORTRAN):
ON SGN(BALANCE)+2 GOTO
INTHERED,BREAKINGEVEN,INTHEMONEY
См. также: ON/GOSUB , ON/GOTO
Пример.
'установить X и Y в 0
X=0:Y=0
'определение пользователем значений X и Y
INPUT "Введите пожалуйста значение для X";X
INPUT "Введите пожалуйста значение для Y";Y
'оператор ON по SGN значения X*Y
'GOSUB на соответствующую подпрограмму
ON SGN(X*Y)+2 GOSUB MINUS,ZERO,PLUS
END 'конец программы
MINUS:
PRINT "Вход для отрицательного значения":RETURN
ZERO:
PRINT "Вход для нулевого значения":RETURN
PLUS:
PRINT "Вход для положительного значения":RETURN
Оператор SHARED
-------------------------------------------------------------
Назначение: SHARED объявляет в процедурах или функциях
разделяемые (глобальные) переменные.
Синтаксис: SHARED список-переменных
Замечания: SHARED объявляет, что переменные, указанные через
запятую в списке переменных, являются глобальными для
всей программы, а не локальными по отношению к
включающей их процедуре или поределению функции. Это
дает возможность процедуре или функции организовать
доступ к переменным без передачи их в качестве
параметров. Оператор SHARED может появляться только в
определениях функций или процедур и должен быть
указан до первого выполняемого оператора
соответствующего определния.
Для того, чтобы объявить массив как переменную
SHARED, принадлежащую процедуре или функции,
нужно включить его идентификатор с пустыми скобками в
cписок переменных - нет необходимости и не следует
заново определять размерность массива.
Необъявленные переменные в определениях функций
по умолчанию считаются SHAREВ, но не следует
полагаться на неизменность этого в будущих версиях
компилятора. Желательно точно объявлять класс
переменных, появляющихся в функциях или процедурах
(LOCAL, STATIC, SHARED).
См. также: LOCAL , STATIC
Пример.
DIM ARRAY$(5)
DEF FNDUMMY$
SHARED ARRAY$()
FNDUMMY$=ARRAY$(0)
END DEF 'конец функции FNDUMMY
ARRAY$(0)="Это работает на меня"
PRINT FNDUMMY$
END 'конец программы
Оператор SHELL
-------------------------------------------------------------
Назначение: SHELL загружает и выполняет подчиненный процесс.
Синтаксис: SHELL [строка-параметр]
Замечания: Строка-параметр - это символьное выражение, со-
держащее резидентную команду DOS или имя выполняемой
.COM, .EXE или .BAT программы ("подчиненного процес-
са"). Может содержать или не содержать параметры, ко-
торые Вы можете передать подчиненному процессу.
Если строка-параметр опущена, никакая программа
не загружается. Вместо этого появляется подсказка
DOS, в ответ на которую можно ввести стандартную
команду DOS, например, команды DIR, COPY. Для
возврата в программу следует набрать EXIT на
подсказку DOS.
Если строка-параметр указана, то выполняется
заданная программа. После её завершения, выполнение
Вашей программы продолжается со следующего оператора.
См. также: ENVIRON , ENVIRON$ , SHELL в руководстве по DOS
Пример.
PRINT "Теперь Вы будете использовать оператор SHELL"
PRINT "ТУРБО БЕЙСИКА для выполнения команды"
PRINT "DIR/W DOS для просмотра файлов"
PRINT "на Вашем диске"
DELAY 3 'ждать 3 секунды
'использование SHELL для временного выхода из ТУРБО
'БЕЙСИКА и выполнение команды DIR с параметром /W
SHELL "DIR /W"
'вывод в нижней строке экрана
LOCATE 21,1
PRINT "Теперь возвращаемся в ТУРБО БЕЙСИК"
END 'конец программы
Функция SIN
-------------------------------------------------------------
Назначение: SIN возвращает значение тригонометрического синуса.
Синтаксис: y=SIN(числовое-выражение)
Замечания: Числовое выражение представляет угол, заданный в
радианах. (О радианах см. в описании функции ATN).
SIN возвращает результат с двойной точностью.
См. также: ATN
Пример.
B$="Borland's TURBO BASIC"
CENTER=(79-LEN(B$))/2
'SIN(THETA) возвращает периодическую
'последовательность значений, изменяющуюся
'в диапазоне от -1 до 1 так, что TABVALUE всегда
'находится между -CENTER и CENTER
THETA=0.
WHILE THETA < 100
TABVALUE=CENTER*SIN(THETA)
PRINT TAB(CENTER+TABVALUE+1); B$
THETA=THETA+.1
WEND
END 'конец программы
Оператор SOUND
-------------------------------------------------------------
Назначение: SOUND генерирует тон заданной частоты и длитель-
ности
Синтаксис: SOUND частота, длительность
Замечания: Частота - это целое выражение, представляющее
желаемый уровень в диапазоне от 37 до 32767 герц.
Длительность - это выражение с плавающей точкой,
которое управляет длиной тона, измеряемой 18.2 раз в
секунду. Соответственно, значение длительности 36
соответствует примерно 2 секундам. Длительность может
изменяться в диапазоне 0.0015 до 65535 (один час).
Оператор SOUND не останавливает выполнения
программы. Если SOUND встречается в программе,
начинается исполнение требуемого тона, а выполнение
программы продолжается. Если встречен следующий
оператор SOUND и его параметр длительности равен 0,
то предыдущий SOUND выключается. В противном случае,
когда поарметр длительности не равен 0, ТУРБО БЕЙСИК
ждет пока не завершится предыдущий звук для того,
чтобы начать следующий.
Оператор SOUND лучше использовать для создания
специальных эффектов (например, сирен, щелкания и
свиста), а не для музыки.
Ограничения: Обратите внимание, что оператор SOUND заново
инициализирует микротаймер MTIMER.
См. также: PLAY
Пример.
'установить длину музыкального буфера равной 800 байт
$SOUND 100
'8 байт на 1 ноту
'использование SOUND для создания звуковых эффектов
'имитация переключения скоростей
'первая скорость
FOR I=150 TO 175
SOUND I,2
NEXT I
'вторая скорость
FOR J=125 TO 152
SOUND J,1.5
NEXT J
'третья скорость
FOR K=100 TO 127
SOUND K,1.25
NEXT K
Функция SPACE
-------------------------------------------------------------
Назначение: SPACE$ возвращает строку, состоящую из пробелов
Синтаксис: s$=SPACE$(счетчик)
Замечания: Счетчик - это положительное целое выражение в
диапазоне от 0 до 32767, которое задает число
пробелов, возвращаемых функцией.
SPACE$ - одно из мощных средств форматирования
текстов, имеющихся в ТУРБО БЕЙСИКЕ.
См. также: LSET , PRINT USING , RSET , SPC , STRING$ , TAB
Пример.
'резервирование пробелов для A$
A$=SPACE$(42)
'запись строки из 42 символов
B$="ЭТА СТРОКА СОСТОИТ ИЗ СОРОКА ДВУХ СИМВОЛОВ"
'то же самое с помощью клавиши "ПРОБЕЛ"
C$=" "
'печать длины A$, B$ и C$
PRINT LEN(A$),LEN(B$),LEN(C$)
PRINT
PRINT "Как Вы можете видеть, используя SPACE$"
PRINT "A$ может быть дано то же значение, что и C$"
END
Функция SPC
-------------------------------------------------------------
Назначение: SPC пропускает N пробелов (используется в
операторе PRINT).
Синтаксис: PRINT SPC(N)
Замечания: N - целое выражение в диапазоне от 0 до 255.
Как и родственная функция TAB, SPC может быть
использована только в списке выражений операторов
PRINT, INPUT и PRINT#. SPC(n) выводит n пробелов. Не
следует путать функции SPC и SPACE$.
Если N больше ширины строки, определенной
оператором WIDTH, функция SPC выводит число
пробелов равное (N mod ширина).
Если SPC появляется в конце списка выражений с
точкой с запятой или без неё, возврат каретки не
выполняется.
См. также: TAB , WIDTH
Пример.
'с использованием SPC вывод слов "BOYS" и "GIRLS"
'с промежутком 40 пробелов и подчеркивание
'с помощью функции STRING$
PRINT SPC(5) "BOYS" SPC(40) "GIRLS"
PRINT SPC(5) STRING$(4,61) SPC(40) STRING$(5,61)
FOR I=1 TO 5
READ BOY$
READ GIRL$
'вывод имен мальчиков и девочек в соответствующих
'колонках
PRINT SPC(5) BOY$ SPC(40) GIRL$
NEXT I
END 'конец программы
DATA "John","Ann"
DATA "Mark","Eve"
DATA "Paul","Elizabeth"
DATA "Tony","Sue"
Функция SQR
-------------------------------------------------------------
Назначение: SQR возвращает значение квадратного корня.
Синтаксис: Y=SQR(числовое-выражение)
Замечания: Числовое выражение больше или равно нулю.
SQR вычисляет квадратный корень с использованием
алгоритма, который работает быстрее, чем вычисление
корня возведением в степень 0.5 (то есть вычисление
Y=SQR(X) занимает меньше времении, чем Y=X^0.5 .
При попытке извлечения квадратного корня из
отрицательного числа возникает ошибка выполнения 5
Illgal function call (неверный вызов функции).
SQR возвращает значение с двойной точностью.
Пример.
'ТАБЛИЦА КВАДРАТНЫХ КОРНЕЙ
'разметка двух колонок
PRINT "NUMBER" TAB(10) "SQUARE ROOT VALUE"
PRINT
FOR N=1 TO 10
'использование функции TAB для вывода значения
'корня в нужной колонке, вычисление квадратного
'корня с помощью функции SQR
PRINT N; TAB(15) SQR(N)
NEXT N
END
Оператор STATIC
-------------------------------------------------------------
Назначение: STATIC объявляет статические переменные в
процедуре или функции.
Синтаксис: STATIC список-переменных
Замечания: Оператор STATIC, использование которого допустимо
только в определениях процедур или функций, объявляет
что переменные (разделенные запятыми в списке
переменных) имеют в памяти фиксированные адреса, а не
базируются в стеке. Идентификатор, связанный со
статичной переменной, известен только в заключающей
его процедуре или функции, то есть переменные в
других частях программы и остальные локальные
переменные могут иметь те же имена.
Оператор STATIC должен быть указан в определениях
функций или процедур до любого выполняемого
оператора. Для того, чтобы объявить массив как
статическую переменную в процедуре или функции,
следует включить его идентификатор с пустыми скобками
в список переменных, а затем установить размерность
массива в следующем операторе.
В отличие от локальных переменных, статические
переменные не меняют своего значения между вызовами
процедур или функций. Они инициализируются
единственный раз при запуске программы.
См. также: LOCAL , SHARED
Пример.
'объявление STATIC-процедуры со статическими
'локальными переменными
SUB DUMMY STATIC
'переменная
STATIC I%
INCR I%
PRINT I%
END SUB 'конец процедуры DUMMY
I=16
'два вызова процедуры
CALL DUMMY
CALL DUMMY
PRINT I
END 'конец программы
Функция STICK
-------------------------------------------------------------
Назначение: STICK возвращает информацию о позиции джойстика.
Синтаксис: Y=STICK(вариант)
Замечания: Вариант - это целое выражение в диапазоне от 0 до
3, действие которого определяется в соответствии со
следующей таблицей:
-----------------------------------------------------
Вариант Действие
-----------------------------------------------------
0 Возвращает Х-координату джойстика А
1 Возвращает Y-координату джойстика A
2 Возвращает Х-координату джойстика B
3 Возвращает Y-координату джойстика B
-----------------------------------------------------
Обратите внимание, что интерфейс джойстика
требует, чтобы до чтения координат любого джойстика
процесс чтения был запущщен оператором STICK(0).
См. также: STRIG
Пример.
'опрос джойстиков для определения их
'текущей позиции
WHILE NOT INSTAT
LOCATE 15,15
PRINT STICK(0),STICK(1),STICK(2),STICK(3);
WEND
END 'конец программы
Оператор STOP
-------------------------------------------------------------
Назначение: STOP останавливает программу.
Синтаксис: STOP
Замечания: STOP прекращает выполнение программы и возвращает
управление операционной системе (или ТУРБО БЕЙСИКУ, в
зависимости от того, откуда она была запущена).
Оператор END выполняет ту же функцию, но является
более предпочтительным.
Отличия: В отличие от программ на интерпретируемом БЕЙСИКЕ,
если программа в ТУРБО БЕЙСИКЕ остановлена оператором
STOP, её выполнение не может быть продолжено
оператором CONTINUE.
См. также: END
Пример.
DO 'запуск бесконечного цикла
IF INSTAT THEN STOP 'завершение при нажатии клавиши
LOOP
END 'конец программы
Функция STR$
-------------------------------------------------------------
Назначение: STR$ возвращает символьный эквивалент числа.
Синтаксис: S$=STR$(числовое выражение)
Замечания: STR$ преобразует числовую переменную или
выражение в строку, то есть функция STR$ возвращает
то, что Вы увидели бы на экране, если бы выполнили
оператор "PRINT числовое выражение". Если числовое
выражение больше 0, STR$ дополняет его лидирующим
пробелом; например STR$(14) возвращает строку из трех
символов, первый из которых - пробел.
Обратной к функции STR$ является функция VAL,
преобразующая символьную строку в числовое значение.
См. также: VAL
Пример.
'присвоим A% числовое значение
A%=6789
'используем STR$ для преобразования числа
A$=STR$(A%)
PRINT A%,A$
'проверим, имеет ли A% то же значение, что и A$
IF A%=VAL(A$) THEN
PRINT "STR$ и VAL исправно работают"
END IF
END
Функция STRIG
-------------------------------------------------------------
Назначение: STRIG возвращает состояния клавиш джойстика.
Синтаксис: Y=STRIG(вариант)
Замечания: Функция STRIG возвращает информацию о триггере
джойстика в соответствии со значением варианта.
Вариант - это целое числовое выражение, управляющее
действием функции STRIG в соответствии со следующей
таблицей:
---------------------------------------------------------
Вариант Действие
---------------------------------------------------------
0 Если после последнего вызова STRIG(1)
была нажата клавиша 1 джойстика А, STRIG
возвращает -1, в противном случае - 0.
1 STRIG возвращает -1, если клавиша джойс-
тика А нажата в данный момент, иначе - 0.
2 Если после последнего вызова STRIG(3)
была нажата клавиша 1 джойстика В, STRIG
возвращает -1, иначе - 0.
3 STRIG возвращает -1, если клавиша 1 джойс-
тика В нажата в данный момент, иначе - 0.
4 Если после последнего вызова STRIG(5)
была нажата клавиша 2 джойстика А, STRIG
возвращает -1, иначе - 0.
5 STRIG возвращает -1, если клавиша 2 джойс-
тика А нажата в данный момент, иначе - 0.
6 Если после последнего вызова STRIG(7)
была нажата клавиша 2 джойстика В, STRIG
возвращает -1, иначе - 0.
7 STRIG возвращает -1, если клавиша 2 джойс-
тика В нажата в данный момент, иначе - 0.
---------------------------------------------------------
До выполнения вызовов функции STRIG следует раз-
решить проверку клавиши джойстика с помощью оператора
STRIG ON.
Для чтения позиции джойстика используйте функцию
STICK.
См. также: STICK
Пример.
См. пример к оператору STRIG.
Оператор STRIG.
-------------------------------------------------------------
Назначение: STRIG управляет проверкой событий, связанных с
клавишами джойстика.
Синтаксис: STRIG (ON | OFF | STOP)
Замечания: Оператор STRIG ON включает проверку событий,
связанных с триггером, так, что могут выполняться
запросы функций STRIG и обработка прерываний
подпрограммой, заданной оператором ON STRIG.
STRIG OFF отключает проверку соответствующих
событий.
STRIG STOP отключает реакцию на события,
связанные с триггером, но сохраняет их в памяти так,
что при последующем ваполнении STRIG ON немедленно
возникает прерывание.
См. также: ON STRIG
Пример.
'включает проверку события
STRIG(0) ON
STRIG(1) ON
STRIG(4) ON
STRIG(6) ON
'опрашивает состояние события для проверки
'была ли нажата клавиша
WHILE NOT INSTAT
LOCATE 1,1
PRINT STRIG(0),STRIG(1),STRIG(2),STRIG(3)
PRINT STRIG(4),STRIG(5),STRIG(6),STRIG(7)
WEND
END
Функция STRING$
-------------------------------------------------------------
Назначение: STRING$ возвращает строку, состоящую из заданного
числа повторений указанного символа.
Синтаксис:
S$=STRING$(счетчик,{значение | символьное выражение})
Замечания: Счетчик и значение - целые выражения, счетчик
может меняться в диапазоне от 1 до 32767, значение -
от 0 до 255.
STRING$ с числовым аргументом вызвращает
символьную строку, составленную из одинаковых
символов, ASCII-код которых равен значению, а их
число равно счетчику. STRING$ с символьным аргументом
возвращает строку, состоящую из первых символов
символьного выражения, число которых равно счетчику.
STRING$(n,32), STRING$(n," ") и SPACE$(n)
приводят к одному и тому же результату - возвращают
строку из n пробелов.
Пример.
'STRING$ и TAB строят прямоугольник
'использование 40 знаков равенства (=) для
'построения верхней грани прямоугольника, затем
'печать
CLS
TOP$=STRING$(40,61)
PRINT TOP$
'использование 1-секундной задержки для того,
'чтобы можно было увидеть, как строится прямоугольник
DELAY 1
'стороны строятся с помощью цикла
FOR I=1 TO 5
PRINT TAB(1) "=" TAB(40) "="
DELAY 1
NEXT I
DELAY 1
'нижняя грань строится также как и верхняя
PRINT TOP$
LOCATE 4,16
PRINT "середина"
DELAY 1
'курсор перемещается за пределы прямоугольника
LOCATE 20,1
END 'конец программы
Операторы SUB/END SUB, SUB INLINE
-------------------------------------------------------------
Назначение: Операторы SUB/END SUB и SUB INLINE определяют
процедуру (подпрограмму).
Синтаксис:
SUB идентификатор [(список-параметров)]
[ LOCAL список-переменных ]
[ STATIC список-переменных ]
[ SHARED список-переменных ]
.
. операторы
.
[ EXIT SUB ]
END SUB
Для SUB INLINE:
SUB имя-процедуры INLINE
Замечания: Идентификатор - это уникальное имя, связанное с
процедурой, которое должно соответствовать соглашени-
ям об именах меток и переменных.
Список параметров - это необязательная последова-
тельность формальных параметров, разделяемых запяты-
ми. Параметры, используемые в списке аргументов, слу-
жат только для определения процедуры, они не имеют
никакого отношения к другим переменным с теми же име-
нами в программе.
SUB и END SUB отделяют и дают имя группе операто-
ров, называемых процедурой (или подпрограммой). Вызов
процедуры для выполнения осуществляется оператором
CALL. Процедуре можно, при необходимости, передать
параметры по значению и по имени (по ссылке).
Встроенные (INLINE) подпрограммы на языке ассемб-
лера используют ту же вызывающую последовательность,
что и обычные процедуры. Например:
CALL имя-процедуры [(список-параметров)]
SUB имя-процедуры INLINE
$INLINE список-байтов
$INLINE "имя-СОМ-файла"
END SUB
Произвольное количество операторов $INLINE может
быть задано в любом порядке. Единсвенное ограничение
- использование в одной процедуре не более 16 файлов
СОМ.
Обратите внимание, что список параметров не
задается в операторе SUB.
Список байтов состоит из констант и выражений,
равных целому в диапазоне от 0 до 255, разделенных
запятыми (обычно, для байтовых значений используется
шестнадцатеричные коды).
Возвраты из процедур (RETURN) не являются
необходимыми как в коде на ассемблере, так и в конце
процедур SUB. За этим следит компилятор. (Для более
детальной информации см. приложение С "Интерфейс с
языком ассемблера".)
Определения процедур и ход выполнения программы
-----------------------------------------------
Место определения процедур в программе не имеет
значения. Независимо от того, где будет использована
процедура, она может быть определена в 1-ой или
1000-й строке программы. Вам нет нужды направлять ход
программы через процедуру на этапе инициализации -
компилятор найдет Ваше определение, где бы оно ни
находилось.
Кроме того, выполнение программы не может
случайно "попасть" в процедуру, в отличие от
подпрограммы. Что касается выполняемой ветви
программы, определения функций и процедур являются
невидимыми. Например:
CALL PRINTSTUFF
SUB PRINTSTUFF
PRINT "Напечатано из PRINTSTUFF"
END SUB
При выполнении этой, состоящей из 4 строк,
программы сообщение появится только один раз, так как
PRINTSTUFF вызывается один раз в первой строке.
К определению процедур следует относиться как к
изолированным островкам программного кода, нельзя
входить или выходить из них операторами GOTO, GOSUB,
или RETURN. Внутри определений, однако, эти операторы
допустимы.
Обратите внимание, что определения функций и
процедур не должны быть вложенными, то есть, нельзя
определить процедуру или функцию внутри другой
процедуры или функции (хотя определение процедуры или
функции может содержать вызовы других процедур или
функций).
Параметры массивы.
------------------
Параметры, являющиеся массивами, объявляются
путем указания в скобках числа размерностей массива,
а не его длины.
Например, оператор
SUB CALCARRAY(A(2),SIZDIM1,SIZDIM2)
объявляет, что CALCARRAY предполагает три аргумента:
двумерный массив с одинарной точностью и две
скалярные переменные с одинарной точностью. Обычно
эти скалярные переменные используются для передачи
размеров массива по двум его измерениям.
Объявление локальных переменных.
--------------------------------
Для того, чтобы объявить в процедуре локальные
переменные, следует до любого выполняемого оператора
в определении использовать оператор LOCAL. Например,
оператор
LOCAL A%,B#,BIGARRAY%()
создает три локальные переменные, скалярные перемен-
ные A% и B# (целую и с двойной точностью, соответ-
ственно) и целочисленный массив BIGARRAY%.
Затем, должна быть установлена нужная размерность
массива:
DIM DYNAMIC BIGARRAY%(1000)
Локальные переменные-массивы должны быть
динамическими. Они автоматически освобождают память,
когда процедура завершается.
Статические и разделяемые переменные.
-------------------------------------
По умолчанию, переменные, появляющиеся внутри
описаний процедур, являются локальными. Однако, в
связи с тем, что это соглашение может измениться,
следует затратить усилия на явное определение каждой
переменной, используемой в процедуре.
Для описания переменных, являющихся глобальными
по отношению к основной части программы, используется
оператор SHARED.
В случаях, когда важно, чтобы переменные не
теряли своего значения при каждом вызове процедуры,
используйте для их объявления оператор STATIC.
Описание процедуры должно заканчиваться операто-
ром END SUB, который логически возвращает управление
на оператор, непосредственно следующий за оператором
вызова CALL. Чтобы выйти из процедуры не из её конца,
а из какого-либо другого места, используется оператор
EXIT SUB.
См. также: $INLINE , CALL , EXIT SUB , LOCAL , SHARED , STATIC
Пример.
'объявление массива чисел
DIM ARRAY(1)
SUB TESTPROCEDURE (I%,L&,S!,D#,E,A(1))
'выводятся значения каждого
'параметра, переданного процедуре
PRINT I%;L&;S!;D#;E;A(0)
END SUB
INTEGER%=1
LONGINT&=2
SINGLEPRE!=3
DOUBLEPRE#=4
ARRAY(0)=5
CALL TESTPROCEDURE(INTEGER%,LONGINT&,SINGLEPRE!, _
DOUBLEPRE#,INTEGER%^2,ARRAY())
END 'конец программы
Оператор SWAP
-------------------------------------------------------------
Назначение: SWAP обменивает значения двух переменных.
Синтаксис: SWAP перем1, перем2
Замечания: Перем1 и перем2 - две переменные одного типа. При
попытке обмена значений переменных разных типов
(например, символьной и целой или с одинарной и
двойной точностьтю) возникает ошибка компиляции 475
Type Mismatch (несоответствие типов).
SWAP удобен, так как простой обмен значений в
двух последовательных операторах присваивания не
решает задачи:
А=В: В=А
К моменту выполнения второго присваивания,
переменная А уже содержит другое значение. Выполнение
такой операции без помощи оператора SWAP потребует
временную переменную и ещё один оператор
присваивания:
TEMP=A: A=B: B=TEMP
Пример.
'задание значений A% и B%
A%=15: B%=17
'печать значений каждой переменной в одной строке
PRINT TAB(8) "значение 'A%' равно:"A%_
TAB(42)"значение 'B%' равно:"B%
PRINT
'обмен значений переменных с помощью SWAP
SWAP A%,B%
'печать новых значений под старыми
PRINT "значение 'A%' теперь равно:";A%_
TAB(34)"значение 'B%' теперь равно:";B%
END
Оператор SYSTEM
-------------------------------------------------------------
Назначение: SYSTEM завершает программу.
Синтаксис: SYSTEM
Замечания: SYSTEM завершает программу и возвращает
управление операционной системе (или ТУРБО БЕЙСИКУ в
зависимость от того, откуда она запущена). Оператор
END, выполняющий ту же функцию, является более
предпочтительным.
См. также: END , STOP
Пример.
'ANSWER равен 5
ANS%=5
FOR I=1 TO 10
INPUT "Введите, пожалуйста, число от 1 до 10";X%
'если пользователь угадал ответ, выйти из цикла и
'похвалить
IF X%=ANS% THEN GOTO REWARD
'спросить у пользователя, хочет ли он сделать ещё
'одну попытку
INPUT "Хотите ли Вы попробовать ещё раз (Y/N)":X$
'если пользователь не захочет пробовать ещё раз,
'выйти из программы
IF UСASE(X$)<>CHR(89) THEN SYSTEM
NEXT I
REWARD:
PRINT
PRINT "Вы угадали!"
END
Функция TAB
-------------------------------------------------------------
Назначение: TAB устанавливает метку табуляции на заданную
позицию выводимой строки (используется только в
операторах PRINT).
Синтаксис: PRINT TAB(n)
Замечания: n - целочисленное выражение в диапазоне от 1 до
255.
Также, как и функция SPC, TAB может
использоваться только в списке выражений операторов
PRINT, LPRINT и PRINT#. Используйте TAB для
выравнивания граф с данными. Функцис ТАВ заставляет
процедуры печати ТУРБО БЕЙСИКа осуществлять вывод с
n-ой позиции текущей строки. Если текущая позиция
курсора больше n (например, PRINT TAB(20), когда
курсор находится в 30-й колонке), то ТУРБО БЕЙСИК
пропускает строку и перемещает курсор в n-ю позицию
следующей сторки.
Если ТАВ появляется в конце списка выражений
оператора PRINT с последующей точкой с запятой или
без неё, ТУРБО БЕЙСИК не выводит возврат каретки; то
есть после ТАВ подразумевается точка с запятой.
См. также: LPRINT , PRINT , PRINT# , SPC
Пример.
'эта программа читает список друзей и
'номеров телефонов, а затем выводит их на
'экран с помощью PRINT и TAB
PRINT
PRINT TAB(5) "ИМЯ" TAB(40) "ТЕЛЕФОН"
PRINT
FOR I=1 TO 5
READ FRIEND$
READ PHONE$
'вывод данных в тех же позициях, что и заголовка
PRINT TAB(5) FRIEND$ TAB(40) PHONE$
NEXT I
END
DATA "John Blaze","423-4598"
DATA "Ann Span", "335-2343"
DATA "Bill Write","668-9834"
DATA "Mark Jones","425-5593"
DATA "Dan Moore", "438-4593"
Функция TAN
-------------------------------------------------------------
Назначение: TAN возвращает значение тригонометрического тангенса.
Синтаксис: Y=TAN(числовое-выражение)
Замечания: Числовое выражение - это угол, заданный в
радианах. О радианах см. описание оператора ATN.
TAN возвращает результат с двойной точностью.
См. также: ATN , COS , SIN
Пример.
DEFDBL A-Z
'установка значения PI# с помощью функции
'арктангенса ATN
PI=ATN(1)*4
'вывод значения PI#
PRINT PI
'PI, деленное на 4 радиана, равно 45 градусам
'использование тригонометрической функции тангенса
PRINT TAN(PI/4)
END
Системная переменная TIME$
-------------------------------------------------------------
Назначение: TIME$ читает или устанавливает системное время.
Синтаксис: Считывание времени:
S$=TIME$
Установка времени:
TIME$=символьное-выражение
Замечания: Системная переменная TIME$ содержит 8-символьную
строку, представляющую время на системных часах в
формате hh:mm:ss, где hh - часы (в военном формате,
от 0 до 23), mm - минуты, ss - секунды. TIME$ не
будет хранить точное время, если при последней
загрузке системы DOS на компьютере часы не были
правильно установлены.
Присвоение значения переменной TIME$ устанавлива-
ет системные часы. Для этого необходимо построить
символьное выражение, содержащее текущее время в во-
енном формате (24 часа), и затем присвоить его пере-
менной TIME$. Минуты и секунды можно опустить. Напри-
мер:
TIME$="12" 'устанавливает часы на 12 часов дня
TIME$="13:01" 'устанавливает часы на час и минуту
TIME$="13:01:30" 'устанавливает часы ещё на 30
'секунд
TIME$="0:01" 'устанавливает часы на минуту
'после полуночи
Если значения часов, минут или секунд выходят за
пределы допустимых диапазонов (например, число минут
равно 61), возникает ошибка выполнения 5 Illegal
Function Call (неверный вызов функции).
С помощью функции TIMER можно определить число
секунд, прошедших с момента загрузки системы.
Пример.
'включение проверки времени
TIMER ON
'вывод текущего времени по системным часам
PRINT "текущее время";TIME$
'новая установка времени
INPUT "Введите новое время (0-23)";ANS$
'установка нового значения
TIME$=ANS$
'вывод нового значения
PRINT "новое время равно ";TIME$
END
Функция TIMER
-------------------------------------------------------------
Назначение: TIMER возвращает время в секундах, прошедшее
после полуночи.
Синтаксис: Y=TIMER
Замечания: Функция TIMER не имеет аргументов и возвращает
число секунд, прошедших после полуночи в виде
значения одинарной точности с плавающей запятой с
разрешением около одной десятой секунды. Если
системное время не переустанавливалось после
последней загрузки (либо с помощью команды DOS TIME,
либо через иситемную переменную TIME$ ТУРБО БЕЙСИКа),
функция TIMER возвращает число секунд, прошедших с
момента последней загрузки системы.
См. также: MTIMER
Пример.
TIME$="12"
PRINT USING"после полуночи прошло ##### секунд";TIMER
END
Оператор TIMER
-------------------------------------------------------------
Назначение: TIMER управляет проверкой событий, связанных с
таймером.
Синтаксис: TIMER {ON | OFF | STOP }
Замечания: TIMER управляет проверкой событий, связанных с
таймером, то есть TIMER определяет, нужно ли
передавать управление подпрограмме, заданной в
операторе ON TIMER по прошествии указанного
количества секунд.
TIMER ON включает проверку событий по таймеру.
TIMER OFF выключает их. TIMER STOP отключает
прерывания по событиям, связанным с таймером, но
запоминает их так, что при последующем выполнении
оператора TIMER ON, немедленно возникает прерывание.
См. также: ON TIMER
Пример.
'установка обработки события
ON TIMER(1) GOSUB UpdateClock
'включение проверки событий
TIMER ON
WHILE NOT INSTAT: WEND
END
'конец программы
UpdateClock:
SaveX%=CSRLIN 'сохранение позиции курсора
SaveY%=POS(0)
LOCATE 24,36
PRINT TIME$;
LOCATE SaveX%,SaveY%
'восстановление позиции курсора
RETURN
Команды TRON и TROFF
-------------------------------------------------------------
Назначение: TRON и TROFF включают и выключают трассировку
выполняемой программы.
Синтаксис: Включить трассировку:
TRON
Выключить трассировку:
TROFF
Замечания: TRON переводит программу в режим отладки, при
котором номера строк исходного текста, метки
операторов, имена процедур и функций по мере
выполнения очередного оператора выводятся в окне
трассировки. TROFF выключает режим отладки.
При выполнении программы в текстовом режиме ТУРБО
БЕЙСИКа трассировка номеров срок, меток, имен
процедур и функций воспроизводится в окне
трассировки.
Находясь в режиме трассировки, используйте Alt-F9
для переключения трассировки и выполнения, и
наоборот. Для выполнения отдельного шага на следующую
строку, метку, имя процедуры или функции нажмите
Alt-F10.
Отличия: В отличие от Интерпретатора БЕЙСИКа, в ТУРБО
БЕЙСИКе работой команд TRON и TROFF управляет их
физическое местоположение в исходном тексте
программы, а не положение в выполняемой ветви
программы. Рассмотрим, например, следующую программу:
10 GOTO 30
20 TRON
30 X=Y+2
40 TROFF
50 END
При выполнении этой программы Интерпретатор БЕЙСИКа
никогда не включит трассировку, что касается команды
TRON в строке 20, то она просто не существует. С
другой стороны, ТУРБО БЕЙСИК принимает решение о
включении/выключении трассировки во время компиляции
и считает, что трассировка включена для всех
операторов, стоящих после команды TRON. Таким
образом, при запуске программы в ТУРБО БЕЙСИКе в окне
трассировки появится:
[30][40]
Пример.
'присвоение значений X, Y, Z
10 X=0: Y=1: Z=2
20 GOTO 40
30 TRON
'при выполнении программы выводятся номера
'строк 20, 30 и 40, а не их содержимое
40 X=Y+Z
'после выключения трассировки выводится значение Х
50 TROFF
60 PRINT X
70 END
Функция UBOUND
-------------------------------------------------------------
Назначение: UBOUND возвращает наибольшее допустимое значение
границы (наибольший индекс) для заданной размерности
массива.
Синтаксис: N=UBOUND(массив(размерность))
Замечания: Размерность - это целое число от 1 до числа
измерений массива, для которого ищется наибольший
индекс.
Для нахождения наименьшего индекса используется
функция LBOUND.
См. также: LBOUND , OPTION BASE
Пример.
'задание нижней и верхней границ массива
DIM ARRAY%(1900:2000)
'вывод значений массива
FOR INDEX%=LBOUND(ARRAY%(1)) TO UBOUND(ARRAY%(1))
PRINT "элемент массива (";INDEX%;") равен";_
ARRAY%(INDEX%)
NEXT INDEX%
END
Функция UCASE$
-------------------------------------------------------------
Назначение: UCASE$ возвращает строку, состоящую только из
прописных букв.
Синтаксис: S$=UCASE$(символьное-выражение)
Замечания: UCASE$ возвращает строку, эквивалентную
символьному выражению, за исключением того, что все
строчные алфавитные символы в символьном выражении
заменяются на прописные.
См. также: LCASE$
Пример.
PRINT UCASE$("TB or not TB...");
Функция VAL
-------------------------------------------------------------
Назначение: VAL возвращает числовой эквивалент строки.
Синтаксис: Y=VAL()
Замечания: Функция VAL преобразует символьный аргумент в
числовое значение. Если символьное выражение
начинается с числовых знаков (0 - 9, +, -,..., Е, D),
но содержит и нечисловые, то функция VAL возвращает
числовое значение подстроки, предшествующей первому
нечисловому символу. Если символьное выражение
начинается с нечислового символа, VAL возвращает 0.
Лидирующие пробелы или другие неотображаемые на
экране знаки (например, табуляция) игнорируются.
Функция VAL часто используется в подпрограммах
ввода, выдающих запрос пользователю на ввод
символьных данных. Функция VAL преобразует при
необходимости данные в числовые значения без
опасения, что числовым переменным будут присвоены
нечисловые значения и появится сообщение об ошибке
?Redo From Start (повторите сначала).
См. также: STR$
Пример.
'строка типа адреса
A$="34 N.Main St."
'строка без цифр
B$="Правильно, тридцать четыре"
'цифры и символы
C$="+3.4eb"
'цифры с лидирующим пробелом
D$=" 123 go"
'вывод получаемых с помощью VAL значений
PRINT VAL(A$),VAL(B$),VAL(C$),VAL(D$)
END
Функция VARPTR
-------------------------------------------------------------
Назначение: VARPTR возвращает адрес переменной.
Синтаксис: Y=VARPTR(переменная)
Замечания: Переменная может быть любой числовой или
символьной переменной, или элементом массива.
VARPTR возвращает смещение адреса в памяти, где
хранится переменная. Такая адресная информация иногда
называется указателем (pointer); например, о
выражении VARPTR(X) говорится, что оно возвращает
значение "указателя на Х".
В связи с тем, что в программах на ТУРБО БЕЙСИКе
используется расширенная модель памяти, для полного
определения адреса переменной требуется ещё и функция
VARSEG. (VARSEG возвращает сегментную часть адреса.)
VARPTR наиболее часто используется для того,
чтобы обеспечить подпрограмме на языке ассемблера
доступ к ячейке памяти.
При использовании VARPTR для получения смещения
строки или массива помните, что функция возвращает
смещение дескриптора строки или массива, а не данных.
См. в приложении С "Интерфейс с языком ассемблера"
описание форматов дескрипторов строк и массивов и
карту распределенияпамяти в момент выполнения.
См. также: VARSEG
Пример.
B%=55
DEF SEG=VARSEG(B%)
ADDRESS%=VARPTR(B%)
PRINT PEEK(ADDRESS%)
END
Функция VARPTR$
-------------------------------------------------------------
Назначение: VARPTR$ возвращает указатель переменной в
символьном формате.
Синтаксис: S$=VARPTR$(переменная)
Замечания: Переменная может быть любой числовой или
символьной переменной, или элементом массива.
VARPTR$ возвращает указатель переменной в
символьном формате и используется, в основном, для
включения имен переменных в командную строку
операторов PLAY и DRAW.
См. также: DRAW , PLAY , VARSEG
Пример.
SCREEN 1
HOUSE$="G20 G5 E20 F20 H5 D20 L30"
DRAW HOUSE$
DRAW "BE3"
DRAW "P1.3"
FOR I%=1 TO 280 STEP 40
DRAW "M="+VARPTR$(I%)+",40"
DRAW HOUSE$
NEXT I%
END
Функция VARSEG
-------------------------------------------------------------
Назначение: VARSEG возвращает адрес сегмента переменной.
Синтаксис: y=VARSEG(переменная)
Замечания: Переменная может быть любой числовой или
символьной переменной, или элементом массива.
В связи с тем, что в программах на ТУРБО БЕЙСИКе
используется расширенная модель памяти, для полного
определения адреса переменной требуется ещё и функция
VARPTR.
VARSEG возвращает числовое значение в диапазоне
от 0 до 65535. Для получения адреса переменной
следует использовать VARSEG совместно с VARPTR c
тем, чтобы оператор CALL мог сообщить подпрограмме
на языке ассемблер, где в памяти находится аргумент,
который она должна обрабатывать.
Программы на ТУРБО БЕЙСИКЕ размещают все одиночные
(не являющиеся массивами) переменные в отдельном
сегменте, длина которого может быть в пределах до
64К. Таким образом, VARSEG для всех одиночных
переменных заданной программы всегда будет возвращать
одно и то же значение. В действительности, это
значение адреса сегмента устанавливается по умолчанию
для операторов, управляемых DEF SEG (как например,
PEEK и POKE). При использовании VARSEG для получения
смещения строки или массива, помните, что
возврвщаемое значение - это сегмент дескриптора
строки или массива, а не данные строки или массива.
См. в приложении С "Интерфейс с языком ассемблера"
описание форматов дескрипторов строк и массивов и
карту распределенияпамяти в момент выполнения.
См. также: VARPTR
Пример См. VARPTR
Оператор VIEW
-------------------------------------------------------------
Назначение: VIEW определяет активную область (поле
изображения) графического экрана.
Синтаксис:
VIEW [[SCREEN][(X1,Y1)-(X2,Y2) [,[цвет],[граница]]]]
Замечания: (Х1,Y1) и (X2,Y2) - верхний левый и нижний правый
углы, соответственно, выделяемого поля изображения.
Цвет - это необязательный числовой аргумент; если
он указан, новое поле изображения окрашивается в
заданный цвет.
Граница - это необязательный числовой аргумент;
если он указан, ТУРБО БЕЙСИК обводит границу нового
поля изображения заданным цветом. Если он не указан,
граница не изображается.
VIEW определяет область на графическом экране, на
которую может производиться запись или, наоборот,
область, на которую запись не производится. Попытки
изобразить пикселы вне поля изображения не приводят к
результату, это называется отсечением изображения.
Параметр SCREEN.
----------------
Если служебное слово SCREEN опущено, координаты
точек отсчитываются непосредственно от верхнего
левого угла поля изображения, а не от левого верхнего
угла экрана. Например, после команды
VIEW (100,50)-(300,180)
команда
PSET(0,0)
изображает точку с координатами (100,50).
Если SCREEN указан, координаты точек определяются
обычным путем, то есть относительно левого верхнего
угла экрана. Так, например,
PSET(0,0)
изображает точку в самом верхнем левом углу экрана.
Однако, видимы только те точки, которые попадают в
поле изображения (точки вне поля изображения
невидимы).
Оператор VIEW без аргументов определяет в
качестве поля изображения весь экран. Оператор
SCREEN, используемый для изменения режимов экрана,
(например, переключения из режима со средним
разрешением в режим с высоким разрешением), отменяет
все предыдущие установки оператора VIEW.
Если задано поле изображения, оператор CLS
очищает только его.
См. также: CLS , SCREEN , WINDOW
Пример. SCREEN 1
FOR I=0 TO 6
'задание поля изображения
VIEW ( 10*(I+1), 10*(I+1) )- _
( 25*(I+1), 25*(I+1) ),I,3-I
'вывод круга в поле изображения
CIRCLE(10,10),I+1,3-I
NEXT I
END
Оператор WAIT
-------------------------------------------------------------
Назначение: WAIT ждет заданных условий состояния аппаратуры.
Синтаксис: WAIT порт, N [,M]
Замечания: Порт - целочисленное выражение (в диапазоне от 0
до 65535), задающее аппаратный порт ввода. N и M -
целые выражения в диапазоне от 0 до 255.
WAIT останавливает выполнение программы до тех
пор, пока указанным портом не будет представлено
значение, соответствующее заданному битовому шаблону.
Над значением, считанным из порта выполняется
операция логического "И" с числом M, и - логического
"ИЛИ" с числом N. Если результат равен 0, процесс
повторяется. Если не равен 0, ТУРБО БЕЙСИК выполняет
следующий оператор. Если M опущено, вместо него WAIT
тспользует 0.
Пример.
WAIT &H60,1
PRINT "hi"
END
Оператор WHILE/WEND
-------------------------------------------------------------
Назначение: WHILE/WEND строят цикл, в котором проверка
выполняется на входе.
Синтаксис: WHILE целое-выражение
.
. [операторы]
.
WEND
Замечания: Если целое выражение истинно, то есть TRUE (равно
ненулевому значению), выполняются все операторы между
WHILE и завершающим цикл оператором WEND; затем ТУРБО
БЕЙСИК возвращается на оператор WHILE и повторяет
проверку, если целое выражение опять истинно,
выполняются все внутренние операторы и т. д. Этот
процесс повторяется до тех пор, пока проверяемое
выоажение не будет равно 0, тогда управление
передается на оператор, следующий за оператором WEND.
Если целое выражение оценивается как ложное, т.е.
FALSE (ложь), при первом проходе цикла, не выполняет-
ся ни один оператор цикла.
Циклы, построенные операторами WHILE/WEND могут
быть вложенными (заключенными внутри другого цикла).
Каждый WEND соответствует ближайшему к нему
незакрытому оператору WHILE. Если ТУРБО БЕЙСИК
встречает оператор WEND без соответствующего ему
оператора WHILE, возникает ошибка выполнения 30 WEND
Without WHILE (WEND без соответствующего WHILE). Если
оператору WHILE не соответствует оператор WEND,
возникает ошибка выполнения 29 WHILE Without WEND
(WHILE без соответствующего WEND).
Хотя компилятору это совершенно безразлично,
структурируйте расположение операторов между WHILE и
WEND с помощью пары пробелов для того, чтобы сделать
более ясной структуру созданного Вами цикла.
Внимание:
WHILE -1 : ... : WEND
создает бесконечный цикл.
Для выхода из цикла WHILE/WEND следует
использовать оператор EXIT WHILE.
См. также: DO/LOOP , EXIT
Пример.
'положить I равным 0
'положить X равным 10
I=0
X=10
'выполнять цикл до тех пор, пока I не будет равно 10
WHILE I<X
'прибавить 1 к значению I
I=I+1
'вывести значение I
PRINT "I=";I
'ждать 1 секунду
DELAY 1
'завершить цикл, когда выполнится условие
WEND
PRINT
PRINT "Оба значения: и I и X равны 10"
PRINT I
PRINT X
END
Оператор WIDTH
-------------------------------------------------------------
Назначение: WIDTH устанавливает логическую длину строки.
Синтаксис: WIDTH [{ имя-устройства | #номер-файла },] длина
Замечания:
Длина - целое выражение в диапазоне от 0 до 255,
которое задает новую логическую длину строки.
Имя устройства - необязательное символьное выра-
жение, указывающее устройство, длина строки которого
устанавливается. Могут указываться устройства SCRN:,
LPT1:, LPT2:, LPT3:, COM1: или COM2:. Если устройство
не указано, по умолчанию устанавливается длина строки
экрана (SCRN:).
Номер файла - целое выражение, которое задает
файл, открытый для вывода.
В целом, WIDTH определяет число символов, которое
может быть выведено на заданное устройство прежде,
чем будет выполнен возврат каретки. Конкретные детали
работы оператора WIDTH зависят от конкретного
устройства.
WIDTH <длина> или WIDTH "SCRN:",<длина>
устанавливают ширину экрана. Допустимы только два
значения длины: 40 и 80,; но для монохромного экрана
40 тоже не допустимо.
Если экран находится в графическом режиме,
изменение ширины экрана имеет тот же эффект, что и
смена графического режима. Например, если текущим
является режим с высоким разрешением, WIDTH 40
переключает в графический режим со средним
разрешением.
WIDTH <устройство>, <длина> - определяет строки
указанного устройства при последующем его открытии.
Если устройство уже открыто, длина строки не
изменяется.
Внимание: оператор LPRINT непосредственно
открывает принтер, то есть действие оператора
WIDTH "LPT1:",длина
проявляется немедленно.
WIDTH #<номер-файла>,<длина> также меняет длину
устройсва, представленного номером файла в момент
выполнения команды.
Устройства, для которых оператор WIDTH что-либо
означает, это LPT1:, LPT2:, LPT3:, COM1: и COM2:.
Ширина строки каждого принтера по умолчанию - 80.
Если ширина строки устанавливается равной 255, это
означает, что логической длины строки практически не
существует, и возврат каретки никогда не вставляется.
Пример.
'установить графический режим со средним разрешением
SCREEN 1,0
PRINT "Это пример работы в режиме"
PRINT " со средним разрешением"
DELAY 3 'ждать 3 секунды
'установка с помощью WIDTH графического режима
'с высоким разрешением
WIDTH 80
PRINT "Это образец графического режима"
PRINT " с высоким разрешением"
DELAY 3
'переключение в режим со средним разрешением
WIDTH 40
PRINT "Заметьте, что в режиме"
PRINT "со средним разрешением"
PRINT "буквы большего размера"
DELAY 3
SCREEN 0,1 'текстовый режим
WIDTH 80
PRINT "Это 80-символьный текстовый режим"
DELAY 3
WIDTH 40 '40-символьный режим
PRINT "Это 40-символьный текстовый режим"
'80-символьный текстовый режим
WIDTH 80
'вопрос пользователю, можно ли продолжить пример на
'принтере?
INPUT "Поддерживаются ли EPSON-коды принтера (Y/N)";_
ANS$
'завершение программы, если EPSON-коды не
'поддерживаются
IF UCASE$(ANS$)<>CHR$(89) THEN END
'установить сжатый режим печати
LPRINT CHR$(15)
'установить логическую длину сроки
WIDTH "LPT1:",130
LPRINT "Тестирование в сжатом режиме установлено ";
LPRINT "на 130 колонок, та же строка печатается ";
LPRINT "до конца страницы."
LPRINT CHR$(18) 'восстановление
WIDTH "LPT1:",80
END 'конец программы
Оператор WINDOW
-------------------------------------------------------------
Назначение: WINDOW определяет систему координат графики.
Синтаксис: WINDOW [[SCREEN](X1,Y1)-(X2,Y2)]
Замечания: (X1,Y1) и (X2,Y2) - это две пары координат с
одинарной точностью. (Х1,Y1) представляют нижнюю
левую часть экрана, а (X2,Y2) - верхнюю правую.
Если Вам не нравится стандартный способ адресации
графического экрана, принятый в ТУРБО БЕЙСИКе с
началом координат в левом верхнем углу от 0 до 319
(от 0 до 639), от 0 до 199, Вы можете задатьего по
собственному усмотрению с помощью оператора WINDOW.
Оператор WINDOW преобразует произвольно выбранные
"пользовательские" координаты (которые могут быть
более естественным для Вашей программы способом
определения позиций) в "физические" координаты
(адреса пикселов на экране).
Одно из применений оператора WINDOW состоит в
том, чтобы перемасштабировать дисплей в соответствии
с координатами экрана, принятыми в различных
компьютерных системах. Так, например, графический
экран Apple II состоит из 280 горизонтальных и 192
вертикальных рядов пикселов. Оператор
WINDOW SCREEN (0,0)-(279,191)
определяет для экрана PC ту же адресную схему. После
выполнения этого оператора с компьютера Aplle II
переносится программа, пытающаяся засветить самый
нижний правый пиксел на экране Apple II, для которого
она была написана. Например, PSET(279,191) изображает
пиксел с физическим адресом 319,199 (в нижнем правом
углу экрана PC).
В качестве другого примера предполпжим, что Вы
работаете в прикладной области, где было бы удобно
описывать линии и другие объекты в терминах коорди-
нат, много больших чем 0-199 и 0-639, допустимых при
стандартной адресации экрана. Предположим также, что
было бы полезно иметь начало координат в центре экра-
на, так, чтобы значение Y возрастало вверх, как это
принято в аналитической геометрии.
Оператор WINDOW позволяет работать с графическим
экраном с высоким или средним разрешением, как если
бы он был именно таким образом устроен. WINDOW
позволяет разместить на экране весь диапазон чисел с
одинарной точностью, например, оператор
WINDOW (-1E6,1E6)-(1E6,-1E6)
создает систему координат на 4 триллиона точек
(2 миллиона на 2 миллиона). Верхнему левому пикселу
соответствует (-1000000,1000000); точка (0,0)
расположена в центре экрана; (1000000,-1000000)
соответствует нижнему правому пикселу. Это
аппроксимация стандартной координатной плоскости в
декартовой геометрии: начало координат в центре,
положительные значения X находятся справа от начала
координат, положительные значения Y - выше начала
координат.
Псле выполнения этого оператора любая операция
записи на экран (CIRCLE, LINE и др.) будут
использовать новую систему координат.
PSET(0,0)
выделяет пиксел в центре экрана;
PSET(250000,250000)
выделяет пиксел немного выше и правее центра.
Аргументы оператора WINDOW - это числа с плавающей
точкой одинарной точности, которые позволяют задавать
на экране и огромные области (миллионы пикселов в
обоих направлениях), и области с дробными значениями
координат - от 0 до 1.
Если задано необязательное служебное слово
SCREEN, то сохраняется установленное по умолчанию
свойство координаты Y расти по направлению вниз. Так,
например
WINDOW SCREEN (-1,1)-(-1,1)
создает систему координат, в которой верхний край
экрана имеет координату Y равную -1, а нижний край -
координату Y равную 1.
Любое распределение экрана, заданное оператором
WINDOW, отменяется при выполнении операторов RUN,
SCREEN или WINDOW без параметров. Функция PMAP
выполняет масштабирование в соответствии с текущей
установкой оператора WINDOW без какого-либо
отображения на экране.
См. также: CLS , PMAP
Пример.
'установка графического режима со средним разрешением
SCREEN 1
PI=ATN(1)*4 'определение константы
VAL1=5 : VAL2=6 : STEPS=400 'выбор значений
WINDOW (-1,1)-(1,-1) 'начало координат в центре
'однократный обход круга
FOR THETA=0 TO 2*PI STEP 2*PI/STEPS
'круг единичного радиуса
RADIUS=COS(2*THETA)
'перевод в декартовы координаты
X=RADIUS*COS(VAL1*THETA)
'с искривлением
Y=RADIUS*SIN(VAL2*THETA)
PSET(X,Y) 'изобразить точку
NEXT THETA 'повторить
'нажать любую клавишу для возврата в редактор
WHILE NOT INSTAT: WEND
END 'конец программы
Оператор WRITE
-------------------------------------------------------------
Назначение: WRITE посылает данные, разделенные запятыми, на экран.
Синтаксис: WRITE [список-выражений]
Замечания: Список выражений - это последовательность
числовых и/или символьных выражений, разделенных
запятыми и точками с запятой. Если список выражений
опущен, выводится пустая строка.
Действие оператора WRITE аналогично действию
оператора PRINT за исключением того, что WRITE
выводит запятые между данными из списка выражений,
заключает символьные данные в кавычки и записывает
положительные числа без предшествующих пробелов.
См. также: PRINT
Пример.
'В этом цикле считываются данные
'и печатаются сначала с помощью PRINT,
'затем с помощью WRITE
FOR I=1 TO 3
READ WORDS$,NUMBER%
PRINT WORDS$
PRINT NUMBER%
WRITE WORDS$,NUMBER%
NEXT I
DATA "Hello",10,"How are",20,"you",30
END 'конец программы
Оператор WRITE#
-------------------------------------------------------------
Назначение: WRITE# выводит данные в последовательный файл.
Синтаксис: WRITE# номер-файла, список-выражений
Замечания: Номер файла - номер, который присваивается
устройству или файлу при открытии (OPEN).
Список выражений - это последовательность
числовых и/или символьных выражений, разделенных
запятыми или точками с запятой.
Действие оператора WRITE# аналогично действию
оператора PRINT# за исключением того, что WRITE#
выводит запятые между данными из списка выражений,
заключает символьные данные в кавычки и записывает
положительные числа без предшествующих пробелов.
Использование оператора WRITE# является более
предпочтительным методом записи полей данных в
последовательный файл, так как выводимые значения
автоматически отделяются запятыми, а символьные
строки помещаются в кавычки. Это облегчает ввод с
помощью оператора INPUT# данных, записанных в
последовательный файл.
См. также:
PRINT#
Пример.
'открыть последовательный файл для вывода
OPEN "FILE.PRN" FOR OUTPUT AS #1
'чтение информации из операторов DATA и
'вывод в файл
FOR I=1 TO 6
READ INFO$
WRITE #1,INFO$
NEXT I
CLOSE 1 'закрытие файла
END 'конец программы
'определение данных
DATA "Mike","Smith","12 Main St.",_
"Paris","Ca","95066"