Журнал Радио 1 номер 1998 год. Микропроцессорная техника

Журнал Радио 1 номер 1998 год. Микропроцессорная техника ТИПОВОЙ ШАБЛОН ПРОГРАММЫ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ А. ЛОМОВ, г. Москва  Предлагается наиболее рациональная, по мнению автора, структура программы на языке высокого уровня. Она обобщает его трехлетний опыт в области программирования. Знакомство с ней поможет начинающему программисту правильно выполнить довольно сложный, но рутинный процесс создания "каркаса" своей программы и быстрее перейти к более творческой части работы - реализации закладываемых алгоритмов. Статья будет интересна и тем, кто просто желает расширить свой кругозор в этой области.

Текст шаблона программы, приведенный в табл. 1, ориентирован на системы программирования QuickBASIC 4.5. PDS 7.0/7.1 - наиболее популярные версии БЕЙСИКа для операционной системы MS DOS. Такой выбор обусловлен тем. что этот язык - начальная ступень, через которую проходит большинство программистов по причине относительной простоты его изучения. Можно считать, что с ним знакомы почти все. Вопреки распространенному мнению, БЕЙСИК продолжает развиваться. Об этом свидетельствует появление таких новейших систем программирования. как Microsoft Visual Basic 4.0 для Windows 95. Кстати говоря, Билл Гейтс, президент фирмы "Microsoft", называет себя "BASIC programmer". Пользующиеся другими системами и даже другими языками тоже почерпнут для себя много полезного - структура программ на разных языках высокого уровня в общих чертах одинакова.

ОБЩАЯ СТРУКТУРА ШАБЛОНА

Практически в любой программе на БЕЙСИКе обязательно должны быть выполнены следующие действия:

- задан тип данных; -объявлены процедуры и функции,
константы, метакоманды и т. п.;
- установлен режим экрана:
- установлена защита от перенаправления вывода с экрана на другое устройство;
-установлен общий обработчик ошибок;
-описаны массивы, присвоены начальные значения переменным и прочее;
-описан основной исполняемый модуль программы. Внутри него при необходимости могут быть заданы специальные обработчики ошибок;
- описана подпрограмма выхода и общий обработчик ошибок:
-описаны специальные обработчики ошибок;
-описаны процедуры, функции, локальные обработчики ошибок.

Конечно, в конкретной программе кое-что из перечисленного может отсутствовать. Например, если не используются массивы, то не нужны и их описания. А после установки режима экрана можно предусмотреть вывод сообщения об авторских правах или краткой инструкции по работе с программой. Особенности отдельных разделов шаблона рассматриваются ниже.

УСТАНОВКА ТИПА ДАННЫХ

В языке БЕЙСИК по умолчанию для всех переменных установлен тип single (вещественные числа одинарной точности). Но на практике большинство вычислительных операций в компьютере производится над целыми числами. Только такие вычисления дают точный результат, а вещественные значения всегда округлены, причем ошибка округления имеет свойство накапливаться. По этой причине в самом начале шаблона оператором DEFINT A-Z для всех переменных установлен по умолчанию тип integer (целые числа одинарной длины). Если все-таки потребуются несколько вещественных переменных, их можно описать отдельно. Этим приемом достигается и довольно значительная экономия памяти, так как число типа single занимает четыре байта, а типа integer - всего два.

После установки типа данных по умолчанию в программе, создаваемой на основе шаблона, должны находиться строки, объявляющие процедуры и функции (DECLARE), константы (CONST), метакоманды (например. $INCLUDE).

РЕЖИМ ЭКРАНА

Распространено ошибочное мнение, что системы программирования QuickBASIC и PDS устанавливают по умолчанию текстовый режим экрана 25 строк по 80 символов, 16 цветов. Ничего подобного! Если не принимать никаких мер, то программы на БЕЙСИКе работают в том режиме, который был задан в операционной системе. В этом легко убедиться, выполнив перед запуском БЕЙСИКа команду MODE 40. Поэтому в шаблоне программного модуля предусмотрена принудительная установка того режима экрана, который нужен для правильной работы программы.

ЗАЩИТА ОТ ПЕРЕНАПРАВЛЕНИЯ

Операционная система MS DOS предоставляет возможность перенаправлять данные, выводимые прикладной программой, с экрана на какое-либо внешнее устройство или в файл. Это делается так:

CHKDSK > CHKLIST.TXT
MEM > PRN
PAUSE > NUL

В первом случае данные направляются в файл CHKLIST.TXT. во втором - печатаются принтером, в третьем - никуда не выводятся, точнее, направляются на специально предусмотренное в операционной системе "пустое" устройство NUL. На экране во всех рассмотренных случаях не появляется ничего. Это бывает нежелательно для сложных диалоговых программ, но никакой встроенной защиты от перенаправления в системах QuickBASIC и PDS не обнаружено. Не найдено информации об этом и в литературе.

Пришлось разработать простую подпрограмму защиты. Суть ее заключается в попытке вывода символа "пробел" цветом, отличающимся от установленного ранее. Если пробел нужного цвета на экране не появился, управление передается подпрограмме выхода Quit. Можно также, не изменяя цвета, проверять факт вывода на экран какого-либо другого символа. Это может быть, например, первая буква сообщения об авторских правах:

PRINT"Copyright (С)...";
IF SCREEN(1,1)67 GOTO Quit

ОБРАБОТЧИКИ ОШИБОК

