ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 3 При обнаружении ошибки программа переводится в редактор в точке нахождения ошибки. Описание ошибки отображается в "строке состояния" редактора. Исправьте ошибку и повторите компиляцию. Команда Options (Варианты) Команда Options обеспечивает спускающееся меню режимов работы компилятора (см. рис. 3-4). Эти режимы общие, управляющие всей компиляцией, если только их не замещают внутренние метаоператоры исходной программы. ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і File Edit Exe Compile Options Setup Window Debug і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДґ ГДДДДДДДДДДДДДДДДДДДДДЕditЪДДДДДДДДДДДДДДВДДДДДДДДїіTrace і і C:NONAME.BAS Line 1 CіCompile to іOFF іі і і і8087 required і ON іі і і іKeyboard breakіOFF іі і і іBounds іOFF іі і і іOverflow іOFF іі і і іStack test іOFF іі і і і---------------------- іі і і іParameter line іі і і іMetastatments іі і ГДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДЩі і ГДДДДДДДДДДД Message ДДДДДДДДДїЪДДДДДДД Run ДДДДДДїі і і іі іі і і іі іі і і іі іі і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДББДДДДДДДДДДДДДДДДДДББДДДДДДґ іF1-Help F5-Zoom F7-Gate SCBOOL-Size/weve Alt-X-Exitі і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Рисунок 3-4. Меню Options. Compile to (Компилировать в) Эта установка позволяет компилировать программы в память, файл типа EXE или в цепочечный файл. Нажмите C и Enter (или просто Enter) для выхода в всплывающее меню, в котором перечислены данные варианты, а затем сделайте выбор с помощью "стрелок" или нажатием клавиши, соответствующей высвеченной прописной букве. По умолчанию Компилировать в Память лучший вариант для от- ладки и тестирования программы, поскольку дает самый скорый ре- зультат. Составление файлов типа EXE заставляет компилятор создавать программы, которые запускаются из операционной системы. Обычно этот режим выбирают после отладки программы, если некоторые ха- рактеристики языка (например, CHAIN/составление цепочек) может быть проверено только на ДОС. Установка на Цепочечный файл позволяет составлять файлы ( с расширением TBC), пригодные для составления цепочек или запуска из составленного в ТБ файла EXE. В этих файлах нет библиотечных подпрограмм, поэтому их независимый запуск невозможен. В ТБ есть несколько ключей генерации команд, доступных из Вариантного (Options) меню. Положение ключа по умолчанию - "выкл." -дает наиболее быструю, компактную и гибкую программу. Конечно, включить некоторые или все ключи на этапах разработки или отлад- ки программы. Для выбора используйте "стрелки" или клавиши, со- ответствующие высвеченным прописным буквам в вариантах меню. Эти варианты можно сохранить в конфигурационном файле с помощью на- борного (Setup) меню. Нажатием Enter при расположении на данном варианте, можно включать/выключать следующие режимы: Обзательное использование; сопроцессора 8087; Прерывание с клавиатуры; Связки;Переполнение; Тестирование стека. Обязательное использование сопроцессора 8087 Включайте этот вариант при использовании кристалла сопроцессора 8087 для выполнения программы. При включении этого варианта ТБ генерирует наилучшие команды для операций над числами с плавающей запятой, команды быстрые и компактные, используя встроенные операторы 8087. Недостатком является то, что программа, созданная с помощью этого варианта не будет работать на машине, не имеющей 8087. При отключенном варианте 8087 (по умолчанию) программа может выполняться двумя способами: т.е. если 8087 есть, программа его использует. Если нет - использует системные программы для дости- жения того же результата (может быть, несколько медленнее). ВНИМАНИЕ: В некоторых случаях программа прочитает, что в ва- шей машине есть кристалл 8087, тогда как в действительности его там нет; например, если вы включили 8087, но еще не установили кристалл. Это вызовет либо зависание ТБ при работе программы, либо генерацию ошибок при трансляции. Параметры среды позволяют отлично решить эту проблему. Добавьте следующие данные в ваш файл AUTOEXEC.BAT: SET87 = no Более подробную информацию по параметрам среды и файлам AUTOEXEC.BAT можно найти в Приложении G к книге "ДОС: Учебник для начинающих". Прерывание с клавиатуры (Keyboard break) Если вы хотите прервать программу с помощью Ctrl-Break, включите этот вариант. Заметьте, что это относится только к Ctrl- Break, а не к Ctrl-C, который не может прервать программу ТБ. Учтите, что прерывание программы с помощью Ctrl-Break окончательно - продолжить выполнение программы в дальнейшем невозможно. Важно также отметить, что Ctrl-Break не действует до момента вывода программой текста (не графики) на экран или принтер или до осуществления ввода с клавиатуры. Это означает, что невозможно прервать выполнение последовательностей, не включающих операции ввода/вывода. Например: TightLoop: GOTO TightLoop работает до перезапуска системы.(Однако, чтобы снять эту пробле- му замкнутого цикла, ТБ оборудован вариантом Автозаписи. Другими словами, этот вариант можно включить с тем, стобы, если вам не- обходимо выйти из программы перезагрузкой, вы все же сможете сохранить/записать свою программу. См. "Наборное (Setup) меню".) Следующие варианты можно использовать для обнаружениян неко- торых типов динамических ошибок. Обычно на этапе разработки программы желательно, чтобы все эти режимы были включены для то- го, чтобы обнаружить любые ошибки. Когда же программа отлажена, выключите эти варианты для гененрирования окончательной версии программы, которая станет более быстрой и займет меньший объем памяти. Связки (Bounds) При включении этого режима компилятор генерирует команды проверки индексов массива, обеспечивающие правильность индексов массива, заданием размеров предполагаемого массива до считывания или записи указанного элемента. При включенном режиме "Проверка связок" (Bounds checking) машина немедленно сообщит об ошибке в диапазоне индекса. (ошибка 9), как только ваша программа попытается использовать слишком большой или слишком маленький - для данного массива - индекс. Рассмотри, например, программу: DIM myArray(100) x = 114 y = myArray(x) myArray не содержит 114-й элемент, хотя компилятор и не заметит этот "ляп". Однако, если программа компилируется с выключенным режимом проверки связок, при выполнении третьей строки появится сообщение об ошибке в диапазоне индекса. Если выполнять эту программу с выключенным режимом проверки связок, то об ошибке не будет сообщено и значение, установленное для y соответствует величине в памяти, которая находится на нес- колько байтов дальше последего элемента myArray. Запись в несу- ществующий элемент массива еще хуже, поскольку происходит запись в память, используемую для хранения самой различной информации. Заметьте, что компилятор всегда сообщает о заданных констан- тами индексах, выходящих за границы диапазона. Следующая прог- рамма не будет транслироваться независимо от состояния переклю- чателя Проверки связок: DIM myArray(100) y = myArray Переполнение (Overflow) Переполнение происходит, если в результате арифметических действий получается значение, выходящее за пределы объема памяти целых чисел (от -32768 до +32767). Например, фрагмент команды: x% = 22555 x% = x5 + 19000 выходит за пределы диапазона целых чисел+32767. Если компилиро- вать эту программу с включенным режимом "Проверка переполнения" (Overflow cheecking), генерируется ошибка переполнения при вы- полнении. Однако, при выключенной проверке x% придается неверное значение, а выполнение программы продолжается, словно ничего не случилось (что, возможно ,"не понравится" остальной программе). Следите за моментальным переполнением, например: y% = 20000 : x% =y% z = (y% + x%) * 2,1 И хотя конечный результат выражения (y% + x%) * 2,1 легко вписывается в формат одинарной точности с плавающей запятой, пе- реполнение произойдет, когда y% и x% складываются программой це- лых чисел перед тем, как результат преобразуется в формат оди- нарной точности и умножается на 2,1. Используйте функции CSNG и CDBL для выполнения целочисленных опреаций в формате с павающей запятой. Обратите внимание, что "Проверка переполнения" действует для целых чисел или любого из типов с плавающей запятой; однако, среди целых чисел есть некоторые исключения (например, регистро- вые вычисления) Проверка стека(Stask test) Включение этого режима заставляет ТБ генерировать команду, проверяющую конфликты стеков при вхождении в каждую подпрограмму, функцию или процедуру. Если вы подозреваете, что в ваших программах исчерпывается стековое пространство, компилируйте с вклю-ченным режимом "Stask test". Для выделения большего стекового пространства используте метаоператор $Stask. Последние два режима в Вариантном меню - Строка параметров (Parameter line) и Метаоператоры (Metastatements). Строка параметров (Parameter line) Выбор P заставляет ТБ подсказывать на строке, что COMMAND$ вернет в следующий раз при выполнении программы. Это позволяет моделировать информацию командной строки для помощи при отладке внутри ТБ. Нажатием Enter после заполнения строки и затем нажатием Esc возвращаетесь в основное меню. Метаоператоры (Metastatements) Последний вариант в Вариантном (Options) меню- Метаоперато- ры- имеет свое собственное всплывающее меню, см. рисунок 3-5. Варианты можно выбрать нажатием S для Stack (Стек), Music (Музы- ка), C для Communicatons (Связь); либо использовать "стрелки" и нажатие Enter при "попадании" на вариант. Обратите внимание, что ваша исходная программа может отменить эти установки. ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і File Edit Exe Compile Options Setup Window Debug і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДґ ГДДДДДДДДДДДДДДДДДДДДДЕditЪДДДДДДДДДДДДДДВДДДДДДДДїіTrace і і C:NONAME.BAS Line 1 іCompile to іOFF іі і і і8087 required і ON іі і і іKeyboard breakіOFF іі і і іBounds іOFF іі і і іOverflow іOFF іі і і іStack test іOFF іі і і і---------------------- іі і і іMetastatments іі і і іStack size 768 іі і ГДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДЩі і ГДДДДДДДДДДД Message ДДДДДДДДДїЪДДДДДДД Run ДДДДДДїі і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДББДДДДДДДДДДДДДДДДДДББДДДДДДґ іF1-Help F5-Zoom F7-Gate SCBOOL-Size/weve Alt-X-Exitі АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Рисунок 3-5. Меню Metastatements. Режим "Размер стека" используется для определения (пересмот- ра) размера стека. По умолчанию он составляет 1024 десятичных или 400 шестнадцатиричных байт (1 параграф составляет 16 байт). При нажатии $ машина запрашивает новый размер стека в диапазоне от 400 до 7FFE 16-тиричных байт.(См. метаоператор $STACK в главе 5) В "Музыкальном буфере" задается размер файла фоновой музыки. Если SOUND (Звук) или PLAY (Играть) не используются, полученная программа будет меньше, если поставить их на "0". Минимальный размер буфера 0, максимальный - 4096 нот. Оьратите внимание, что 1 нота составляет 8 байт; по умолчанию 32 ноты или 256 байт. (См. метаоператор $SOUND в главе 5). "Связь" относится к приемному буферу каждого коммуникационного порта. (В некоторых программах можно использовать метаоператор $ COMn для изменения выделения буферов.) Минимум - 0; максимум -32767; по умолчанию - 256 байт. Команда "SETUP" (Установка) Выбирайте SETUP для проверки любого установочного параметра, его изменения или записи текущей конфигурации в файле TB. Наборное (SETUP) меню показано на рис. 3-6. ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і File Edit Exe Compile Options Setup Window Debug і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДґ ГДДДДДДДДДДДДДДДДДДДД Еdit ДДДДВДДДДДДДДДДДДДДДДДДДБДДДДДїі і C:NONAME.BAS Line 1 Col 1 іColors іі і іDirectories іі і іMiscellanous іі і іLoad options/Window/setupіі і іSave options/Window/setupіі і іStack test іі і АДДДДДДДДДДДДДДДДДДВВДДДДДЩі ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі і ГДДДДДДДДДДД Message ДДДДДДДДДїЪДДДДДДД Run ДДДДДДїі і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДББДДДДДДДДДДДДДДДДДДББДДДДДДґ іF1-Help F5-Zoom F7-Gate SCBOOL-Size/weve Alt-X-Exitі АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Рисунок 3-6. Меню Setup. Цвета (Colors) Используйте этот вариант для установки цветов одного или нескольких системных врезок,меню или окон.Нажмите C или ENTER для вызова всплывающего меню и выберите "Окна", "Меню" или "Систем- ные врезки"(см.Рис.3-7). Есть еще несколько всплывающих меню для дальнейшего уточнения изменений в изображенном окне,меню или врезке. ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і File Edit Exe Compile Options Setup Window Debug і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДґ ГДДДДДДДДДДДДДДДДДДДД Еdit ДДДДВДДДДДДДДДДДДДДДДДДДБДДДДДїі і C:NONAME.BAS Line 1 Col 1 іColors іі і іDiЪДДДДДДДДДДДДДДДДДДДї іі і іMiіWindows і іі і іLoіMenus і іі і іSaіSystem boxes і іі і іStАДДДДДДДДДДДДДДДДДДДЩ іі і АДДДДДДДДДДДДДДДДДДВВДДДДДЩі і іі і і іі і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі і ГДДДДДДДДДДД Message ДДДДДДДДДїЪДДДДДДД Run ДДДДДДїі і і іі іі і і іі іі і і іі іі і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДББДДДДДДДДДДДДДДДДДДББДДДДДДґ іF1-Help F5-Zoom F7-Gate SCBOOL-Size/weve Alt-X-Exitі і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Рисунок 3-7. Меню Colors. Например,если вы выберите какие-то меню из первого всплываю- щего меню,то нужно будет выбирать Основное/спускающееся меню, Первое, Второе или Третье всплывющее меню. Если выбрать Ос- новное/спускающееся меню, появляется другое всплывающее меню, помогающее определить как изменить этот выбор. Варианты включа- ют: Заголовок, Окантовка, Нормальный текст, Первая буква, Зона выбора и восстановить режим "По умолчанию"(см.Рис.3-8). ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і File Edit Exe Compile Options Setup Window Debug і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДґ ГДДДДДДДДДДДДДДДДДДДД Еdit ДДДДВДДДДДДДДДДДДДДДДДДДБДДДДДїі і C:NONAME.BAS Line 1 Col 1 іColors іі і іDiЪДДДДДДДДДДДДДДДДДДДї іі і іMiіMenus і іі і іLoіWiЪДДДДДДДДДДДДДДДДБї іі і іSaіSyіMain/pull-down і іі і іStАДДґ ЪДДДДДДДДДДДДДДБДґі і АДДДДДґ іTitle іі і і іBorder іі і і іNormal text іі ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДґFirst letter іі ГДДДДДДДДДДД Message ДДДДДДДДДїЪДДДДДДДДґSelection bar іі і іі і--------------- іі і іі іRestore defaultsіі і іі АДДДДДДДДДВВДДДДДЩі ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДББДДДДДДДДДДДДДДДДДДББДДДДДДґ іF1-Help F5-Zoom F7-Gate SCBOOL-Size/weve Alt-X-Exitі і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Рисунок 3-8. Второе меню Colors. Как только вы выбрали что именно изменить в меню, например, Зону выбора, появляется блок выбора палитры. Используя "стрел- ки", выберите соответствующий цвет из палитры, нажмите Enter, а затем Esc. Окно, которое вы выбрали, отражает текущий цвет. Каталоги (Direktories) Элементы Include (импликация), Executable (выполняемые) и Turbo (турбо) определяют дисковод и маршрут для каждого из трех каталогов, используемых системой. Каталог "по умолчанию"- тот, в котором вы находитесь перед запуском ТБ. При выборе каталога машина запрашивает диск и маршрут. Напе- чатайте код дисковода и/или маршрут, нажмите Enter и ТБ примет вашу спецификацию. Если вы решили изменить избранный каталог, можно нажать Esc в любой момент до выхода из системного блока до нажатия Enter и вернуться к выбору каталогов. Каталоги Include используются для файлов, содержащих директиву транслятора "Include". Специфицировать множественные каталоги можно, разделяя их точкой с запятой. Каталог Executable используется для EXE и TBC файлов, гене- рируемых системой ТБ, а также временных файлов, создаваемых ком- пилятором. За один раз можно выбрать только один каталог. Каталог Turbo используется для собственно системы ТУРБО БЕЙ- СИК, т. е. для системного файла TB.EXE, конфигурационных фай- лов (.TB) и файлов "подсказки"(TBHELP.TBH). И вновь, каждый раз можно выбирать только один каталог. Разное Нажатие М вызывает всплывающее меню с двумя специальными параметрами: Авто-запись редактируемого. Включите этот режим, если хотите, чтобы текущий рабочий файл автоматически записывался перед прогоном программы. Резервные исходные файлы. При включении этого режима все файлы резервируются автоматически. Выключите, если не хотите, чтобы при записи каждый раз создавался резервный файл. Все варианты компилятора и значения заданий загружаются и хранятся в конфигурационном файле (если только не обозначить TB. TXE). Это очень полезно для различной подстройки среды програм- мирования. Например, при отладке программ может потребоваться включить все варианты компилятора, а также расширить Окно трас- сировки и включить флаг полной трассировки. Другой шаблон конфи- гурации может быть для окончательных компиляций без Окон трасси- ровки и прогона и полностью включенными режимами. Следующие режимы (варианты) позволяют загружать и записывать, соответственно, шаблоны конфигураций. Режимы Загрузки/Окна/Шаблон (Load/Window/Setup) Нажмите L для загрузки ТВ-файла из каталога Turbo и переформатирования системы в соответствии с содержащимися в нем параметрами. Режимы Записать/Окна/Шаблон (Save/Window/Setup) S записывает текущий шаблон в файле ТВ в каталоге Turbo. Конфигурации можно присвоить любое имя, но обычно при первом запуске ТБ автоматически используется имя по умолчанию (TBCONFIG.TB). Можно также записать указатель конфигурации в файл TB.EXE; однако, в этом случае последует запрос: хотите ли вы изменить исходный оригинал файла TB.EXE. Команды Окна Как говорилось в разделе "Основное меню", можно менять размеры и передвигать любое текущее окно, нажав Scroll Lock , а затем нажав клавишу Shift и используя "стрелки" в желаемом направлении. Поумолчанию все окна являются действующими до тех пор, пока вы не закроете их. Для включения спускающегося меню Команд окна, показанного на Рис. 3-9, нажмите W. ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і File Edit Exe Compile Options Setup Window Debug і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДґ ГДДДДДДДДДДДДДДДДДДДД Еdit ДДДДДДДДДДДДДДВДДДДДДВДїіTrace і і C:NONAME.BAS Line 1 Col 1 Insert IndіOpen і іі і і іClose і іі і і іNext і іі і і іGo to і іі і і іTile і іі і і іStack і іі і і іZoom і іі і і АДДДДДДЩ іі і і іі і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґі і ГДДДДДДДДДДД Message ДДДДДДДДДїЪДДДДДДД Run ДДДДДДґі і і іі іі і і іі іі і і іі іі і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДББДДДДДДДДДДДДДДДДДДББДДДДДДґ іF1-Help F5-Zoom F7-Gate SCBOOL-Size/weve Alt-X-Exitі і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Рисунок 3-9. Меню Окна. Open (Открыть) Нажмите O и выберите Edit (Редатировать) Run (Выполнить) Message (Сообщения) или Trace (Трассировка) из всплывающего меню. Open "активизирует" выбранное окно. Это значит, что если это окно бы-ло ранее закрыто, оно будет создано, и в любом случае "откры- тое" окно будет помещено в верхней части экрана. Все другие "оконные" команды с этого момента будут относиться к текущему окну. Close (Закрыть) Команда "прячет" текущее выбранное окно, но в нем можно писать еще. Next (Следующее) Этот вариант позволяет выбрать другое окно и сделать его текущим (рабочим), не возвращаясь в режим Open для выборки. Неоднократный нажим Next поочередно пробегает окна. В самом окне или в Основном меню для этого нужно пользоваться клавишей F6. Goto (Перейти к) После открывания окна используйте Goto для того, чтобы войти в это окно, не возвращаясь в Основное меню. Tile (Деление на непересекающиеся окна) Нажмите T для того, чтобы все действующие окна занимали равные части экрана. F6 включает текущее окно. Stack (Стек) Используйте этот режим для увеличения до максимальных размеров всех открытых окон. Нажмите F6 для вызова последнего дисплея в стеке в верхнюю часть экрана. Zoom (Распахнуть) Выбор режима Zoom (или F5) распахивает выбранное окно на всю ширину экрана; однако, этот режим работает только в окнах "Run" и "Edit". Для того, чтобы вернуться к исходному шаблону, еще раз нажмите Zoom. Команда Debug (Отлаживать) Это средство обеспечивает две важнейшие функции через спускающе еся меню" Trace (Трассировать) и Run-time error (Ошибка при выполнении). Trace (Трассировать) Эта команда позволяет установить глобальную трассировку. Этот оператор может быть отменен только встроенными операторами TRON и TROFF. В окне отображаются метки операторов, номера строк, имена процедур и функций. При выполнении в режиме Trace используйте Alt-F9 для выбора между трассировкой или выполнением вашей программы. Нажатие Alt- F10 переводит на следующую линию,метку и т.п. Run-time error Этот режим в основном используется для обнаружения ошибок, имющихся в .EXE или .TBC файлах (автономных программах); в этом случае никаких сообщений не появляется. Если вы выполняете программу в системк ТБ, все последующее выполняется автоматически. Запускайте эту функцию нажатием R или Enter; последует запрос значения программного счетчика. Затем ТБ определяет соответствующее значение в исходной программе и переводит курсор в положение ошибки. Когда происходит ошибка при выполнении, ТБ сообщает тип ошибки (всегда в цифровой форме или в словесной, если запущена из ТБ), а также значение программного счетчика процессора в момент ошибки. При повторном компилировании ТБ может пересчитать значение параметра в исходной программе, соответственно его адресу в ис- ходной программе. Рассмотрим, например программу TEST.BAS: x=256 PRINT CHR$(x) Хотя эта программа синтаксичеки верна и будеи нормально транслироваться,ошибка при выполнении бедет генерироваться, как только система попытается напечатать символ со значением 256 из ASCII-кода: ERROR 5 Illegal function call at pgm-ctr: 29 (Ошибка 5 Неверный вызов функции по программному счетчику:29) Режим "Ошибка при выполнении" использует это программное альтернативное значение для поиска оператора, вызвавшего ошибку. Обратите внимание: Если дается неверное значение счетчика - ге- нерируется сообщение "Ошибки при выполнении не обнаружено". Г Л А В А 4 ---------------------------------------------------------------- ТУРБО БЕЙСИК : Язык ---------------------------------------------------------------- Структура программы -------------------- Программы ТБ состоят из одной или более строк исходного текста, каждая из которых имеет следующий формат: [linenumber] statement [:statement] ... [`comment] [номер-строки] оператор [:оператор] ... [`комментарий] или label: метка : или $metastatement $метаоператор Linenumber - это целое число в интервале от 0 до 65535, ко- торое может произвольно обозначать строки программы. ТУРБО БЕЙ- СИК весьма "просто" относится к номерам строк. Они могут переме- жаться метками, использоваться в одних частях программы и не использоваться в других. Фактически они могут и не следовать в обычной последовательности; хотя две строки не могут иметь оди- наковый номер; ни одна строка не может одновременно иметь и мет- ку и номер. Фактически номера строк и есть метки. Statements - это "строительные кирпичики", составляющие программу. В ТБ около 100 типов операторов (см. Глава 5, где да- ется весь список). В строке может не быть ни одного оператора, либо один или несколько, отделенные двоеточием. Ниже приведены все допустимые строки ТБ: Start : (начало) <только метки> 10 <только номер строки> $INCLUDE "CONST.TBS" (импликация) <метаоператор> 20 а = а+1 <номер строки + оператор> а = а+1 : b = b+1 <два оператора> 30 а = а+1 : b = b+1 : с = а+b <номер строки + три оператора> Единственным ограничетелем количества операторов, могущих появиться в строке, является ее размер, составляющий в ТБ 249 колонок (разрядов). Знайте, однако, что многие школы программирования считают "дурным тоном" включение в строку более одного оператора, если только этого не требует данная синтаксическая структура (например, IF / THEN / ELSE = ЕСЛИ / ТО / ЕЩЕ). В отличие от интерпретируемого Бейсика, ТБ не скупится на пробелы при выполнении и коментировании программы - пробелы, коментарии и чистые строчки компилятор игнорирует. Все школы программирования считают,что "нехорошо" писать строки шире дисплейного окна редактора, имеющего 80 колонок (несмотря на шикарную возможность горизонтальной прокрутки, име- ющуюся в редакторе). Выдя за пределы 80 колонок при редактирова- нии, вы не сможете увидеть на дисплее строку целиком, да и при распечатке выглядеть это будет не очень красиво. В тех случаях, когда требования синтаксиса вынуждают вас создавать строку длиной более 80 символов (особенно знаменит этим оператор FIELD), ставьте символ подчеркивания (_) в конце строки. Это позволяет рассматривать ТБ следующую строку как про- должение первой. Эта строка может быть таким же образом продол- жена. Например: FIELD #1,30 AS name$, 30 AS address1$, 30 AS address2$,_ 15 AS city$, 2 AS state$, 5 AS zip$,_ 30 AS comments$ С точки зрения компилятора - это одна длинная строка, начи- нающаяся с FIELD и заканчивающаяся comments$, без единого символа подчеркивания. Comment - это любой текст, добавляемый в конце строки и от- деляемый от собствено программы апострофом (`). Апостроф (`) можно использовать вместо REM (комментарий) для разделения ком- ментария и оператора на строке, если только это не оператор DATA (lfyyst) (DATA посчитает его частью данных). В отличии от REM, не нужно отделять комментарий с апострофом еще и двоеточием от соседнего оператора. Приведенные ниже примеры абсолютно одинако- вы для компилятора: area = radius^2*3.14159 `вычисление площади area = radius^2*3.14159 :REM вычисление площади label (метка) должна стоять на строке одна (хотя может соп- ровождаться комментарием); она служит для идентификации непос- редственно следующего за ней оператора. Метка начинается с буквы и может содержать любое количество букв и цифр. Регистр не важен: THISLABEL и ThisLabel эквивалентны. После метки ставится двоето- чие, а операторы, относящиеся к этой метке (например, GOSUB) не должны включать двоеточий. Например SORTSUBROUNTINE: ExitPoint : a=a+I `недопустимо; метка должна быть на строке SortInvoices: GOSUB SortInvoices `обращается к метке $metastatements - это операторы,работающие на другом уровне, чем обычные операторы. Называемые директивами компилятора, они всегда начинаются с символа доллара ($). Стандартные операторы управляют компьютером программ; метаоператоры как режимы вариан- тного меню управляют компьютером во время компиляции. Примером служит метаоператор $INCLUDE, заставляющий компь- ютер ввести содержимое другого файла на указанное место в теку- щий файл. Заметьте, что метаоператоры ТБ не появляются в РЕМарках (REM) как метаоператоры некоторых других компиляторов БЕЙСИК. На строке может быть только один метаоператор. Набор символов ТУРБО БЕЙСИК. ---------------------------- ТУРБО БЕЙСИК напоминает набор для строительства программ. Он предоставляет вам набор фундаментальных языковых элементов (слу- жебных слов и символов), которые можно комбинировать в бесконеч- ных сочетаниях для создания любого компьютерного программного обеспечения. Буквы от A до Z или от a до z и цифры от 0 до 9 могут быть использованы для формирования идентификаторов (меток, парамет- ров, процедур и имен функций). Цифры от 0 до 9; символы ., + и -; а также буквы E, e, D и d можно использовать для создания числовых констант. Следующие символы имеют особое значение в ТБ: ---------------------------------------------------------------- Символ Описание / функция ---------------------------------------------------------------- = Знак равенства (оператор назначения, сравнения) + Знак плюс (сложение и оператор конкатенации строк) - Знак минус (вычитание и оператор отрицания) * Звездочка (оператор умножения) / Черта дроби (оператор деления) \ Наклонная черта влево (оператор деления целых чисел) ^ Каре (оператор возведения в степень) % Процент (целочисленный символ-определитель) & Символ "и" (символ-определитель длинных целых чисел и дескриптор недесятичных оснований) ---------------------------------------------------------------- ---------------------------------------------------------------- Символ Описание / функция (продолжение) ---------------------------------------------------------------- ! Восклицательный знак (символ-определитель с одинар- ной точностью) # Номер (символ-определитель с двойной точностью) $ Символ "доллар" (символ-определитель строки, префикс метаоператора) () Скобки (фактические параметры функции/процедуры, мас- сивы, расположение выражений по приоритету) [] Квадратные скобки (действительны только для массивов) Пробел (разделитель) , Запятая (многоцелевой отделитель) Точка (десятичная точка, отделитель расширения файла) ` Апостроф (отделитель комментария/ремарки) ; Точка с запятой (многоцелевой отделитель) : Двоеточие (отделитель оператора) ? Знак вопроса (заменитель команды ПЕЧАТАТЬ/PRINT) < Меньше (оператор сравнения) > Больше (оператор сравнения) " Кавычки (отделитель цепочки/строки) _ Символ подчеркивания (символ продолжения строки) ---------------------------------------------------------------- Резервируемые слова ----------------------------------------------------------------- ТУРБО БЕЙСИК резервирует использование нескольких слов для определенных синтаксических целей. Эти служебные слова нельзя ис- пользовать в качестве меток, параметров, именованных констант или названий процедур или функций, хотя ваши идентификаторы и могут содержать их (см. Таблицу 4-1). Например END (Конец) - недопустимое имя переменной, т.к. оно противоречит служебному слову END. Однако ENDHERE и FRIEND при- емлемы. Начинать идентификатор с FN также нельзя, поскольку это противоречит синтаксису функций, определяемых пользователем. Попытка использования служебного слова в качестве идентифи- катора вызовет синтаксическую ошибку компиляции. Таблица 4-1 Служеные слова ТУРБО БЕЙСИКа ---------------------------------------------------------------- $COM1 CLOSE ERR LOC POKE STRING$ $COM2 CLS ERROR LOCAL POS SUB $DEBUG COLOR EXIT LOCATE PRESET SWAP $DYNAMIC COM EXP LOF PRINT SYSTEM $ELSE COMMAND EXP10 LOG PRINT # TAB $ENDIF COMMON EXP2 LOG10 PSET TAN $EVENT COS FIELD LOG2 PUT THEN $IF CSNG FILES LOOP PUT$ TIME$ $INCLUDE CSRLIN FIX LPOS RANDOM TIMER $INLINE CVD FN LPRINT RANDOMIZE TO $LISTNE CVI FOR LPRINT # READ TROFF $OPTION CVL FRE LSET REG TRON $SEGMENT CVMD GET MEMSET REM UBOUND $SOUND CVMS GET$ MID$ RESET UCASE$ $STACK CVS GOSUB MKDIR RESTORE UNTIL $STATIC DATA GOTO MKD$ RESUME USING ABS DATA$ HEX$ MKI$ RETURN USR ABSOLUTE DECR IF MKL$ RIGHTS USR0 AND DEF IMP MKMD$ RMDIR USR1 APPEND DEFDBL INCR MKMS$ RND USR2 AS DEFINT INCEY$ MKS$ RSET USR3 ASC DEFLNG INLINE MOD RUNT USR4 AT DEFSNG INP MTIMER SAVE USR5 ATN DEFSTR INPUT NAME SCREEN USR6 BASE DELAY INPUT # NEXT SEEK USR7 BEEP DIM INPUT$ NOT SEG USR8 BIN$ DO INSTAT OCT$ SELECT USR9 BINARY DRAW INSTR OFF SERVICE VAL BLOAD DYNAMIC INT ON SGN VARPTR ---------------------------------------------------------------- Таблица 4-1 Служеные слова ТУРБО БЕЙСИКа (продолжение) ---------------------------------------------------------------- BSAVE ELSE INTERRUPT OPEN SHARED VARPTR$ CALL ELSEIF IOCTL OPTION SHELL VARSEG CASE END IOCTL$ OR SIN VIEW COBL ENDMEM KEY OUT SOUND WAIT CEIL ENVIRON KILL OUTPUT SPACE$ WEND CHAIN ENVIRON$ LBOUND PAINT SPC WHILE CHDIR EOF LCASE$ PALETTE SQR WIDTH CHR$ EQV LEFT$ PALETTE STATIC WINDOW USING CINT ERADR LEN PEEK STEP WRITE CIRCLE ERASE LET PEN STICK WRITE # CLEAR ERDEV LINE PLAY STOP XOR CLNG ERDEV$ LIST PMAP STR$ ERL POINT STRIG ---------------------------------------------------------------- Цифры в ТУРБО БЕЙСИКе. ---------------------- Осторожное обращение и загрузка числовых данных составляет важную часть любой системы программирования. ТУРБО БЕЙСИК в соот- ветствии с традициями БЕЙСИК был разработан так, чтобы вы могли в значительной мере игнорировать технические моменты внутренней обработки числовой информации. Если вы никогда не задумывались о таких вещах, как скорость вычислений, точность и требования к памяти, ваши программы, возможно, будут работать, как вы и ожи- дали. Однако, знание основополагающих моментов поможет вам пи- сать программы более быстрые, более точные и требующие меньшего объема памяти. Для большей эффективности ТУРБО БЕЙСИК хранит и обрабатывает числа четырьмя различными способами; т.е. обеспечивает четыре уникальных числовых "типа" данных: целые числа, длинные целые числа, с одинарной точностью с плавающей запятой и с двойной точностью с плавающей запятой. Целые числа. ------------ Самые простые числа, с которыми ТУРБО БЕЙСИК "живо спрвляется" в своих встроенных программах - целые числа. Для ТУРБО БЕЙСИКа целое число - это число без десятичной запятой (в английском варианте - точки) в интервале от -32768 до 32767. Эти значения осно-вываются на шестнадцатиричном изображении целых чисел: 32768 это 2 . Хотя этот дапазон и ограничивает использование целых чисел, наверняка большинство параметров в каждой написанной вами прог- рамме (такие, как счетчики в циклах FOR/NEXT = ПРЕДЫДУЩИЙ/СЛЕДУ- ЮЩИЙ) будут нормально работать в этих границах. Если это так, использование целых чисел позволяет создавать быстрые и компакт- ные программы. Ваш компьютер прекрасно приспособлен для произве- дения арифметических действий с целыми числами (например, произ- водит их быстро), а каждая цифра занимает только 2 байта памяти. Переключатель режима "Переполнение"(Overflow) в Вариантном (OPTIONS) меню позволяет создавать программы, в которых случаи переполнения целочисленных переменных автоматически регистриру- ются и сообщаются. Длинные целые числа. -------------------- Значительно расширив возможности интерпретирующего БЕЙСИКа, ТУРБО БЕЙСИК обеспечивает цифровой тип известный как длинные целые числа. Для того, чтобы избежать ошибок округления, длинные целые числа являются идеальными для бухгалтерских расчетов. Как и обычные целые числа, длинные целые числа не должны содержать де- сятичных запятых.Однако, в отличие от целых чисел они занимают значительный диапазон от -2147483648 до +2147483647 (-2 до 2 или от -2 млн. до +2 млн.). Недостатком такого широкого диапазона является то, что для хранения таких чисел требуется 4 байта и расчеты выполняются несколько медленнее, чем с целыми числами. Длинные целые числа достаточно эффективны и безусловно зас- луживают более близкого рассмотрения, особенно в компьютерах, не оборудованных сопроцессором 8087. В зависимости от применения вашего компьютера, десятичные запятые могут иметь гораздо мень- шее значение, чем вы полагаете. Например, суммы денег можно вы- ражать в пенни, а для отображения долларов делить на 100. Таким образом, можно выразить суммы до 20 млн. долларов. Числа с одинарной точностью с плавающей запятой. ------------------------------------------------ "С одинарной точностью с плавающей запятой" (или просто с одинарной точностью) - вероятно, самый универсальный числовой тип в ТУРБО БЕЙСИКе. Такие значения могут содержать десятичные запятые и имеют феноменальный, как отрицательный, так и положи- тельный диапазон: -от 10^-38 (число очень близкое к нулю: 0,000000000000000000000000000000000000001); -до 10^38 (гигантское число: (10000000000000000000000000000000000000). И вас уже не нужно будет убеждать в замечательных свойствах, которых не имеют числа с одинарной точностью. Скорость счета, правда, не тек высока, как в расчетах с длинными целыми числами, и для каждого числа нужно 4байта. Недостаток чисел с одинарной точностью в том, что хотя они и могут представлять как огромные, так и микроскопические числа, они не пригодны там, где требуется точность более, чем до шесто- го знака. Другими словами, одинарная точность хороша для таких, например, чисел, как $451,21 и $6411,92, но число $671421,22 не может быть представлено точно, так ка содержит слишком много цифр, равно как и числа 234,56789 или 0,00123456789; одинарная точность представления даст не более шести цифр: $671421 или 234,568 или 0,00123457. В зависимости от применения вашего компьютера это округление может быть несущественным либо крити- ческим для вас. С двойной точностью с плавающей запятой. ---------------------------------------- Двойная точность соотносится с одинарной так же, как длинные целые числа с целыми. Они занимают вдвое больше места в памяти (8 байт вместо 4) и, следовательно, требуют больше времени для вы- числений, имеют больший диапазон (10^308) и точность (16 знаков против 6 при одинарной точности). Требование по записи с двойной точностью становится особенно важным, когда мы имеем дело с массивами. При двойной точности для хранения массива, содержащего 5000 элементов, требуется 40000 байт. Целочисленный массив с таким же числом элементов занимает всего 10000 байт. Обратите внимание: в ТУРБО БЕЙСИКе используется станарт ИИЭР (Институт инжененров по электротехнике и радиоэлектронике) для арифметических действий с плавающей запятой, а не патентованный формат Microsoft, используемый в Интерпретируемом БЕЙСИКе . Поэ- тому необходимо использовать специальные трансляционные функции Майкрософт/ИИЭР (CVMS,CVMD,MKMS$ и MKMD$) для считывания и запи- си данных с плавающей запятой, содержащихся в файлах прямого доступа, создаваемом в Интерпретируемом Бейсике. (Более подробно обэтом см. раздел "Файлы прямого доступа" данной главы). Если вы еще не решили, какой тип с плавающей запятой исполь- зовать, мы предлагаем - с двойной точностью. Посуществу цифровой "движок" ТУРБО БЕЙСИКа лучше всего работает на горючем двойной точности. Его трансцендентные функции, такие как COS и LOG (КО- Синус и ЛОГарифм), дают результаты с двойной точностью. Все-таки одинарная точность, вероятно, будет лучше для больших массивов, там, где будет более очевидно ее "размерное" преимущество. Расчеты и 8087. --------------- Сопроцессор 8087 (80287 на компьютерах AT-типа) значительно сокращает разницу в скорости счета между различными типами число- вых данных. Поскольку 8087 ведет все расчеты с двойной точностью независимо от типа, это делает двойную точность еще более привле- кательной. В отличие от Интерпретируемого БЕЙСИКа ТУРБО БЕЙСИК не всегда округляет дробные части чисел в большую сторону, а каждый раз рассматривает особым образом каждое число, содержащее 5 в дробной части: число округляется в сторону ближайшего четного чи- сла. Например число 0,5 будет округлено в меньшую сторону до 0 - ближайшего четного числа. И число 9,005 тоже будет округлено в меньшую сторону, т.е. в данном случа до 9,000. Поскольку наиболее широко употребляемые методы округления чисел всегда округляют в большую сторону,ТУРБО БЕЙСИК фактичеки обеспечивает более равное распределение. Константы. ---------- Программы ТУРБО БЕЙСИКа обрабатывают два четко определенных класса данных: константы и переменные (рассматриваемые тоже в этом разделе). Переменная может изменять свое значение во время выполнения программы. Значение константы фиксируется при компи- ляции и не может изменяться во время выполнения программы. ТУРБО БЕЙСИК обеспечивает три типа констант: строковые, числовые конс- танты и, в дополнение к Интерпретируемому Бейсику, особая форма целочисленной константы - именные константы. Строковые константы. -------------------- Строковые константы - это просто группы символов: взятых в кавычки, например: "Это строка" "3.14159" "Тим Джоунс. Адвокат" Если строковая константа стоит последней на строке, закры- вать кавычки не обязательно: PRINT "Это небрежно, но допустимо. Числовые константы. ------------------- Числовые константы представляют числовые величины и состоят в основном из цифр от 0 до 9 и десятичной запятой. Впереди отрица-тельных констант должен ставиться знак минус (-); знак плюс (+) для положительных констант не обязателен. Величина точности, сообщаемая вами, определяет внутреннее представление (целое число, длинное целое число, с одинарной точностью, с двойной точностью), которым будет пользоваться ТУРБО БЕЙСИК в обработке этой константы. Если величина не содержит десятичной запятой и находится в интервале от -32768 до 32767 - ТУРБО БЕЙСИК использует свой це- лочисленный тип. Если величина - целое число от -2^31 до 2^(31-1) включитель- но (приблизительно от -2 млрд. до +2 млрд.), но вне диапазона целочисленных констант, - ТУРБО БЕЙСИК использует свой длинный целочисленный тип. (Заметьте: этого типа нет в Интерпретируемом Бейсике). Если величина содержит десятичную запятую и до шести цифр - ТУРБО БЕЙСИК использует тип с одинарной точностью и плавающей запятой. Числовая константа с десятичной запятой, состоящая более чем из шести цифр, или целое число слишком большое для длинного це- лочисленного формата, сохраняется в формате двойной точности с плавающей запятой. Например: 345,1 С одинарной точностью 1,10321 С одинарной точностью 1,103213 С двойной точностью 3453212*1234 С двойной точностью Идентификация целочисленных констант в других основаниях. --------------------------------------------------------- Иногда удобнее выражать целые числа в иных основаниях, чем десятичные. Это особенно актуально при выражении информации бинарной по своей природе, например, машинных адресов. ТУРБО БЕЙСИК позволяет специфицировать целочисленные данные в шестнадцатиричной (основание 16), восьмиричной (основание 8) и двоичной (основание 2) записи. Заметьте, что длинные целые числа не могут быть представлены в альтернативной записи. Шестнадцатиричные константы состоят максимально из четырех знаков, причем, каждый символ из интервала 0-9 и A-F, перед константой пишется &H. Восьмиричные константы содержат только цифры от 0 до 7, мак- симально могут состоять из 6 цифр и перед ними пишется &Q (или & Q или просто &). Двойчные константы содержат только нули и единицы, могут состоять максимально из шестнадцати цифр и перед ними мишется &B. Каждая из следующих констант представляет целое десятичное число 256 : 256 &H100 &0400 &400 &B100000000 Именные константы. ------------------ ТУРБО БЕЙСИК позволяет называть целочисленные константы по именам. Это усовершенствование Интерпретируемого Бейсика несолько похоже на функцию CONST Паскаля. Только целые числа можно имено- вать таким образом. Для того, чтобы назвать целочисленную константу , предварите ее идентификатор знаком (процент) % и назначьте ему целочислен- ную константу. В отличие от переменных можно использовать имен- ную константу в левой части оператора присваивания единожды, и только постоянное значение (не переменная или выражение) может быть присвоено ей. Например: %debug = -1 ` именная константа, значение -1 debug% = 112409 ` целочисленная переменная PRINT%debug,debug% ` это отдельные объекты Используйте именные константы для флагов условной трансляции (см. метаоператоры в Главе 5) и для повышения "читаемости" ваших программ. (можно также использовать именные константы для сниже- ния вероятности появления "магических чисел" в ваших программах. Магические числа - это мистичесике величины, имеющие какое-то значение для вас в момент написания программы, но не через пол- года, когда вы к ней возвращаетесь). Переменные. ----------- Переменная - это идентификатор, представляющий числовое или строковое значение. в отличие от констант значение переменной может меняться при выполнении программы. Как и метки имена пере- менных должны начинаться с буквы и могут содержать любое коли- чество букв и цифр. Не скупитесь при именовании важных перемен- ных. В отличие от Интерпретатора Бейсика длинные имена переменных в ТБ не занимают память в иомент выполнения. Переменные EndOfMonthTotals (ИтогНаКонецМесяца) и emt (икм) занимают ровно по четыре байта памяти в момент выполнения. ТУРБО БЕЙСИК поддерживает пять типов переменных: строковую, целочисленную, длинную целочисленную, с одинарной точностью и двойной точностью. Имя переменной определяет ее тип. Обычно имя переменной заканчивается символом описания типа. Строковые переменные заканчиваются знаком "доллар" ($): a$="ТУРБО БЕЙСИК" В целочисленных переменных используется знак "процент (%): a% = 15 В длинных целочисленных использован знак "амперсанд" (&): a& = 7000 В переменных с одинарной точностью с плавающей запятой ис- пользован восклицательный знак (!): a! = 1,1 Переменные с двойной точностью с плавающей запятой оканчива- ются на знак "номер" (#): a# = 1,031 Если вы не укажете символ описания типа переменной, ТУРБО БЕЙСИК использует по умолчанию тип с одинарной точностью. Для назначения дркгого типа "по умолчанию" испотльзуйте оператор "DEFтип". например: a# = 1,031 a# - переменная с двойной точностью b =16,5 b - с одинарной точностью a% = 3 a% - целочисленная переменная a# - отдельная переменная DEFINT m `тип " по умолчанию" для переменных, начинаю- щихся с m теперь целочисленный m = 16 `m - целое число Обратите внимание на то, что a%, a#, a&, a$ и a! - это пять различных переменных. Массивы. -------- Массив - это группа строковых или числовых данных, имющих одно имя переменной. Отдельные значения, составляющие массив, называ-ются элементами. Элемент массива можно использовать в операторе или выражении, где обычно используются обычные стрококвые или числовые переменные. Другими словами, каждый элемент массива -сам по себе переменная. При запуске программы каждый элемент каждого числового мас- сива устанавливается в нулевую строку(" "). DIM- оператор (уста- новка размерности) динамического массива также очищает каждый элемент. Если программа затем запускается оператором RUN, эта инициализация повторяется. Описать имя и тип массива, а также число и организацию его элементов, можно с помощью оператора DIM (установка размернос- ти). Например: DIM payments(55) -создает переменную массива "выплаты" (payments), состоящего из 56 элементов с одинарной точностью, нумеруемых от 0 до 56. Массив payments и переменная с одинарной точностью, также названная payments - это раличные переменные. Индексы. -------- Отдельные элементы массива помечаются индексами, целочисленными выражениями в скобках справа от имени переменной массива. Например, payments(3) и payments(44) - это два элемента из 56 элементов массива "payments". Обычно первый элемент массива получает значение индекса, равное 0, хотя это можно изменить, используя операторы DIM или OPTION BASE: Например: DIM payments(55) Данный оператор DIM описывает 56-элементный массив с индексными границами от 0 до 55. DIM payments(55) - - - - - - - - -OPTION BASE 1 Данный оператор DIM описывает 55-элементный массив с индексными границами от 0 до 55 вследствие применения оператора OPTION BASE. DIM payments(55) Если массив используется в программе без установки размер- ности (DIM), ТУРБО БЕЙСИК работает так, словно описан массив с одинадцатью элементами (индексы от 0 до 10). Тем не менее мы настоятельно советуем вам заняться четкой установкой размерности каждого массива, используемого вашей программой. В дополнение к функциям Интерпретируемого Бейсика по манипу- лированию массивами, ТУРБО БЕЙСИК позволяет определять диапазон значений индексов, а не просто верхнюю границу. Например, опера- тор: DIM b(50:60) создает массив b, состоящий из одиннадцати элементов с одинарной точностью, с номерами от 50 до 60. Оператор: DIM c(50:60,25:45) создает двумерный массив c, содержащий 231 (11*21) элемент. Возможность описать диапазоны индексов в ТУРБО БЕЙСИК позво- ляет моделировать структуру программных данных наиболее опти- мально для текущей задачи. Рассмотрим, например, программу, прослеживающую статистику рождаемости (birth) в 19 веке. Структура основных данных прог- раммы представляет собой массив с одинарной точностью, состоящий из 100 элементов, содержащих количество детей, рожденных каждый год прошлого века. В идеале следует создать массив, в котором будут использованы значения индексов, равные году учета рождае- мости (например, рождаемость1851) представляет, сколько детей рождено в 1851 году), и поэтому отрывок программы DIM births(1899) * * * FOR n = 1800 nj 1899 PRINT "Всего было" births(n) "рождений в" n NEXT n будет предельно прост. К сожалению, DIM births(1899) создает 1900-элементный массив, в котором первые 1800 элементов беспо- лезны. Обычно программисты, работающие в Бейсике, решают эту проблему, описывая массив как DIM births(99) и "обыгрывая" индексы: FOR n = 1800 nj 1899 PRINT "Всего было" births(n-1800) "рождений в" n NEXT n |