ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 8 Функции CVMD,CVMS ----------------- Функция CVMD и CVMS преобразует строчные переменные, ------- считываемые из произвольных файлов в формате Микрософт, в числовую форму. Синтаксис y!=CVMS(4-байтовая строка) --------- y#=CVMD(8-байтовая строка) Замечания CVMS (Convert Microsoft Singl-precision string) --------- преобразует 4-байтовую строку, представляющую значение единичной точности в формате Микрософт,в значение единичной точности в формате IEEE Турбо-Бейсика. CVMD (Convert Microsoft Double-precision string) преобразует 4-байтовую строку, представляющую значение двойной точности в формате IEE Турбо-Бейсика. Эти функции предусмотрены исклбчительно для совместимости с существующими файлами Интерпретаторного Бейсика. Пример: 'открыть файл произвольного доступа open "cvmd.dta" as#1 len=12 field#1,4 as Единичная$,as Двойная$ for i=1 to 5 'записать некоторые данные в файл 'преобразовать данные и назначить файл данных lset Единичная$=mkms$(i) lset Двойная$=mkmd$(i^i) put #1.1 next i for i=1 to 5 get #1,1 print cvms(Единичная$),cvmd(Двойная$) next i% print cvs(x$),cvms(x$) close #1 end Оператор DATA ------------- Функция DATA заявляет константы для операторов READ. ------- Синтаксис DATA константа[,константа]... --------- Замечания Константа - это числовая или строчная константа. --------- Числовые константы могут быть с плавающей точкой или целые и опционально могут выражаться как шестнадцатиричные или восьмеричные. Строчные константы не должны заключаться в кавычки, если они не содержат разделители (запятые либо двоеточия) или значащие передние либо концевые пустоты, и могут свободно размещаться вперемежку с числовыми константами. Например: DATA Тако,.79,куриный предел,2.29,.29 Программа может содержать много операторов DATA и они не обязательно должны быть следующими друг за другом строками. Каждое может содержать столько констант, сколько умещается в строке. Во время прогона операторы READ получают доступ к константам DATA слева направо и сверху вниз в том порядке, в каком они появляются в исходной программе. Большинство общих ошибок, ассоциируемых с оператором DATA и READ получается из-за несинхронности и попыток загрузить строчныю данные в числовую переменную; в результате генерируется ошибка 2 (синтаксическая ошибка). К сожалению вы не получаете информацию об ошибке при загрузке числовой константы в строчную переменную, даже если это не то, что вы намеревались сделать. Команда RESTORE позволяет вам повторно считывать константы из первого оператора или любого специфицированного оператора DATA. Если вы пытаетесь реализовать READ большое число раз, чем имеет констант ваша программа, это приводит к ошибке 4 (вне данных). Ограничения Вы не можете использовать в операторах DATA ----------- литеры с непрерывным подчеркиванием. Не пользуйтесь единичной кавычкой (') для коментирования оператора DATA, поскольку Турбо-Бейсик может принять ее за последний вход, а ваш комментарий за часть данной одной длинной строчной константы. Например: "Кнопки","собаки" и "свиньи'список животных." Вы можете, однако, безопасно использовать для этой цели :REM: См. также READ RESTORE Пример: 'Эта программа демонстрирует использование оператора DATA sub ОбработкаРезультатов(СтудентаИмя$,СтудентаСредний%) local Всего%,Бал%,i% Всего%=0 read СтудентаИмя$ for i%=1 to 10 read Бал% Всеге%=Всего%+Бал% next i% СтудентаСредний%=Всего%\10 end sub for Студент%=1 to 3 call ОбработкаРезультатов(Симя$,Средний%) print using "&'s средний равен ###";симя$,средний% next Студент% end Ваши результаты: DATA В.Перри,78,65,35,79,86,93,79,85,99,96 DATA П.Ватсон ,98,94,70,88,99,100,75,96,100,95 DATA М.Чикконе,65,59,75,82,56,79,82,76,69,89 Системная переменная DATE$ -------------------------- Функция DATE$ устанавливает и устанавливает системмную дату. ------- Синтаксис DATE$=s$ (установить дату в соответствии с --------- информацией в s$) s$=DATE$ (s$ содержит теперь информацию о дате). Замечания Системная дата устанавливается назначением --------- правильно сформированного строчного значения в DATE$. Назначение DATE$ строчной переменной делает системную дату доступной для обработки. DATE$ возвращает 10-литерную строку в форме мм-дд-гггг, где мм-месяц, дд-день, гггг-год. Чтобы изменить дату, ваша строка должнa иметь формат даты одного из следующих видов: мм-дд-гггг мм/дд/гг мм-дд-гггг мм/дд/гггг Например: "10-25-86" устанавливает системную дату на 25 октября 1986 года. Ограничения Год, назначенный в системной переменной DATE$ ----------- должен лежать в диапазоне 1980-2099. См. также TIME$ Пример: 'отобразить текущую системную дату print "текущая системная дата";DATE$ input "пожалуйста, введите новую дату в форме мм-дд-гг";НоваяДата$ DATE$=НоваяДата$ print "Текущая системная дата установлена на ",DATE$ end Оператор DECR ------------- Функция DECR сбрасывает переменную. ------- Синтаксис DECR переменная[,размер] --------- Замечания Переменная - это численная переменная, а --------- размер-опциональное числовое выражение, которое указывает значение, которое должно вычитаться из переменной. Если размер опускается, используется 1. DECR-лучший способ сбрасывания переменной. Для приращения переменной используйте оператор INCR. См. также INCR Пример: i%=15 j%=500 while i%>0 print i%,j% decr i% decr j%,5 'сбросить значение на 5 wend end Оператор DEF FN/END DEF ----------------------- Функция DEF FN/END DEF определяет функцию. ------- Синтаксис Единичная строка: --------- DEF FN идентификатор[(список аргументов)]=выражение Многострочная: DEF FN идентификатор[(список аргументов)] [LOCAL список переменных] [STATIC список переменных] [SHARED список переменных] . . . [EXIT DEF] [FN идентификатор=выражение] END DEF Замечания Идентификатор - это уникальное имя, которое --------- должно ассоциироваться с функцией и следовать соглашению об наименовании меток и переменных (т.е. представлять собой букву, за которой следует любое число букв и/или цифр). Список аргументов - это опциональная, разделяемая занятыми последовательность формальныхпараметров. Параметры, используемые в списке аргументов, служат только для определения функции: они не имеют взаимосвязи с другими переменными программы, имеющими те же имена. Cкобки DEF FN и END DEF и имя подобной субпрограмме группы операторов называется функцией. Функции может оп- ционально подаваться один или более аргументов по назначению. Функции возвращают значение (тип которого управляется соответсвенно имени функции, как если бы это была переменная) и поэтому могут вызываться из любого оператора, которое способно принимать значение подходящего типа. Оперделение функций и программный поток --------------------------------------- Положение определений функций не имеет значения. Функция может быть определена в строке 1 или строке 1000 программы, вне зависимости от того,где она используется и вам нет необходимости пропускать программный поток непосредственно через функцию в качестве шага возбуждения (что вы обязаны делать с однострочными функциями в Интерпретаторном Бейсике). Компилятор просматривает ваши определения, где бы они ни были. Также, в отличии от подпрограмм, исполнение не может неожиданно "приняться" за функцию. Для всего, что касается исполнительного прохода программы, определения функций и процедур невидимы. Например: t=fnВыдатьШтат def fnВыдатьШтат print "Выдаю из fnВыдатьШтат" end def Когда исполняется эта четырехстрочная программа, сообщение появляется только один раз, поскольку ВыдатьШтат вызывается только в первой строке. Определения функций должны трактоваться как изолированные острова кода; ни переходов в них, ни переходов из них с помощью оператора GOTO, GOSUB или RETURN не существует. Однако в пределах самих определений такие операторы существуют . Следует заметить, что определения функций и процедур нельзя гнездовать, т.е. незаконно определять процедуру или функцию внутри процедуры или функции (каждое определение процедуры или функции может содержать вызовы других процедур). Заявления локальных переменных(только многострочные функции) ------------------------------------------------------------ Чтобы заявить локольные переменные в пределах функции, перед любыми используемыми операторами в определении используйте оператор LOCAL. Например LOCAL a%,b#,БольшойМассив%() Создает три локальных переменных: a%, b#, (целое и двойной точности соответственно) и массив БольшойМассив%. Затем массив должен быть надлежащим образом образмерен: DIM DYNAMIC БольшойМассив%(1000) Синтаксические и разделяемые переменные --------------------------------------- По умолчанию, переменные которые используются в определении функций, имеют атрибут SHARED (разделяемые); т.е. они являются глобольными для остальной программы. Поскольку это умолчание может измениться, вы обязаны затрачивать- усилия на заявление каждой используемой в функции переменной. Заявляйте переменные с атрибутом STATIC, если важно чтобы переменная не теряла своего значения прикаждом возбуждении, но еще могла быть изменена только внутри функции. Определение многострочной функции обычно включает в себя назначение идентификатору функции и должно завершатся END DEF. Если вы делаете выбор не включать назначение идентификатору функции, то значение возвращаемое из функции неопределенно. Используйте для возвращения из функции где-то в ином месте, чем в конце ее, оператор EXIT DEF. См. также LOCAL SHARED STATIC Пример: $STACK &H&FFF Всего=1 def fn факториал%(i%) 'Эта функция вычисляет факториал параметра i% Всего=Всего*i% if i%>1 then Саб%=fnфакториал%(i%) endif fnфакториал%=Всего end def 'конец функции fnфакториал print "Ввести число,которое вы желаете обсчитать" input "факториал:",j% print fnфакториал%(j%) end Операторы DEFINT, DEFLNG, DEFSNG, DEFDBL, DEFSTR ------------------------------------------------ Функция Заявляют тип идентификаторов переменных по умолчанию. -------- Синтаксис DEFтип буквенный диапазон[,буквенный диапазон]... --------- Замечания Тип представляет один из пяти типов переменных --------- Турбо-Бейсика: INT (целое), LNG (длинная целая), SNG (единичной точности), DBL (двойной точности) и STR (строчная). Буквенный диапазон - это либо одна алфавитная литера (от а до z, регистр безразличен), либо диапазон букв (две буквы, разделенные тире; например, А-М). Оператор DEFтип сообщает компилятору, что переменные и определяемые пользователем функции, начинающиеся со специфицированных букв или диапазона букв, будут определенного типа. Это дает вам возможность использовать переменные, иные, чем с плавающей точкой единичной точности, в вашей программе без включения идентификаторов типа (например, %,#) По умолчанию, когда компилятором обнаруживается имя переменной без идентификатора типа, оно предполагается переменной с плавающей точкой единичной точности. Например, в приведенном ниже операторе и N и M полагаются имеющими единичную точность: N=M+16 Если, однако, этому оператору предшествовало DEFINT N,M, то N и M должны быть целыми, как и любая другая переменная, имя которой начинается с N или M верхнего или нижнего регистра. Исполнение DEFтип в Турбо-Бейсике отдичается от исполнения в Интерпретаторном Бейсике. Интерпретатор судит о типе соответственно тому, где появился оператор DEFтип в порядке исполнения программы. Турбо-Бейсик, как компилятор, рассматри- вает положение DEFтип в исходном файле. Например, при исполнении этой программы: 10 goto 30 20 defint a-m 30 j=45.3:print j Интерпретаторный Бейсик никогда не заметит заявление типа в строке 20. Когда он добирается до j в строке 30 это j становится переменной единичной точности и не читается как 45.3. Турбо-Бейсик, наоборот, принимает решение о типе переменной во время компиляции вне зависимости от исполнительного прохода (о котором во время компилировании ничего не известно). Необходимо позаботится только отом, чтобы оператор DEFINT физически появился до появления j впервые, в результате чего j оказывается целой переменной и распечатывается 45. Ограничения Оператором DEFтип будет переопределяться тип ----------- любых соответствующих переменных, которые уже используются в программе. Программа следующего примера демонстрирует этот крайне важный момент. Пример: i=39567.999 print "число ед.точности",i defsng i print "целое число",i defdbl a-c deflng j-z a=32767.1 z=-1 i=&H8FFF print "три разных типа",f,z,i end Оператор DEF SEG ---------------- Функция DEF SEG определяет сегмент данных, подлежащих ------- использованию операторами BLOAD, BSAVE, CALL, ABSOLUTE, PEEK и POKE. Синтаксис DEF SEG [=числовое выражение] --------- Замечания Числовое выражение может находится в диапазоне --------- от 0 до 65535. DEF SEG определяет сегмент памяти в котором будут специфицироваться ответвления последущими операторами BLOAD, BSAVE, CALL, ABSOLUTE, PEEK, POKE. Сегмент-это адресующая конструкция, используемая процессорами семейства Интел 86. Адреса должны специфицироваться двумя целыми, сегмент и ответвление в сегмент. DEF SEG без аргумента возвращает значение сегмента к его значению по умочанию на момент запуска. Первые 256 байтов сегмента по умолчанию содержат информацию, используемую системой поддержки времени прогона вашей программы. В этом сегменте есть один интересный адрес при ответвлении &HF4E. Значения вставленные командой POKE по этому адресу изменяют текст записанный на экране в любом графическом режиме. Цвет зависит от того, в каком режиме вы находились. Другой полезный адрес в сегменте данных по умолчанию находится в ячейке 0 и 1. Это слово содержит сегмент строк Турбо-Бейсика. См. также COLOR Пример: 'Эта программа позволяет заполнить экран буквами А, 'вставленными непосредственно в видео-память, определить 'функцию, которая устанавливает адрес видео-памяти, 'получить тип видео-платы от пользователя def fn ВидеоЭкран% local ЭкранаТип% print "тип экрана ?" input "[1 для моно,2 для цветного]",ЭкранаТип% select case ЭкранаТип% case 1 fn ВидеоЭкран%=&HB000 case 2 fn ВидеоЭкран%=&HB800 end select end def def seg=fnВидеоЭкран% for i%=0 to 4000 step 2 poke i%,asc("A") next i% end Оператор DELAY -------------- Функция DELAY вставляет паузу ------- Синтаксис DELAY секунды --------- Замечания секунда - это числовое выражение, определяющее --------- число секунд паузы, выполняемой Турбо-Бейсиком перед использованием следущего оператора. Примечание: DELAY принимает аргументы с плавающей точкой, а дробные задержки можно специфицировать с разрешением примерно 0.054. Использование DELAY, а не программного цикла ничегонеделания, сказывается на программах, которые прогоняются на машинах с разной скоростью обработки (т.е. базирующихся на 8088 по сравнению с базирующимися на 80286, или 6 Мгц по сравнению с 8 Мгц). Пример: print "Нажмите любую кнопку для завершения программы" while not instat locate 10,30 print time$ delay 5 wend end Оператор DIM ------------ Функция DIM заявляет массив ------- Синтаксис DIM{static!dynamic}переменная(подстрочный индекс)[,переменная(подстрочный индекс )]... DIM {static!dynamic}переменная(мин:макс)[,мин:макс]...)[,пере- менная(мин:макс)[,мин:макс]...)]... Замечание Переменная - это идентификатор, используемый для --------- массива. Подстрочный индекс - это разделяемый запятыми список одного или более целых выражений, определяющий размеры массива. DIM заявляет массивные переменные и определяет их размер и число измерений. В порядке улучшения синтаксиса интерпретаторного Бейсика, Турбо-Бейсик дает вам возможность определять диапазон значений подстрочных индексов (мин:макс), а не только верхний предел, например: DIM B(50:60) создает массив из 11 элементов единичной точности, нумеруемых от 50 до 60. Оператором DIM C(50:60,25:45) создается двумерный массив с общим числом элементов 11*21. Синтаксис диапазона можно расширять на многомерные массивы: DIM рождения(1800:1899,1:12) Для определения наименьшего элемента в массиве можно также использовать связанные операторы OPTION BASE, хотя диапазонный механизм более мощное и предпочтительное средство. Когда программа используется впервые, Турбо-Бейсик устанавливает каждый элемент числового массива в 0, а строчные массивы-в нуль-строку (длина=0). Если программа запускается вновь с помощью оператора RUN, числовые массивы повторно устанавливаются в ноль, а строчные массивы в ноль-строку. Если массивная переменная используется без предшествующего оператора DIM, максимальным подстрочным индексом является значение 10 по умолчанию, как если бы включили (10) в ваш оператор DIM. Однако предпочтительно в практической работе заявлять каждый массив явно. Минимальное значение, которое можно использовать в качестве подстрочного индекса в мaссивах, есть 0, если не специфицируется иное с помощью команды OPTION BASE. Опциональные аргументы STATIC и DYNAMIC управляют, соответственно, тем, будет ли пространство для массива заранее распределяться компилятором, или подлежит распределению динамически. Если этот аргумент опускается, массивы по умолчанию размещаются как статические, если уже не задан метаоператор $DYNAMIC, если в заявлении DIM не используется какое-либо выражение, если имя массива не появляется в двух операторах DIM или если массив не заявлен локальным в процедуре либо функции. Переключатель проверки границ, доступный через меню опций,вызывает создание компилятором кода, которым проверяется приемлемость подстрочных индексов при всякой ссылке на массив. Различия Турбо-Бейсик дает возможность программисту -------- специфицировать начальный и конечный индексы массива. Интерпретаторный Бейсик размещает все массивы динамически, но Турбо-Бейсик будет пытаться разместить их статически (во время компилирования), что делает их более быстродоступными. Вы можете явно преодолевать тип используемого размещения. См.также $DYNAMIC FRE $STATIC Пример: %МаксРазм=20 %МинРазм=1 dim Массив%(%МинРазм:%МаксРазм) for счетчикi%=%МинРазм TO %МаксРазм Массив%(счетчикi%=%Минразм to %МаксРазм Массив%(счетчикi%)=int(rnd*10) next счетчикi% end Оператор DO/LOOP ---------------- Функция DO/LOOP-это цикл с текстом TRUE (истинно) или FALSE ------- (ложно) в верхней и/или нижней части цикла. Синтаксис DO[{WHILE!UNTIL}выражение] --------- . . операторы [EXIT LOOP] . [LOOP!WEND][{WHILE!UNTIL}выражение] Замечания Выражение - это числовое выражение, в котором --------- ненулевые значения представляют TRUE, а нулевые-FALSE. DO и LOOP представляют собой строительные элементы циклов для всех случаев. Они позволяют вам создавать циклы с тестированием условия завершения в верхней части цикла, в нижней его части и в обоих местах. Оператор DO всегда должен быть в паре с оператором LOOP в нижней части цикла. Несоврадение DO и LOOP приводит к ошибкам периода компилирования. Используйте WHILE и UNTIL для добавления какого-то теста к DO/LOOP. Использование резервированного слова WHILE удобно при необходимости повторения цикла, если выражение ИСТИННО и его прекращении, если выражение ЛОЖНО. UNTIL вызывает противоположный эффект, т.е. цикл будет прекращаться, если условие ИСТИННО, и будет повторятся, если оно ЛОЖНО. Например: DO WHILE a=13 . .ОПЕРАТОРЫ . LOOP исполняет операторы между DO и LOOP,пока а равно 13. DO UNTIL a=13 - . .ОПЕРАТОРЫ . LOOP исполняет операторы между DO и LOOP, пока а не равно 13. В любой точке DO/LOOP вы можете включать оператор EXIT/LOOP. Это эквивалентно GOTO к оператору, которое выполняется после завершения LOOP. (Более подробно см. в описании оператора EXIT). Обратите внимание на то, что это DO/LOOP: DO WHILE A 0 then select case Который% case 1 call Пустая Проц end case 2 print fnПустая Функц$ end case else print "Был сделан незаконный выбор" end select end if end Оператор ENDMEM --------------- Функция ENDMEM возвращает адрес конца физической памяти. ------- Синтаксис y=ENDMEM --------- Замечания ENDMEM возвращает длинное целое, представляющего --------- адрес последнего байта физической памяти. ENDMEM в сочетании с MEMSET можно использовать для размещения пространства в высокой памяти для программ на языке ассемблера. Пока используется программа, находящаяся в памяти, ENDMEM в действительности возврващает конец физической памяти минус размер символьной таблицы. Когда Турбо-Бейсик осуществляет компилирование в память, он обеспечивает хранение символьной таблицы по наивысшему адресу памяти. См.также MEMSET Пример PRINT "Конец адресуемой памяти равен:",endmem end Оператор ENVIRON ---------------- Функция ENVIRON модифицирует информацию в таблице среды. ------- Синтаксис ENVIRON строчное выражение --------- Замечания Строчное выражение определяет имя параметра, --------- подлежащего изменению, добавлению или стиранию, и собственно информацию о новом параметре. Эти две части должны разделятся знаком равенства (=). ENVIRON и родственная ему функция ENVIRON$ используютяс для конфигурации среды, подлежащей подаче в программы,исполняемые через оператор SHELL. (Подробную информацию см. в описании оператора SHELL и команды SET в справочном руководстве по DOS) . Например: ENVIRON "PATH=\TURBOBAS" устанавливает DOS-параметр PATH на "TURBOBAS". Следовательно про- пущенная через SHELL копия COMMAND.COM будет автоматически искать справочник \TURBOBAS для нахождения файлов, которых нет в текущем справочнике. Чтобы стереть параметр из таблицы среды, после знака рквенства ставится только двоеточие (:): ENVIRON "PATH=:" стирает из таблицы среды параметр прохода(PATH) Ограничения Вы не можете расширять пространство среды. Чтобы ----------- добавлять новые входы вы должны освободить пространство, стирая существующие входы. См. также ENVIRON$ SHELL Пример PRINT ENVIRON$("PATH") ENVIRON "PATH=\" Функция ENVIRON$ ---------------- Функция ENVIRON$ выдает параметр таблицы среды ------- Синтаксис s$=ENVIRON$(строка параметров) --------- s$=ENVIRON$(n) Замечания Строка параметров - это строчное выражение, ---------- содержащее параметр, подлежащий выдаче. n-целое выражение в диапазоне от 1 до 255. ENVIRON$ и родственный ей оператор ENVIRON используются для конфигурирования среды, подлежащей подаче в программы, используемые через оператор SHELL. Если используется строчный аргумент, ENVIRON$ возвращает текст, который следует за строкой параметров в таблице среды. Следует заметить ENVIRON$ делает различие букв верхнего и нижнего регистров. Если строка параметров не обнаруживается или за знаком равенства никакой текст не следует, возврашается нуль-строка. Если используется числовая форма, ENVIRON$ возвращает строку, содержащую n-ый параметр, считая от начала таблицы. Если n-го параметра нет, возвращается нуль-строка. Функция EOF ----------- Функция EOF возвращает состояние конца файла. ------- Синтаксис y=EOF(ФайлНом) --------- Замечания ФайлНом - это значение, специфицированное при --------- открытии файла. EOF возвращает TRUE (-1), если на специфицированном файле был достигнут конец файла; иначе возвращается FALSE (0). EОF законна только для дисковых файлов, открытых для последовательного доступа и для коммуникационных файлов. Возвращение функцией EOF (-1) для коммуникационных файлов означает, что буфер пуст. Пример OPEN "TEXT.DTA" FOR INPUT AS #1 верх: IF EOF(1) THEN PRINT C"записей (строк) в файле TEXT.DTA" ENDIF INPUT#1,пусто$ C=C+1 GOTO верх 'или ,более элегантно OPEN "TEXT.DTA" FOR INPUT AS #1 WHILE NOT EOF(1) INPUT#1 пусто$ INCR c WEND PRINT c" записей (строк в файле TEXT.DTA":END Функция ERADR ------------- Функция ERADR возвращает адрес самой последней ошибки. ------- Синтаксис y=ERADR --------- Замечания ERADR возвращает значение длинного целого, --------- представляющего положение самой последней ошибки. ERADR есть некоторое значение программного счетчика, которое выводилось бы, но не выведено, поскольку не включилось отслеживание ошибок (т.е. его можно можно использовать посредством включения выбора ошибок из меню опций для нахождения положения в исходной программе того оператора, которое генерирует ошибку). ERADR предназначена в качестве функции некоторой последней пересортировки в подпрограммах обработки ошибок. Если какая-то подпрограмма ошибок не располагает схемой обработки конкретной ошибки, вы, по крайней мере, можете вывести код ошибки (ERR) и ERADR на экран, и таким образом сообщить вашим пользователям о необходимости отчитаться о случившимся. См.также ERL ERR ERROR ON ERROR Пример ON ERROR GOTO ЛОВУШКА DIM X%(10) FOR I%=1 TO 10 READ X%(I%) 'СЧИТАТЬ X 10 РАЗ PRINT X%(I%) ' NEXT I% 'В ПАМЯТИ НЕДОСТАТОЧНОЕ ЧИСЛО ЭЛЕМЕНТОВ ДАННЫХ DATA 1,2,3,4,5,6,7 END 'СЛЕДУЮЩИЙ ОБРАБОТЧИК ОШИБОК ВЫВОДИТ НОМЕР И АДРЕС ОШИБКИ ЛОВУШКА : LOCATE 10,15 'ВЫВЕСТИ СООБЩЕНИЕ В СЕРЕДИНЕ ЭКРАНА PRINT "ОШИБКА ТИПА "ERR" ПРОИЗОШЛА ПО АДРЕСУ "ERADR LOCATE 11,15 PRINT "ПОЖАЛУЙСТА, ОТМЕТЬТЕ ЭТИ ЗНАЧЕНИЯ И СВЕРТЕСЬ С РУКОВОДСТВОМ" END Оператор ERASE -------------- Функция ERASE стирает динамические массивы и повторно ------- устанавливает статические. Синтаксис ERASE имя массива[,имя массива]... --------- Замечания Имя массива - это имя того массива(вов), --------- который вы желаете повторно установить или исключить из размещения. Следует заметить, что пустые скобки не должны входить в ИМЯ МАССИВА. Если ИМЯ МАССИВА относится к динамическому массиву, его пространство в памяти освобождается и это имя массива в дальнейшем можно образмерить вновь с помощью другого оператора DIM.Если ИМЯ МАССИВА относится к статическому массиву, при стирании с помощью ERASE его элементы просто очищаются в 0 (или в нуль-строку, для строчных массивов). Ограничения Вы не можете стереть массив, который никогда не ----------- существовал, или в случае динамических массивов уже был стерт. Различия Турбо - Бейсик дает возможность создания -------- статических массивов, которые быстрее динамических массивов. Интерпретаторный Бейсик допускает только динамические массивы. См.также CLEAR DIM $DYNAMIC FRE $STATIC Пример ON ERROE GOTO ОшибокОбработчик PRINT FRE(-1) DIM DYNAMIC БольщойМассив(10000) БольшойМассив(6666)=66 PRINT FRE9-10 ERASE БольшойМассив PRINT FRE(-1) 'этот оператор будет возвращать ошибку, если программа будет 'прогоняться с включенной проверкой границ PRINT БольшойМассив(6666) END Ошибок Обработчик: PRINT "ошибка типа "ERR PRINT "произошла по адресу "ERADR END |