ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 9 Функции ERDEV,ERDEV$ -------------------- Функция ERDEV,ERDEV$ возвращают информацию о приводном ------- устройстве. Синтаксис y=ERDEV --------- y=ERDEV$ Замечания Когда возникает ошибка устройства, целая функция --------- ERDEV возвращает информацию об ошибке в своем младшем байте. Этот байт представляет код ошибки INT24. Старший байт содержит биты 15,14,13,3,2,1 и 0 атрибутного слова устройства. ERDEV$ содержит имя устройства: 8 байтов для литерных устройств и 2 - для блочных устройств. (См. более детальную информацию в техническом справочном руководстве по IBM DOS). Пример: ON ERROR GOTO ОшибокОбработчик PRINT "Открыть путь на устройство А и нажать любую клавишу..." WHILE NOT INSTAT:WEND FILES "A:\"." " END ОбработчикОшибок: PRINT USING "Угрожающая ошибка ## имела место на & ":ERDEV,ERDEV$ RESUME NEXT Функции ERL,ERR --------------- Функция ERL И ERR возврашают строку и код самой последней ------- ошибки. Синтаксис y=ERL --------- y=ERR Замечания ERL возврашает номер строки самой последней --------- ошибки. Если ошибка произошла в операторе без номера строки, ERL возвращает номер ближайшей нумерованной строки в направлении к началу программы. Если между точкой ошибки и началом программы нумерованных строк нет, ERL возвращает 0. ERR возвращает номер самой последней ошибки периода прогона. Тестируйте ее в подпрограммах отслеживания ошибок с целью исполнения кода, подходящего для произошедшей ошибки по типу. Примечание: Операторы ERL RESUME и RESUME NEXT приводят к генерированию компилятором 4-байтового указателя для каждого оператора в программе. Следовательно программисты, имеющие дело с размером генерируемых ими кодов, должны принимать это во внимание. При использовании RESUME [строка#] генерируется единственная инструкция перехода. ERL обычно используется в отладочных целях, поэтому все это, вероятно имеет небольшое значение. Различия Правила, касающиеся того, с какой стороны -------- относительного оператора сравниваемый по ERL номер должен находится, неприемлемы для Турбо-Бейсика. Это связано с тем, что в Турбо-Бейсике нет инструкции RENUM. Кроме того, в Турбо-Бейсике неприемлен результат ERL Интерпретаторного Бейсика, получающийся при возникновении ошибки во время исполнения оператора DIRECT MODE. См.также ERADR ERROR ON ERROR Пример: ON ERROR GOTO Ловушка DIM X%(10) FOR I%=1 TO 10 40 READ X%(I%) PRINT X%(I%) NEXT I% 'имеется недостаточное число элементов данных 70 DATA 1,2,3,4,5,6,7 80 END 90 Ловушка: IF ERL=40 THEN RESTORE RESUME ELSE PRINT "Неизвестная ошибка":END ENDIF Оператор ERROR ------------- Функция ERROR вынуждает ошибку периода прогона. ------- Синтаксис ERROR ОшибкиКод --------- Замечания ОшибкиКод - это целое выражение от 0 до --------- 255. Если ОшибкиКод - заранее определенный код ошибки (см.приложение Е), то ERROR вызывает такое поведение вашей программы, как если бы произошла ошибка. Это предусмотрено для отладки подпрограмм отслеживания ошибок . Чтобы определить ваши собственные коды ошибок, используйте в ОшибкиКод такие значения, которые не используются Турбо-Бейсиком. Если вы не определяете процедуру обработки ошибок для этих новых потребительских кодов ошибок, Турбо-Бейсик отображает сообщение: Ошибка n в программном счетчике:адрес (Error n at pgm-ct :адрес) где n-код ошибки, адрес-значение из программного счетчика процессора во время обнаружения ошибки . Пример: DEF FN функ%=(x%) IF x%>65 THEN ERROR 5 'ошибка вызова незаконной функции ELSE FNфунк%=x%+100 ENDIF END DEF PRINT FNфунк(65) 'вызвать ошибку незаконного вызова 'функции Оператор EXIT ------------- Функция EXIT преждевременно оставляет какую либо структуру. ------- Синтаксис EXIT{SELECT!DEF!FOR!IF!LOOP!SUB!WHILE} --------- Замечания Оператор EXIT позволяет вам оставлять --------- структурный оператор или определение процедуры и функции в каком-то ином месте, чем ее конец. Тип структуры, подвергаемой действию оператора EXIT, должен включать в себя, как составную часть, оператора EXIT в соответствии со следущим списком: -------------------------------------------------- EXIT-опция Подвергаемая EXIT структура -------------------------------------------------- SELECT Оператор SELECT DEF Определение функции FOR Цикл FOR/NEXT IF IF-блок LOOP Цикл DO/LOOP SUB Определение процедуры WHILE Цикл WHILE/WEND -------------------------------------------------- При использовании EXIT можно сэкономить на беспорядочных GOTO. Ограничения Когда EXIT используется для выхода из ----------- функции, вы должны назначать функции результата до исполнения EXIT. Пример: 'Эта программа демонстрирует все операторы EXIT. Для 'прекращения исполнения используются и процедура и функция. SUB Управление (Выб%,Пусто%) SELECT CASE Выб% CASE 1 'использовать оператор CASE для сообщения пользователю 'чего-то о вводимом числе SELECT CASE Пусто% CASE<0 PRINT "Число меньше нуля" 'выити из оператора SELECT CASE EXIT SELECT CASE >0 PRINT "Число больше нуля" EXIT SELECT CASE ELSE PRINT "Число равно нулю" END SELECT EXIT SUB CASE 2 IF Пусто%<0 THEN PRINT "Число меньше нуля" EXIT IF ELSEIF Пусто%>0 THEN PRINT "Число больше нуля" EXIT IF ELSE PRINT "Число равно нулю" ENDIF END SELECT PRINT "Вы выбрали число 2" END SUB DEF FN Циклы(Выб%) 'Параметр подаваемый в функцию, указывает какое EXIT будет 'исполняться. Каждая цикловая структура делает одно и то 'же, чтобы продемонстрировать как может использоваться 'EXIT для завершения исполнения цикла. Мы также 'демонстрируем как можно использовать EXIT для выхода из 'функции. EXIT DEF используется для выхода из первых двух 'случаев выбора. Это предотвращает исполнение операторов 'вывода на экран. 'назначить значение результату функции FNциклы=-1 SELECT CASE Выб% CASE 1 'использовать EXIT, чтобы оставить этот цикл, вместо того, 'чтобы позволить ему завершится нормально FOR I%=1 TO 32767 PRINT RND(Пусто%) EXIT FOR NEXT I% EXIT DEF CASE 2 DO PRINT RND(Пусто%) EXIT LOOP LOOP EXIT DEF CASE 3 WHILE 1 PRINT RND(пусто%) EXIT LOOP WEND END SELECT PRINT "Вы исполнили выбор случая 3" END DEF 'начать главную программу 'сделать три вызова циклов, выбирая каждый раз иной из 'имеющихся PRINT FNЦиклы(1) PRINT FNЦиклы(2) PRINT FNЦиклы(3) INPUT "Введите число:"Пусто% FOR Счетчик%=1 to 2 CALL Управление(Счетчик%,Пусто%) CALL Управление(Счетчик%,Пусто%) NEXT Счетчик% END Функции EXP, EXP2, EXP10 ------------------------ x x x Функция EXP возвращает e ; EXP10 - 10 ;EXP2 - 2 . ------- Синтаксис EXP: --------- y=EXP(x) EXP2: y=EXP2(x) EXP10: y=EXP10(x) Замечания EXP возвращает e встепени x, где x- числовое --------- выражение, а e - основание натуральных логарифмов, равное приблизительно 2.718252. Тот же результат вы получите с помощью оператора e^x. Только с помощью EXP вы можете вычислить само e :e=EXP(1) EXP2 возвращает 2 в степени x , где x -числовая переменная или выражение. Тот же результат вы можете получить с помощью выражения 2^x. EXP10 возвращает 10 в степени x, где x числовая переменная или выражение. Тот же результат вы можете получить с помощью выражения 10^x. EXP,EXP2,EXP10 возвращают результат двойной точности. Пример: FOR I=1 TO 10 PRINT USING "Экспонента ##=####^^^^":I,EXP(I) NEXT I END Оператор FIELD -------------- Функция FIELD определяет переменные поля в буфере ------- файла произвольного доступа. Синтаксис FIELD [#]Файланом,ширина AS строчная переменная. --------- Замечания Файланом - это номер, используемый, когда --------- файл открывается, ширина - это число байтов, распределяемой для переменной поля, а строчная переменная - это сама переменная поля. Однажды используемые в операторе FIELD строчные переменные приобретают статус "переменная поля". Они должны назначаться при подготовке записи в указанный файл произвольного доступа только с использованием RSET и LSET. Ограничения Идентификатор, используемый в операторе FIELD, ----------- никогда не должен применяться с левой стороны в операторе присваивания. Если это происходит, то данный идентификатор более не идентифицируется с определениями полей файла произвольного доступа. См.также LSET RSET Пример: OPEN "FIELD.DTA" FOR OUTPUT AS #1 LEN=18 FIELD #1,2 AS Целое$,4 AS ДлинноеЦелое$,4 AS Единич- наяТочность$,8 AS ДвойнаяТочность$ FIELD #1,2 AS A$,4 AS B$,4 AS C$,8 AS D$ МаксЦелое%=32767 FOR I%=1 TO 5 LSET Целое;=MKI$(I%) LSET ДлинноеЦелое$=MKL$(I%+CLNG(МаксЦелое%)) LSET ЕдиничнаяТочность$=MKS$(CSNG(I%*CSNG(МаксЦелое%))) LSET ДвойнаяТочность$=MKD$(МаксЦелое%-I%) PUT #1,I% NEXT I% FOR I% TO 5 GET #1,I% PRINT CVI(A$),CVL(B$),CVS(C$),CVD(D$) NEXT I% CLOSE #1 END Оператор FILES -------------- Функция FILES отображает содержание справочника (подобно ------- DIR -команде DOS). Синтаксис FILES [файласпец] --------- Замечания Файласпец - это строчное выражение, следующее --------- соглашениям DOS об именовании файлов, и может опционально включать в себя спецификатор привода и информацию о проходе. Если файласпец опускается, отображаются все файлы текущего справочника. Файласпец может содержать свободно определяемые литеры: ?, *, аналогично DIR-команде из DOS. FILES *.* дает перечень всех файлов текущего справочника. FILES *.BAS дает перечень исходных файлов Турбо-Бейсика. В конце FILES, отображается число свободных байтов на устрой- стве, cодержащем текущий справочник.Файлы субсправочника ука- зываются суффиксом DIR. Ограничения Спецификация несуществующего привода или спра- ----------- вочника в операторе FILES будет вызывать ошибку периода прогона. Пример INPUT "Введите привод и справочник, по которому вы желаете иметь перечень":Спр$ FILES Спр$ END Функция FIX ----------- Функция FIX дает усечение целого. ------- Синтаксис y=FIX(числовое выражение) --------- Замечания FIX отсекает дробную часть аргумента и возвраща- --------- ет целую (в отличии от CINT и INT, которые вы- полняют округление). См.также CEIL CINT INT Пример: FOR I=50 TO 52 STEP RND PRINT USING "Целая часть ##.##=##":x,FIX(x) NEXT I END Операторы FOR/NEXT ------------------ Функция FOR и NEXT определяют цикл с автоматическим на- ------- ращиванием (или уменьшением). Синтаксис FOR переменная=x TO y [STEP z] --------- . . . NEXT [переменная[,переменная]...] Замечания Переменная - это числовая переменная, служащая --------- счетчиком цикла, тогда как x, y, z -это числовые выражения, определяющие условия начала и остановки цикла. X - на- чальное значение счетчика, y - конечное значение счетчика, а z - опциональное значение наращивания. Операторы между FOR и NEXT используются в режиме повторения. При каждом проходе через цикл переменная наращивается на z. Если z опускается, то шаговое значение по умолчанию равно 1. Цикл завершается, когда значение счетчика больше или равно y (или, для отрицательного z, меньше или равно y). Циклы FOR/NEXT прогоняются быстрее всего при целых переменных, как переменной счетчика, так и константах x, y, z. Корпус цикла пропускается полностью, если начальное значение x меньше y. Циклы FOR/NEXT могут гнездоваться в других циклах FOR/NEXT. Убедитесь в том, что используются уникальные переменные счетчиков и обеспечиваете гарантию появления оператора NEXT внут- реннего цикла ранее NEXT внешнего цикла. Этот цикл имеет пересе- чение циклов и не будет компилироваться: FOR n=1 TO 10 FOR m=1 TO 20 . . . 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 Хотя компилятор не заботится о таких вещах, делайте у ступ в операторах FOR/NEXT на два или три пробела для разметки структуры цикла. Используйте оператор EXIT FOR с целью покинуть цикл FOR/NEXT до его завершения. Если обнаруживается NEXT без соответ- ствующего FOR, возникает ошибка 1 . Пример FOR I%=1 TO 10 PRINT "Для цикловой итерации "I% NEXT I% PRINT "Нажмите любую клавишу ..." WHILE NOT INSTAT WEND FOR I% TO 50 STEP -5 PRINT "Для цикловой итерации"(45-I%)\5 NEXT END Функция FRE ----------- Функция FRE возвращает величину свободной памяти, имею- ------- щейся для вашей программы . Синтаксис y=FRE({строчное выражение!-1!-2}) --------- Замечания FRE со строчным аргументом возвращает длинное --------- целое, представляющее число байтов свободной RAM (с помощью произвольного доступа) в строчной памяти. FRE(-1) воз- вращает свободную RAM в пространстве массивов вашей прораммы. FRE(-2) говорит как много места осталось в стеке. Различия Функция FRE Турбо-Бейсика дает больше информа- -------- ции, чем аналогичная функция Интерпретаторного Бейсика. Оператор FRE в Интерпретаторном Бейсике возвращает вели- чину наличной памяти в сегментах данных Бейсика; следовательно вызов FRE (S$) и FRE(0) возвращают одно и то же число. Однако, поскольку Турбо-Бейсик обеспечивает больше памяти, в которой ра- ботает, его оператор FRE имеет больше функций. Турбо-Бейсик имеет отдельный строчный сегмент; следовательно FRE(S$) возвраща- ет наличное строчное пространство. Турбо-Бейсик имеет большое (64К) массивное пространство, поэтому FRE(-1) возврашает налич- ную память для массивов. И Турбо-Бейсик поддерживает процедуры и рекурсивность, поэтому FRE(-2) возвращает наличное стековое пространство. Пример: ON ERROR GOTO ОшибкиОбработчик PRINT FRE ("Строчное Пространство"),FRE(-1),FRE(-2) DIM DYNAMIC БольшойМассив(10000) БольшойМассив(6666)=66 'отобразить память, имеющуюся в сегментах строк, 'данных и стека s$="abc...z" PRINT FRE("Строчное пространство"),FRE(-1),FRE(-2) 'эта программа дает ошибку, если прогоняется с 'включенной привязкой границ PRINT БольшойМассив(6666) END ОшибкиОбработчик: PRINT "Ошибка типа "ERR"произошла по адресу "ERADR END Оператор GET (файлы) -------------------- Функция GET обеспечивает считывание записи из произволь- ------- ного файла. Синтаксис GET [#]файланом[,записином] --------- Замечания Файланом-это номер файла, под которым он был от- --------- крыт, а записином запись подлежащая считыванию от 1 до 16777215. Если записином опускается, то считывается сле- дующая по порядку запись (после специфицированной самым последним GET или PUT). Пример: OPEN "GET.DTA" AS #1 LEN 18 FIELD #1,2 AS Целое$,4 AS ДлинноеЦелое$,4 as ЕдиничнаяТочность$,8 AS ДвойнаяТочность$ FIELD #1,2 AS a$,4 AS B$,4 AS C$,8 AS D$ МаксЦелое%=32767 FOR I% TO 5 LSET Целое$=MKI$(I%) LSET ДлинноеЦелое$=MKL$(I%+CLNG(МаксЦелое%)) LSET ЕдиничнаяТочность$=MKS$(CSNG(I%*CSNG(МаксЦелое%))) LSET ДвойноеЦелое$=MKD$(МаксЦелое%^I%) PUT #1,I% NEXT I% FOR I%=1 TO 5 GET #1,I% PRINT CVI(A$),CVL(B$),CVS(C$),CVD(D$) NEXT I% CLOSE #1 END Оператор GET (графика) ---------------------- Функция GET обеспечивает считывание всего или части гра- ------- фического экрана в массив. Синтаксис GET (x1,y1)-(x2,y2),Массив ---------- Замечания (x1,y1) и (x2,y2) специфицируют верхнюю левую и --------- нижнюю правую границы зоны графического экрана, подлежащей обработке оператором GET. Массив -это числовой массив. GET и его дополнительная команда PUT исползуются сначала для счи- тывания, а затем для записи графических изображений на экран. Единственное ограничение накладываемое на числовой массив, кото- рый используется для хранения считываемых с экрана данных, состо- ит в том, что он должен быть достаточно большим для этого. Для расчета размера массива ,необходимого для хранения заданной доли экрана, используйте следующую формулу: Необходимо байтов: 4+INT((x*битов на пиксел+7/8)*y, где y и x-размеры захватываемой зоны по горизонтали и вертикали. Битов на пиксель-константа, относящееся к режиму : 2-для средней 1-для высокой разрешающей способности. -------------------------------------- Экран Битов на пиксель -------------------------------------- 1 2 2 1 7 4 8 4 9 4 10 2 -------------------------------------- Например для хранении изображения при средней разрешающей спо- собности 35 пикселей шириной и 45 высотой вам необходим массив 4+int((32*2+7)/8)*45 байтов или 409 байтов. 409 байтов представ- ляют собой целый массив из 205 элементов, следовательно массив заявляемый с помощью оператора размера DIM буфер%(204), примет проделанную работу. Помните, что по умолчанию каждый массив имеет нулевой элемент; так что в массиве буфер% имеется 205 двухбайто- вых элементов, от 0 до 204, т.е всего 410 байтов). Турбо-Бейсик хранит графические данные в следущем формате: буфер%(0): число битов по горизонтали буфер%(1): число битов по вертикали буфер%(2) . . Собственно графическая информация . буфер%(204) В силу особенности организации дисплейной памяти, оживление работы на базе GET и PUT идет быстрее, если вы выбираете зоны эк- рана, выровненные по байтовым границам. Для средней разрешаю- щей способности используйте значения x кратное 4; для высокой разрешающей способности - кратное 8. Базисная стратегия использо- вания GET и PUT для живой обработки обьекта от точки А до точки В состоит в следущем: Чертить обьект GET обьект в массив позиция=старая ячейка=точка А DO UNTIL позиция =точка В PUT XOR обьект в старой ячейке позиция=позиция + приращение PUT XOR обьект в позиции задержать,если необходимо старая позиция=позиция LOOP Пример: 'разместить буфер для хранения графического образа DIM Буфер%(143) 'Переключить на графический режим среднего разрешения SCREEN 1 CIRCLE (16,16),8,2 'чертить окружность GET (0,0)-(31,31),Буфер% 'получить окружность 'копировать все на экран FOR I%=0 TO 9 PUT (I%*32,100),Буфер% NEXT I% END Функция GET$ ------------ Функция GET$ считывает строку из файла, открытого в ре- ------- жиме BINARY (двоичном). Синтаксис GET$ [#]файланом,счетчик,строчная переменная --------- Замечания Счетчик -это целое выражение в диапазоне от 0 до --------- 32767. GET$ считывает счетчик байтов, начиная с текущей файловой позиции (которая может быть установлена опе- ратором SEEK), из файла номер файланом и назначает считанное строчной переменной. Файл файланом должен быть открыт в режиме BINARY. После обработки GET$ текущая файловая позиция будет про- двинута вперед на счетчик байтов. GET$, PUT$ и SEEK обеспечивают низкоуровневую альтернативу приемов обработки последовательных и произвольных файлов, которая дает вам возможность иметь с файлами дело на байтовой основе. См.также OPEN PUT$ SEEK Пример: SUB создатьФайл 'GET$ открывает файл и записывает в него 256 литер LOCAL I% OPEN "GET.DTA" FOR BINARY AS #1 FOR I%=0 TO 256 PUT$ #1,I%,CHR$(I%) NEXT I% END SUB DEF FNЧитатьЭл$(Начало%,Размер%) LOCAL времСтр$,Лит$,I% SEEK 1,Начало% GET$ #1,Размер%,ВремСтр$ FNЧитатьЭл$=ВремСтр$ END DEF CALL Создатьфайл PRINT "Введите строчную точку [0...255] и сколько" PRINT "байтов данных [0...255] вы желаете PRINT "считать из файла ",Ст%,Рз% PRINT FNчитать Эл$(Ст%,Рз%) END Оператор GOSUB -------------- Функция GOSUB возбуждает подпрограмму ------- Синтаксис GOSUB метка --------- Замечания Оператор GOSUB вызывает переход Турбо-Бейсика к --------- оператору, имеющему перед собой метку, после предварительного обеспечения хранения текущего адреса в стеке. Использование RETURN возвращает управление к оператору, следущему за GOSUB. Процедуры и функции Турбо-Бейсика могут выполнять ра- боту подпрограмм с добавлением выигрыша в рекурсивности, подачи параметров и локальных и статических переменных. См.также DEF FN SUB RETURN Пример PI#=ATN(1)*4 радиус =55 GOSUB РасчетПлощади радиус=13 GOSUB РасчетПлощади END РасчетПлощади: Площадь=PI#*радиус^2 PRINT Площадь RETURN Оператор GOTO ------------- Функция GOTO направляет программный поток к оператору ------- идентифицируемуму меткой . Синтаксис GOTO метка --------- Замечания GOTO вызывает безусловное смещение программного --------- потока к коду идентифицирумому меткой. При уме- ренном использовании операторы GOTO представляют собой быстрое и эффективное средство программирования. При беззаботном использо- вании они загромождают программу переплетениями, в которых невозможно разобраться (особенно через месяц и годы после написа- ния). В современной практике программирования стремятся минимизи- ровать применение GOTO с помощью подпрограмм, процедур и функций, а также структурных операторов, таких как FOR/NEXT, WHILE/WEND, DO/LOOP, IF BLOCK и SELECT. Уменьшению применения GOTO также спо- собствует оператор EXIT. См.также EXIT Пример: x=0 Начало: x=x+1 IF x<20 THEN GOTO Распечатать END IF END Распечатать: PRINT "Переменная x="x GOTO Начало Функция HEX$ ------------ Функция HEX$ преобразует число в его шестнадцптиричный ------- строчный эквивалент. Синтаксис s$=HEX$(числовое выражение) --------- Замечания числовое выражение может находиться в диапазоне --------- от -32768 до 65535. Любая дробная часть число- вого выражения округляется перед созданием строки. Если аргумент HEX$ отрицателен, то эта функция возвращает двоичное дополнение числа. См.также BIN$ OCT$ Пример: PRINT HEX$(65535) PRINT HEX$(-1) Оператор IF ----------- Функция IF тестирует условие и изменяет программный по- ------- ток, если условие удовлетворяется. Синтаксис IF целое выражение[,] THEN оператор(ы) --------- [ELSE оператор(ы)] Замечания Если целое выражение TRUE используются операторы --------- следущие после THEN и любого опционального ELSE. Если выражение FALSE, то исполняются операторы после ELSE. Если опциональная статья ELSE опускается, исполнение продолжается со следущей строки программы. Обычно целое выражение будет результа- том, возвращаемым оператором отношения, хотя и не всегда, как по- казано ниже: IF ПринтерВкл THEN LPRINT Ответ$ Здесь оператор lprint используется только, "флаговая переменная Принтервкл имеет ненулевое значение. Перед ключевым словом ELSE не должно появляться двоеточие; например, следущий оператор ком- пилироваться не будет: IF a100 THEN PRINT "Большое число" ELSE_ PRINT "Малое число" END Блоковый оператор IF -------------------- Функция IF блок создает ряд IF-операторов ------- Синтаксис IF целое выражение [,] THEN --------- . . . Операторы [ELSEIF целое выражение [,] THEN . . . Операторы] [ELSE . . .Операторы] ENDIF Замечания IF блок -это расширение Интерпретаторного Бейси- --------- ка, позволяющее осуществлять множество тестов на множестве строк. При исполнении операторов IF блока проежде всего проверяется истинность выражения в операторе IF. Если FALSE про- веряется по порядку кождый следущий оператор ELSEIF. Как только находится TRUE, Турбо-Бейсик исполняющий операторы следующие за соответствующим THEN, осуществляет переход к оператору следующему за оператором ENDIF без проведения дальнейших тестов. Операторы после опциональной статьи ELSE исполняются, если ни один из ранее проведенных тестов не оказался успешным. Следует заметить, что в первой строке IF блока после ключевого слова THEN ничего не может быть, таким образом компилятору сооб- щается, что это IF блок, а не обычный оператор IF. Операторы IF блока могут гнездоваться, т.е. любые операторы после любого THEN могут содержать IF блоки. (Полезно делать от- ступ операторов, находящихся под управлением каждого теста на па- ру пробелов, как показано в следущем ниже примере. Блоковые операторы IF должны оканчиваться END IF. Заметьте, что END IF записывается с пробелом, а ELSEIF без пробела. См. также SELECT Пример: RANDOMIZE TIMER БанкРулетки=100:Ставка=5:ЗначЗадержки=.5 WHILE NOT INSTAT 'нажать клавишу останова Рулетка=INT(RND(1)*6)+INT(RND(1)*6)+2 PRINT STRING$ (30."_") PRINT Рулетка:DELAY ЗначениеЗадержки IF Рулетка=2 OR Рулетка=3 OR Рулетка=12 THEN_ PRINT "Bы проиграли" БанкРулетки=БанкРулетки+Ставка ELSE PRINT "ваша точка есть" Рулетка Неточка=-1 WHILE Неточка СледРулетка=INT(RND(1)*6)+INT(RND(1)*6)+2 PRINT СледРулетка:DELAY ЗначениеЗадержки IF Рулетка=СледРулетка THEN PRINT "Вы проиграли" БанкРулетки=БанкРулетки+Ставка Неточка=0 ELSEIF СледРулетка=7 THEN PRINT "Вы проиграли" БанкРулетка=БанкРулетка-Ставка Неточка=0 'закончить IF рулетка=блок СледРулетка END IF WEND END IF WEND Оператор INCR ------------- Функция INCR наращивает значение. ------- Синтаксис INCR числовая переменная[,размер] ---------- Замечания Размер -это опциональное числовое выражение, ко- --------- торым указывается значение добавляемое к специ- фицированной переменной. Если размер опускается, используется 1. INCR - это быстрый способ приращения переменной без применения оператора присваивания. Различия Этого оператора в Интерпретаторном Бейсике -------- не существует. См. также DECR Пример: I%=-15 J%=-500 WHILE I%<0 PRINT I%,J% INCR I% INCR J%,5 WEND END Функция INKEY$ -------------- Функция INKEY$ считывает клавиатуру без эхо - обработки ------- литеры. Синтаксис s$=INKEY$ --------- Замечания INKEY$ возвращает строку из 0, 1 или 2 литер, --------- отражающую состояние буфера клавиатуры. Нуль-строка (LEN(s$)=0) означает, что буфер пуст. Строка длиной (LEN(s$)=1) означает, что строка содержит ASCII- значение клавиши нажатой самой последней; например, 13 для Enter (ввод), 65 для A. Двумерная строка (LEN(s$)=2) означает, что была нажата не ASCII -клавиша. Первая литера в этой строке имеет значение 0, а вторая- код расширенной клавиатуры - представляет одну из клавиш не ASCII-клавиатуры, такую как Home (исходное), PgDn (страница вниз) или клавиши стрелки (см. диаграмму кодов расширенной клавиатуры в приложении F). Если нажимается определенная функциональная клавиша (см.опера- тор KEY), то INKEY$ возврашает последовательность литер (по од- ной на каждое возбуждение INKEY$), которая содержит литеры, кото- рые получились бы при их независимом наборе. INKEY$ как пулене- пробиваемое устройство для получения пользовательского ввода в вашу программу без ограничений оператора INPUT. Поскольку INKEY$ не ожидает литеру, подлежащую нажатию до возвращения результата, вы в большинстве случаев будете использовать ее внутри цикла низкоуровневой подпрограммы, непрерывно проверяющей и строящей строку ввода, подлежащую проверке подпрограммами более высокого уровня. INKEY$ подает все удары по клавиатуре включая клавиши управле- ния, такие как Таб, Enter, Backspace в вашу программу без их ото- бражения или обработки, но при следующих исключениях : - Ctrl-Break (управление-разрыв) завершает программу, если опция разрыва клавиатуры не была выключена во время компилирования программы. - Ctrl-Alt-Del (управление-изменить-стереть) вызывает повтор- ную установку системы. - Shift-PrtSc (сдвиг-вывод на экран) выполняет сброс экрана. См. также INSTAT Пример: PRINT "Введите несколько литер, за которыми следует |