Основы программирования (947332), страница 45
Текст из файла (страница 45)
Практикум. Создание менюКак уже упоминалось ранее, современные программы взаимодействуютс пользователями через специальный интерфейс типа «меню», в которомпользователю предлагается выбрать один из пунктов. Для реализации менюнеобходимо обрабатывать коды нажатия клавиш управления 1дфсором (>1<, Т,-^, <г-\ по которым обычно осуществляется переход на следующий пункт.Активизация пункта обычно выполняется нажатием клавиши Enter.
Послевыполнения нужного пункта программа должна вновь вьгоодить меню и продолжать работу с ним. Выход из программы осуществляется по выбору специального пункта «выход» или по нажатию клавиши Esc.Пример 8.4. Разработать вертикальное меню из четырех пунктов: new,open, save, exit. Окно меню синего цвета, названия пунктов должны быть выведены желтым цветом. Вьщеление пункта выполнить фиолетовым цветомфона (рис. 8.4). Реализовать выход по выбору пункта «exit» или по нажатиюклавиши Esc.При разработке алгоритма программы вьщелим две подпрограммы:• подпрограмму рисования пункта меню как окна с текстом внутри;• подпрограмму рисования меню с выделенным пунктом.В процессе работы основная программа вводит коды клавиш и организует работу с меню. После завершения работы такая программа должна восстановить стандартное окно 25x80 и стандартные цвета символа и фона MSDOS.Program ex;15158(Uses crt;1Var nposJ: integer;--!..,4; :'-i'f;;'; ' •chlyCh2:char;Typeopen'-Хг^^:;:У , \win=record {описьюаем типsaveexitокон пунктов меню}7xI,yJ,x2,y2:word; {координаты-;окна}'' V:-'-^^'''''25text:string[8]; {название пунктаменю}Рис.
8.4. Внешний вид менюend;.W.,,,...;264Часть 1. Основы алгоритмизации и процедурное программирование#80: beginifnpos<4 then {если не нижний пункт}beginDrawWin(menu[npos],30); {убираем выделение текущего пункта}npos:=npos-^l;{переходим к следующему пункту}DrawWin(menu[npos]y94); {выделяем новый пункт}end;end;end; {case интерпретации расширенного кода}#13: beginWindow(U,80y25);TextAttr:=7;ClrScr; {очищаем экран}case npos of1: beginWrite ('Выполнен пункт \ menu[npos].text);ReadLn;end;2: beginWrite(*BbinonHeH пункт \ menu[npos].text);ReadLn;end;3: beginWriteCВыполнен пункт \ menu[npos],text);ReadLn;end;end; {case}DrawMenu(npos); {выводим меню}end;end; {case}until (ch]=#27) or ((chl=#13) and (npos=4));Window(l.180,26);TextAttr:=7;ClrScr; {очищаем экран}EndЗадания для самопроверкиЗадание 1.
Разработайте программу исследования элементарных функций, задаваемых пользователем (см. параграф 5.2). Обеспечьте для каждой функции выводтаблицы значений на заданном интервале с заданным шагом, поиск корней и определение максимума и минимума. Взаимодействие пользователя и программы организуйте с использованием меню.2668. Управление техническими средствами и взаимодействие с MS DOSЗадание 2. Разработайте программу тестирования обучающихся по теме «системы счисления». Тестируемому должны предлагаться 6 вопросов по данной теме,включая обычные вопросы с выбором ответа из нескольких и задачи на выпрлнениеарифметических операций, когда необходимо ввести результат указанной операции.Вопросы должны случайным образом выбираться из списка, хранящегося в файле, ине повторяться.
Для ответа на каждый вопрос дается две попытки. Предусмотреть,чтобы тестирующийся мог по желанию отказаться отвечать на данный вопрос и получить правильный ответ. Оценку проводить по соотношению правильных и неправильных ответов.8.5. Управление экраном в графическом режимеВ графическом режиме программист получает возможность управлятькаждой точкой (пикселем) экрана. Координаты точки определяются относительно верхнего левого угла. Каждая точка экрана при этом может высвечиваться одним из доступных цветов. Информация о цвете точки хранится в видеобуфере.Количество цветов зависит от количества бит, отведенных в видеобуфере под одну точку.
Рассмотрим основные варианты.1. «1 точка - 1 бит» - монохромный режим: каждая точка высвечивается либо основным цветом, если в видеобуфере для точки записана 1, либоцветом фона, если в видеобуфере записан 0.2. «1 точка - 2 бита» - режим с двумя трехцветными палитрами:Палитра О:01-зеленый;10 - красный;11 - коричневый.Палитра!:01-светло-голубой;10 - сиреневый;11 - белый.Если в буфере записана комбинация 00, то точка высвечивается цветом фона.3. «1 точка - 4 бита» - режим, использующий 16-цветную палитру.
Вэтом режиме в отличие от предыдущих в видеобуфер заносится не цвет точки, а номер регистра палитры, в котором записан нужный цвет (рис. 8.5).Ддя записи цвета используется 6 бит по схеме RGBrgb, причем первыетри бита кодируют 2/3 яркости цвета, а вторые три бита - оставшуюся 1/3 яркости. Так, максимально яркий красный цвет будет кодироваться двумя единицами в первом и четвертом битах:R1j G1 О1ГВО!iг1IigОbОТаким образом, каждый цвет имеет четыре градации яркости: О, 1/3, 2/3,I, что позволяет кодировать 4^ = 64 варианта цвета. На экране в этом режи267Часть 1. Основы алгоритмизации и процедурноепрограммированиеЭкраномеррегистрапалитрыРегистр палитрыGВг£_bvЦвет точкиРис.
8.5, Формирование цвета точки в 16-цветном режимеме одновременно может присутствовать не более 16 цветов, так как имеетсявсего 16 регистров палитры.Примечание. То, что цвет точки определяется кодом, записанным в регистре палитры,позволяет получать интересный эффект: если во время работы программы изменить цвет в одном из регистров палитры, то все точки, связанные с этим регистром палитры, изменят цвет.Так можно реализовывать исчезновение и появление некоторого монохромного изображения.4.
«1 точка - 8 бит» - режим, использующий палитру на 256 цветов. Вэтом режиме используется та же идея записи кода цвета не в видеобуфер, а врегистры палитры, что и в предыдущем режиме, но используется 256 регистров палитры, в которых под запись цвета используется 18 бит. Из этих 18бит под кодирование яркости каждого цвета используется 6 бит, обеспечивая64 градации яркости каждого цвета.
В этом режиме максимальная яркостькрасного цвета будет кодироваться так:2688. Управление техническими средствами и взаимодействие с MS DOS1 1Red1 11ГГ^^^^^GreenО 00;Blue!о; О О О О О О IТаким образом, на экране можно одновременно видеть 256 цветов из64^ = 262144 возможных.В настоящее время в основном используются режимы, в которых цветкодируется еще большим количеством бит. К сожалению, работа в этих режимах и даже в режиме 256 цветов не обеспечивается стандартными средствами Borland Pascal 7.0.Количество точек на экране, набор возможных цветов и количествостраниц изображения, которые могут одновременно храниться в памяти, зависят от используемых технических средств (типа монитора и блока управления монитором - адаптера) и режимов их работы.
Для каждого типа оборудования, существовавшего на момент разработки среды программирования, среда программирования Borland Pascal 7.0 включает свою программууправления дисплеем - драйвер, которая обеспечивает работу в несколькихдоступных режимах, различающихся количеством точек на экране и количеством страниц, информация о которых может храниться в видеобуфере.Последнее время из имеющихся драйверов практически используетсятолько драйвер VGA, который обеспечивает несколько различных режимовработы. Этот драйвер находится в файле EGAVGA.BGI и ему в модуле Graphсоответствует поименованная константа VGA = 9. Режимы работы этогодрайвера и соответствующие константы Borland Pascal приведены в табл. 8.3.Набор программных ресурсов, используемых для управления экраном вграфическом режиме, содержится в модуле Graph.Процедуры и функции переключения режимов управления экраном.
Модуль Graph содержит средства, обеспечивающие различные варианты переключения текстового и графического режимов.1. Процедура InitGraplt(Var driver, mode:integer; patlt:string) - переключает экран в графический режим. При вызове процедуры следует объявитьспециальные переменные, куда занести константу драйвера и константу режима, и указать эти переменные в качестве параметров процедуры. Существует возможность запросить автоматическое определение драйвера и режиТ а б л и да 8.3Идентификатор i ^Количество цветов\ константы и номер i^на экранережима!^: VGALo =0|16; ,^, Количество точек'на экране!^640x200i!iКоличество«^^«„ .страницо ,„.о^^Лч,д.^^«I в видеобуфере14VGAMed =1!16I640x350'2VGAHi =2I16I640x480Г2\269Часть L Основы алгоритмизации и процедурное программированиема: для этого необходимо вместо константы драйвера в переменную, используемую в качестве параметра, записать константу detect = 0.Параметр path должен описывать путь, определяющий местоположениефайла, который содержит требуемый драйвер (обычно все драйверы находятся в подкаталоге BGI основного каталога среды Borland Pascal).
Если драйвер находится в текущем каталоге, то в качестве параметра передается пустая строка - ".2. Функция GrapliResult:integer - возвращает номер ошибки, обнаруженной при инициализации графического режима.3. Функция GraphErrorMSG(ErrNum:integer):string - позволяет по номеру ошибки определить ее причину.Полностью инициализация графического режима может быть выполнена следующим образом:Var dnver,mode,erwr: integer;Begindriver: =detect; {или driver: =0;}InitGraph (driver, mode, 'd: \BP \BGI');error: =GraphResult;iferroroO then {если обнаружены ошибки}beginWriteLn('Ошибка инициализации графического реэюима',GraphErrorMSG(error));Hah(l); {аварийное завершение программы}end;{работа в графическом режиме}...4.