metod_15.03.04_atppp_oaip_ump_2016 (1016599), страница 40
Текст из файла (страница 40)
Такимобразом, команда Make следит за соответствием TPU-файлов их PAS-файлам, принеобходимости обновляя все TPU-файлы, используемые в программе.Команда Build всегда заново перекомпилирует все модули, используемые основнойпрограммой. Если PAS-файлы не найдены, то используются их имеющиеся TPU-файлы.Подключение модулей к вызывающей программе и их компиляция производится впоследовательности их перечисления в Uses. При переходе к очередному модулю183система предварительно отыскивает все модули, на которые он ссылается. Ссылкимодулей друг на друга могут иметь древовидную структуру.
Но запрещается явное иликосвенное обращение модуля к самому себе (его рекурсия).Стандартные модулиПаскаль содержит стандартные модули SYSTEM, DOS, CRT, PRINTER, GRAPH,OVERLAY. Модуль GRAPH содержится в одноименном TPU-файле, остальные входятв состав библиотечного файла TURBO.TPL.Для использования из программы процедур и функций модулей надо послеоператора PROGRAM поместить предложение Uses, в котором должны быть указаныимена требуемых модулей. Например: Uses Printer, Crt, Graph;Модуль SYSTEM подключается к программе автоматически, без указания егоимени в Uses.Стандартные модули содержат большое число разнообразных процедур ифункций.
Подсказки о них можно получить из среды Паскаль.Процедуры и функции модуля DOS выполняют ряд действий, в том числе:- обслуживание прерываний;• проверку состояния диска;- обработку файлов (поиск в каталоге, выдачу и установку атрибутов файлов);- управление процессом выполнения программ;• управление операционной средой.Например, с помощью процедуры DiskFree ( d : word ) ; можно получить количествосвободных байт на заданном диске; при d = 1 определяется диск А, при d = 2 - диск В ит.
д. Процедуры SetDate и SetTime устанавливают в ОС текущую дату и время. Спомощью GetDate и GetTime можно получить текущую дату и время.В последующих разделах данной части рассмотрим назначение некоторых процедури функций модулей CRT и GRAPH. Более детально с ними можно ознакомиться по [9]и [11].РАБОТА С МОДУЛЕМ CRTНазначение и состав модуля CRTМодуль CRT (Cathode-Ray Tube - электронно-лучевая трубка) входит вбиблиотечный файл Turbo.TPL.
Для использования модуля CRT в программе долженбыть оператор Uses CRT;.Процедуры и функции модуля CRT предназначены для:1) управления клавиатурой, в том числе считывания кода символа нажатой клавишис высвечиванием символа на экране и без высвечивания;2) управления текстовым экраном, в том числе:а) формирования окна; б) управления положением курсора и определения координатположениякурсора; в) определения цвета фона и цвета символов на экране и в выделенномокне;1843) управления принтером, в том числе выбором шрифтов и перемещением бумаги;4) управления звуковым сигналом.Рассмотрим некоторые возможности модуля CRT.Управление клавиатуройСредства управления клавиатурой с помощью модуля CRT рассмотрим на примерах:- кодировки символов клавиатуры;- ввода текстов с их высвечиванием на экране (процедуры Read и Readln);- ввода символа без его высвечивания на экране (процедура ReadKey);- определения нажатия на любую клавишу (функция KeyPressed).При нажатии на каждую клавишу схемно вырабатывается уникальный код - кодсканирования (скан-код).
В программах он не используется. Код сканированияпрограммно преобразуется в другой код, который и используется в программах. Длянаиболее широко применимых кодов разработаны стандарты. Например, для кодировкисимволов используется код ASCII - American Standard Code for Information Interchange.Это 7-битовый код. С его помощью можно закодировать всего 128 символов с кодами0..127.
Примеры этих кодов приведены в таблице. Символы с кодами 0..31 - служебные.При выводе они представляются пробелами. Некоторые из них могут иметьсамостоятельное значение, например, 7 - звонок.Таблица . Примеры кодов ASCIIКод0781013262732353637СимволNULЗвукВозврат (BS)Новая строка(LF)Enter (CR)EOFESCПробел#$%Код3840414243484950515253Символ&()*+012345Код6566676869707172737475СимволABCDEFGHIJKКод979899100101102103104105106107СимволabcdefghijkКаждый символ в памяти занимает 1 байт (8 бит). С помощью байта можнозакодировать 256 символов с кодами 0..255. Символы с кодами 128..255 не ограниченыстандартами.
С их помощью можно кодировать национальные алфавиты и специальныесимволы псевдографики. Один из вариантов кодировки символов кодами 128..255 дан втаблице, где коды символов русского алфавита упорядочены в порядке возрастания.Таблица содержит коды символов псевдографики. С их помощью можнопредставить в текстовом редакторе или вывести операторами программы некоторыерисунки, например состоящие из горизонтальных и вертикальных одинарных идвойных линий для представления шапки таблицы, подчеркивания строк таблицы,вертикальные линии для разделения отдельных ее граф185Код128133138143148153158163168173178183188193198203208213218223228233238243248253СимволАЕКПФЩЮгин▓╖╝┴╞╦╨╒┌▀фщюєº¤Код129134139144149154159164169174179184189194199204209214219224229234239244249254СимволБЖЛРXЪЯдйо│╕╜┬╠╠╤╓█рхъяÏ•■Код Символ130В1353140М145С150Ц155Ы160а165е170к175п┤180185╣190╛195├200╚205=210╥215╫220▄225с230ц235ы240Ё245ï250.255Код Символ131Г136И141Н146Т151Ч156Ь161б166ж171л░176╡181186║191┐─196201╔206╬211╙216╪221▐226т231ч236ь241ё246Ÿ251√код Символ132Д137Й1420147У152 Ш157Э162в167з172м177▒182 ╢187╗192└197┼╩202207╧╘212217 ┘222▌227у232ш237э242Є247ÿ252 №В примере приведен текст программы, с помощью которой можно вывести значениясимволов, имеющих значения кодов, заданные с помощью переменной i.
Значениесимвола по i-коду определяется с помощью функции chr (i). Результаты выводятся по 6значений в строке.Пример. Вывод значений символов, заданных кодами.Uses CRT;vari : integer;beginClrScr;for i := 0 to 255 dobegin{ - перебор i-значений кодов }write ('i=', i,':', chr(i)); { - вывод символов на экран }if i mod 6=0 then Writeln; { - переход на следующую строку }endend.186Определить коды заданных символов, например символов русского алфавита, можнос помощью программы: код a [i] - символа определяется с помощью функции ord(a [i]).Программа вывода кодов символов русского алфавита.const a : array [1..62] of char =‘абвгдежзийклмнопрстуфхцчшщьъэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЭЮЯ’ ;var i : integer;beginfor i := 1 to 62 do { - перебор i-номеров символов массива 'а' }writeln ( 'кода[', i, '] = ', a[i], ' = ', ord( a[i] } } ;end.Воспроизвести символ большинства кодов на экране можно, нажав соответствующую ему клавишу.
Но этого нельзя сделать, например, для кодов псевдографики.Любой из символов, имеющих коды 1..255, можно воспроизвести на экране,дополнительно используя клавишу Alt. Для этого в среде Паскаль надо установитьрежим работы с цифровой клавиатурой (правая часть клавиатуры), нажав клавишу NumLock, что фиксируется индикатором Num Lock. Затем надо нажать клавишу Alt и, неотпуская ее, на цифровой клавиатуре набрать код символа, после чего отпуститьклавишу Alt. На экране воспроизведется символ, код которого был набран.Процедуры Read и Readln модуля System осуществляют ввод данных, в том числе спомощью клавиатуры.
Причем они приостанавливают выполнение программы до техпор, пока не будет нажата клавиша Enter. Для этого сначала значение набирается спомощью клавиатуры, запоминается в буфере и высвечивается на экране, и посленажатия клавиши Enter данные из буфера передаютсяв область ОП переменных программы. Ввод с помощью процедур Read и Readlnимеет следующие недостатки:1) с их помощью невозможно опознать нажатие на клавиши управления курсором(Т, 4, —>, <—) и на функциональные клавиши;2) ввод символов сопровождается их воспроизведением (эхо-повтором) на экране;3) обращение к этим процедурам приостанавливает программу до нажатия клавишиEnter.Это неудобно, например, для игровых задач.
Ряд дополнительных возможностейдают функции ReadKey и KeyPressed. Они обеспечивают потребности большинстваприкладных программ.Функция ReadKey без параметров. Она возвращает значение типа CHAR - коднажатой клавиши. С ее помощью можно считать и опознать нажатие на любуюклавишу, кроме клавиш-переключателей (Alt, Shift, Ctrl, Caps Lock). Эта функцияприостанавливает работу программы до тех пор, пока не будет нажата клавиша.Считанный символ не отображается на экране, т.
е. функция ReadKey вводит символбез высвечивания его на экране (без эхо-повтора). Это дает возможность для разработкиудобных интерактивных программ, управление которыми сводится в основном кнажатию функциональных клавиш.С помощью ReadKey можно считать коды основных клавиш (табл. 4.1 и 4.2) ирасширенные коды ПК (табл. 4.3). Расширенные коды - это коды верхнего ряда клавиш,коды правой части клавиатуры и коды комбинаций клавиш Alt, Ctrl, Shift с другимиклавишами. В случае считывания расширенных кодов при первом обращении функция187ReadKey возвращает код 0, а при втором - код расширенного набора кодов.
Примерырасширенных кодов даны в табл. 4.3. В листинге 4.15 приведена программа, котораясчитывает и выводит код нажатой клавиши, в том числе клавиши, имеющейрасширенный код. Завершается программа нажатием Ctrl + 2.Таблица 1. Примеры расширенных кодовКодКлавишаПервыйбайтВторойбайт0000000+359..6871727375077000079808182083КодКомбинацияклавишПервый ВторойбайтбайтУправляющие клавиши и их сочетание со сдиговымиCtrl + 20132Ctrl + PgUpF1..F10084.
.93SHIFT-F1 .. SHIFT-F10НОМЕ094 .. 103CTRL-F1 .. CTRL-F10Курсор вверх ↑0104 .. 113ALT-F1 .. ALT-F10PGUP0114CTRL-PRTSCRКурсор влево0115CTRL- Курсор влево←Курсор вправо0116CTRL-Kypcop вправо→END0117CTRL-ENDКурсор вниз ↓0118CTRL-PGDNPGDN0119CTRL-HOMEINS0120 .. 131ALT-1 .. ALT - (верхний рядклавиш)DEL0132CTRLСчитывание кодов с помошью ReadKey и вывод их на экран.uses Crt;varCl, C2 : char;{ - переменные для считанных символов }beginClrScr;{ - очистка экрана }repeat{ - начало цикла }Cl := ReadKey;{ - считывание первой половины кода }if C1 = #0{ - анализ значения первой половины кода }then C2 := ReadKey;{ - считывание второй половины кода }if Cl = #0 then writeln ('Cl = #0 ', ord(Cl): 5, ord(C2) :5)else Writeln ('Cl <> #0', ord(Cl) : 5 );until (Cl = #0) and (C2 = #3 );{ - это код Ctrl+2 }end.Функция KeyPressed без параметров.
Она возвращает значение типа Boolean:значение TRUE, если была нажата какая-либо клавиша, и значение FALSE, если ниодна клавиша не была нажата. Функция не приостанавливает выполнение программы.Пример. Программа, которая выводит символы 'Хх' до тех пор, пока не будет нажатакакая-либо клавиша. Цикл repeat в программе бесконечный, и программа завершитсятолько после нажатия какой-либо клавиши.Uses Crt;188beginClrScr;{ - очистка экрана }repeat{ - начало бесконечного цикла }Write ('Хх'); Delay (100); { - вывод 'Хх1 и задержка на 100 мс )until KeyPressed;{ - бесконечный цикл }end.После нажатия клавиши соответствующий ей код остается в буфере ввода. Вигровых программах, использующих функцию KeyPressed, часто надо очистить буферввода клавиатуры.