При возникновении чрезвычайной ситуации, например, попытке записи данных на дискету, защищенную от записи, неграмотно написанная программа просто прекращает работу, оставляя пользователя в неведении, что же произошло. Выручает специальная подпрограмма-обработчик ошибок, которая может не только вывести на экран сообщение об ошибке, но и указать ее причину и место, а иногда и помочь исправить, например, попросив ввести другое значение переменной.

Обработчики делятся на три типа: глобальные (общие), специальные и локальные. Первые служат для обработки ошибок, происходящих во всей программе (за исключением частей, для которых предусмотрены другие обработчики), вторые -в тех частях программы, для которых не подходит общий обработчик, а третьи - в процедурах SUB.

В тексте шаблона приведены примеры обработчиков первых двух типов, причем общий объединен с подпрограммой выхода Quit. Он применяется при "фатальных" ошибках, после которых дальнейшее выполнение программы становится невозможным. В данном случае только выводится на экран сообщение об ошибке, но можно предусмотреть любые другие действия.

Специальных обработчиков (они, как правило, задаются в основном модуле программы) может быть сколько угодно на все случаи жизни - от ошибки открытия дискового файла до отсутствия бумаги в принтере. Для каждого из них должна быть написана своя подпрограмма (например, SpecError).

В любом обработчике можно использовать оператор RESUME, определяющий, как будет вести себя программа после обработки ошибки. Если параметр этого оператора - номер строки или имя метки, работа продолжится с указанного места. Конструкция RESUME NEXT обеспечивает переход к строке, следующей за той, в которой произошла ошибка.

Задав общий обработчик ошибок, можно продолжить инициализацию: описать массивы, присвоить начальные значения переменным, подать команды установки в исходное состояние внешних устройств (например, принтера). После этого можно перейти к основному исполняемому модулю, содержащему операторы, выполняющие все то, для чего, собственно, предназначена данная программа.

ВЫХОД ИЗ ПРОГРАММЫ

Некоторые наспех написанные программы оставляют после себя на экране, к примеру, синий фон или зеленые символы. Если загружен драйвер ANSI.SYS, операционная система проигнорирует подобные выходные параметры, в противном случае забота о том. чтобы экран после завершения работы остался чистым и имел привычную цветовую гамму, возлагается на прикладную программу. В предлагаемом шаблоне это делает строка COLOR 7.0:CLS в подпрограмме Quit.

Кроме восстановления режима экрана, подпрограмма выхода обязана сделать и многое другое: закрыть все файлы (если они открывались), освободить динамическую память (если она использовалась), восстановить векторы прерываний (если они изменялись) и т. п. Никогда не надейтесь, что все это будет сделано автоматически системой программирования. В противном случае файл, в который только что записывались данные, может оказаться пустым, а программа, загруженная следующей, неожиданно откажется работать.

ПРИМЕР ПРОГРАММЫ

Простая программа - хранитель экрана, текст которой приведен в табл. 2, иллюстрирует применение описанного шаблона. Она очищает экран и выводит на него в случайном порядке различные геометрические фигуры и надписи. Оператор RANDOMIZE TIMER принимает за исходную точку для работы генератора псевдослучайных чисел не повторяющееся от запуска к запуску программы содержимое регистра системного таймера. В результате форма и последовательность фигур на экране (их параметры вычисляют в программе с помощью функции RND) получаются разными при каждом запуске.

Защита от перенаправления реализована упоминавшимся выше способом проверки кода символа, выведенного в заданную позицию экрана. Один из четырех режимов хранителя экрана выбирается в зависимости от случайного значения переменной MODE:

MODE=0. Появляются цветные окружности, постепенно исчезающие с течением времени. Эффект назван автором "капли на стекле".
MODE=1. Группами по пять штук на экран выводятся "искры".
MODE=2. На экране сверкают "молнии".
MODE=3. По экрану движутся надписи "I love you", но можно вывести и любые другие, заменив текст в соответствующем операторе PRINT.

В процедуре Delay оператором DEFS-NG восстановлен тип данных single, и все переменные в ней именно такого типа. Это сделано для того, чтобы выдержку времени можно было задавать в долях секунды, а переменная TimeO могла изменяться в пределах, превышающих допустимый диапазон значений целых чисел (-32768...32767).

Шаблон использовался и для разработки значительно более сложных программ, например, редактора платежных поручений. Все они надежно работают и получили положительные отзывы заказчиков.

╚ПТИЧЬИ╩ ИМЕНА

Наименование программного продукта OS/2 Warp получило рабочее наименование Merlin, вовсе не в честь волшебника Мерлина из известной сказки "Волшебник изумрудного города". Merlin в переводе с английского языка на русский означает "кречет" (степная хищная птица). И разработчики подразумевали именно это. Так называется один из боевых звездолетов в сериале "Звездные войны". Становится очевидной и связь между Merlin и Warp: warp - это применяемая в "звездных войнах" техника перемещения в пространстве с гиперсветовой скоростью. На горизонте просматриваются еще несколько имен птиц (или звездолетов?), которые могут быть использованы: Peregrin (сокол-сапсан) - паневропейская версия OS/2 Warp. Hawk (ястреб) - разрабатываемая сейчас версия Warp Server 5. Owl (сова) - новая файловая система, видимо, будет включена в следующую версию OS/2. А вот название Warp может не сохраниться из-за того, что компания Paramount, владеющая авторскими правами на "звездные войны", требует у IBM слишком большую сумму за использование слова Warp в качестве торговой марки.

"Мир ПК"

 

Вернуться к содержанию журнала "Радио" 1 номер 1998 год







Рекомендуемый контент




Copyright © 2010-2017 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.