|
Часть 16
Пример 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
Оператор INCR
----------------------------------------------------------------
Назначение INCR увеличивает значение переменной
Синтаксис INCR числовая переменная [, приращение ]
Замечания Приращение - необязательное числовое выражение,
эначение которого прибавляется к переменной.
Оператор INCR дает простую возможность уве-
личить значение переменной, не используя опера-
тор присваивания.
Отличия В интерпретаторе BASIC такого оператора нет.
См. также DECR
Пример I% = -15 'инициализация переменных-счетчиков
J% = -500
WHILE I% < 0
PRINT I%,J% 'вывод значений счетчиков
INCR I% 'эначение увеличивается на 1
INCR J%, 5 'эначение увеличивается на 5
WEND
END 'конец программы
Функция INKEY$
-------------------------------------------------------------
Назначение INKEY$ считывает коды клавиш клавиатуры без воспро-
изведения на экране их значений.
Синтаксис s$ = INKEY$
Замечания INKEY$ присваивает переменной s$ строку из 0, 1 или
2 символов, отражающую состояние буфера клавиатуры.
Пустая строка (LEN(s$)=0) означает, что буфер
пуст.
Если длина строки равна 1 (LEN(s$)=1), то строка
содержит код ASCII клавиши, которая была нажата
последней; например, значение I3 для клавишы Enter,
(наэываемой также "возвратом каретки", 65 для кла-
виши A.
Если длина строки равна 2 (LEN(s$)=2), то пос-
ледней была нажата клавиша расширенной клавиатуры,
значение которой не входит в стандартный код ASCII;
например, одна из клавиш HOME, PgDn или стрелки.
Первый символ такой строки 0, второй - вспомога-
тельный код. (Для определения нажатой клавиши см.
таблицу расширенных кодов ASCII в приложении F).
Если нажата функциональная клавиша, определяемая
пользователем (см. оператор KEY), INKEY$ возвращает
строку (по одному символу при каждом вызове функ-
ции), которая соответствует последовательности сим-
волов в определении функциональной клавиши.
Функция INKEY предоставляет надежный способ вво-
да пользователем данных в программу без
ограничений, имеющихся в операторе INPUT. INKEY$
возвращает результат не ожидая нажатия очредного
символа, и поэтому обычно используется в цикле в
подпрограмме низкого уровня для непрерывного конт-
роля и конструирования вводимой строки, проверка
которой выполняется процедурами более высокого
уровня.
INKEY$ пропускает без обработки и вывода на эк-
ран все нажатия клавиш, включая управляющие
(Tab,Enter и BackSpace), за исключением :
- Ctrl-Break - комбинация прерывающая выполнение
программы, кроме тех случаев, когда при компиля-
ции соответствующее прерывание было запрещено;
- Ctrl-Alt-Del - комбинация, вызывающая перезапуск
системы;
- Shift-PrtSc - комбинация, распечатывающая содер-
жимое экрана.
См. также INSTAT
Пример PRINT "Введите несколько символов и затем нажмите
'чтение и воспроизведение кодов клавиш
WHILE Char$ <> CHR$(13)
Char$ = INKEY$
InputSnring$ = InputString$ + Char$
WEND
PRINT InputSnring$
END 'конец программы
Оператор INPUT
-------------------------------------------------------------
Назначение INPUT подсказывает пользователю, что нужно ввести
значение одной или нескольких переменных.
Синтаксис INPUT [;] [текст подсказки {;|,}] список_переменных
Замечания Текст подсказки - это необязательная символика кон-
станта. Список переменных - одна или несколько сим-
вольных или числовых переменных, разделенных запяты-
ми.
Оператор INPUT ждет, пока пользователь не введет
данные с клавиатуры, и затем присваивает значения
заданным переменным.
Если за текстом подсказки указана точка с запя-
той, TURBO BASIC выводит знак вопроса вслед за
текстом. Для того, чтобы знак вопроса не выводился,
нужно поставить запятую.
Вводимые данные должны соответствовать типам пе-
ременных в операторе INPUT, т.е. нечисловые данные
недопустимы для числовых переменных. Если типы не
согласованы, TURBO BASIC потребует повторного ввода
даннах. Так, при вводе нецифрового символа для чис-
ловой переменной появится сообщение
? Redo from start (повторите сначала )
Если оператор INPUT содержит несколько перемен-
ных, данные для них должны отделяться друг от друга
запятыми.
Если непосредственно за ключевым словом INPUT
указана точка с запятой, то при нажатии клавиши
Enter после окончания ввода курсор останется в той
же строке. В противном случае на дисплее будут вы-
полнены возврат каретки и перевод строки.
Отличие В TURBO BASIC данные, вводимые по запросу оператора
INPUT, могут разделяться запятыми или пробелами. В
интерпретаторе BASIC требуется, чтобы входные данные
разделялись запятыми.
Пример INPUT "Введите Ваш возраст и вес: ", Age, Weight
PRINT USING "Вам ### лет, Ваш вес ###":-
Age, Weight
END `конец программы
Оператор INPUT #
-------------------------------------------------------------
Назначение Оператор INPUT # присваивает переменным значения из
последовательного файла
Синтаксис INPUT # номер файла, список переменных
Замечания Номер файла определяется при открытии файла. Список
переменных - одна или несколько символьных или чис-
ловых переменных, разделенных запятыми.
В качестве файла может использоваться дисковый
файл, последовательный порт (COMn:) или клавиатура
(KYBD:).
Данные в файле должны соответствовать типам пе-
ременных в операторе INPUT #. Значения в файле зада-
ются в том же виде, что и для оператора INPUT, то
есть разделяются запятыми, последним указывается
возврат каретки. Файлы такого вида создаются с по-
мощью оператора WRITE #.
См. также WRITE #
Пример SUB Makefile
`Открытие последовательного файла INPUT # для вывода
`Запись в файл строк, состоящих из данных различных
`типов, с помощью оператора WRITE #
`файлу переменных присваивается значение #1
OPEN "INPUT#.LTA" FOR OUTPUT AS #1
`определение и инициализация переменных
StringVariable$ = "Я вернусь."
Integer$ = 1000
FloatingPoint! = 30000.1234
`запись строки текста в последовательный файл
WRITE# 1, StringVariable$, Integer$, FloatingPoint!
CLOSE 1 `закрытие файла переменных
END SUB `конец процедуры Makefile
SUB ReadFile
`Эта процедура открывает последовательный файл
`для ввода. Чтение строк, состоящих из данных
`различных типов, из файла с помощью
`оператора INPUT #
`файлу переменных присваивается значение #1
OPEN "INPUT#.LTA" FOR INPUT AS #1
StringVariable$ = " " `определение и
Integer$ = 0 `инициализация
FloatingPoint! = 0 `переменных
`чтение строки текста из последовательного файла
INPUT# 1, StringVariable$, Integer$, FloatingPoint!
PRINT StringVariable$, Integer$, FloatingPoint!
CLOSE #1 `закрытие файла переменных
END SUB `конец процедуры Readfile
CALL MakeFile
CALL ReadFile
END `конец программы
Функция INP
---------------------------------------------------------------
Назначение INP осуществляет считывание из порта ввода / вывода
Синтаксис y = INP(номер порта)
Замечания INP считывает один байт из порта ввода / вывода с за-
данным номером. Номер порта соответствует аппаратно-
му порту ввода и может иметь значения от 0 до 65535.
Функция INP полезна при считывании информации о
состоянии различных аппаратных подсистем, таких,
как порт связи.(Описание распределения портов для
имеющейся модели компьютера см. в техническом спра-
вочном руководстве.)
Для вывода в порт ввода / вывода следует ис-
пользовать оператор OUT
См. также OUT
Пример `считывая регистр состояния,
`подавляя и пропуская биты управления,
`программа порождает пронзительный звуковой сигнал
`в динамике.
`Из порта 61 (шестнадцатиричное) считывается
`значение
StatusReg% = INP(&H61)
StatusReg% = StatusReg% AND &H00FC
`на считываемое значение накладывается маска
`удлинить звук, чтобы его можно было услышать
FOR J = 1 to 1000
StatusReg%= StatusReg% XOR 2
OUT &H61,StatusReg%
delay .001
NEXT J
END
`
|
|