Технологии обработки информации(лекции) / Модули_лаб.работы
.pdf11
Используя эти особенности можно очистить буфер ввода, задав в программе:
Var symbol: char;
While Keypressed do symbol:=Readkey;
Следующий цикл организует процесс ожидания нажатия любой клавиши: Repeat . . . Until Keypressed;
Можно организовать процесс ожидания нажатия определенных клавиш, например, цифровых,: от 0 до 9, а затем в зависимости от того какая была введена цифра, произвести определенные действия.
Uses crt;
Var sym: char; Begin
Writeln(' Для выбора варианта нажмите клавишу от 0 до 9'); {Очиска буфера клавиатуры}
While Keypressed do sym:=Readkey;
Repeat
sym := Readkey;
Until (sym in ['0'..'9']); {Цикл закончится только в том случае, если будет нажата одна из цифровых клавиш}
{Обработка кода нажатой клавиши} Case sym of
'0': begin |
… |
end; |
'1': begin |
… |
end; |
'2': begin |
… |
end; |
. . . |
|
|
'9': begin |
… |
end; |
End; |
{Case} |
|
End.
При использовании процедуры Readkey в буфер клавиатуры помещаются расширенные коды нажатых клавиш. Если нажимается любая алфавитноцифровая клавиша, расширенный код совпадает с ASCII-кодом соответствующего символа. При нажатии функциональных клавиш F1…F10, клавиш управления курсором, клавиш Insert, Home, Delete, End, Page Up, Page Down в буфер помещается двухбайтная последовательность: сначала символ #0, а затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией Readkey, используется для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна еще раз обратиться к функции Readkey, чтобы прочитать расширенный код клавиши. Расширенные коды клавиш можно посмотреть в книгах, с описанием языка Турбо Паскаль [1,2], а можно воспользоваться простой программой, написанной на языке Турбо Паскаль. Программа завершается при нажатии клавиши Esc.
Uses Crt;
Var sym:char; Begin
11
12
Repeat sym:=Readkey;
if sym <> #0 then Writeln(ord(sym)) else Writeln('0 ',ord(Readkey));
Until sym = #27; End.
2.1.2Управление звуком
Вмодуль Crt включены три процедуры, позволяющие запрограммировать последовательность звуков, что можно использовать для привлечения внимания в определенных ситуациях при выполнении программы.
Процедура Sound заставляет динамик звучать с заданной частотой: Procedure Sound(N);
N - выражение типа Word, определяющее частоту звука в герцах.
После обращения к процедуре включается динамик и выключить его можно
спомощью вызова процедуры без параметров Nosound.
Процедура Delay(T) обеспечивает задержку работы программы на заданный интервал времени Т (в миллисекундах), где Т - выражение типа Word,
Для генерации звукового сигнала обычно используется вызов описанных процедур по схеме Sound - Delay - Nosound.
2.1.3 Управление выводом на экран в текстовом режиме
Используемое в ПК устройство визуального отображения информации - дисплей состоит из монитора (или экрана) и блока управления - адаптера. Адаптер может работать в двух режимах: текстовом и графическом. Будем рассматривать возможности модуля Crt для адаптеров типа CGA, EGA, VGA, SVGA.
Втекстовом режиме можно задавать режимы, позволяющие изменять цвет
ичисло строк экрана (25, 43, 50) и позиций в строке (40 или 80).
Для задания одного из возможных текстовых режимов используется процедура: TextMode(Mode).
Здесь Mode - код текстового режима, константа типа Word. В качестве Mode могут использоваться следующие константы, определенные в модуле Crt:
Const
BW40 = 0; {Черно-белый режим 40 х 25} Co40 = 1; {Цветной режим 40 х 25} BW80 = 2; {Черно-белый режим 80 х 25} Co80 = 3; {Цветной режим 80 х 25}
Font8x8 = 256; {Используется для загружаемого шрифта в режиме 80 х 43 или 80 х 50 с адаптерами EGA или VGA}
Код режима, установленного с помощью вызова процедуры Textmode, запоминается в глобальной переменной модуля Crt - LastMode (тип Word) и может использоваться для восстановления начального состояния экрана.
12
13
Процедура TextMode сбрасывает все предшествующие установки цвета и окон, очищает экран и переводит курсор в его левый верхний угол.
Втекстовом режиме можно открывать окна - области экрана, в которые можно выводить текстовую информацию. Для этого используется процедура
Windows(X1, Y1, X2, Y2), где
X1,Y1 - координаты верхнего левого угла окна; X2,Y2 - координаты нижнего правого угла окна. Левый верхний угол экрана имеет координаты (1,1).
Сразу после вызова процедуры курсор помещается в левый верхний угол окна, а само окно очищается (заполняется цветом фона) после очистки экрана.
Если какая либо из координат (X1, Y1, X2, Y2) выходит за границы экрана или не верно указана, то процедура не выполняется.
Впрограмме одновременно можно открыть несколько окон, координаты любого из окон задаются всегда в "абсолютных" координатах, т.е. относительно начала экрана.
Очистка текущего окна или всего экрана осуществляется с помощью процедуры Clrscr.
Для установки цвета фона (экрана) используется процедура TextBackGround(N), N - выражение типа Byte, задающее код цвета. Этот код удобно задавать с помощью констант, объявленных в модуле Crt: N от 0 до 7.
Const
Black = 0; { Черный} Blue = 1; { Синий} Green = 2; { Зеленый} Cyan = 3; { Голубой} Red = 4; { Красный}
Magenta = 5; { Фиолетовый} Brown = 6; {Коричневый} LightGray = 7; { Светло-серый}
Цвет фона изменится после того, как в программе будет использована процедура очистки экрана Clrscr (производится заполнение экрана или окна заданным цветом фона).
Для задания цвета символов (пера) используется процедура TextColor(N). N от 0 до 15: первые 8 цветов те же, что используются для задания цвета фона.
Остальные цвета задаются следующими константами: Const
DarkGray = 8; {Темно-серый} LightBlue = 9; {Светло-синий} LightGreen = 10; {Светло-зеленый} LightCyan = 11; {Ярко-голубой} LightRed = 12; {Светло-красный}
LightMagenta = 13; {Светло-фиолетовый} Yellow = 14; {Желтый}
White = 15; {Белый}
13
14
Здесь же определена константа, которая задает режим мерцания символов: Blink = 128;
Следует иметь в виду, что на некоторых типах дисплеев вместо мерцания символов (при задании вместе с цветом символов режима мерцания) изменяется цвет фона (он становится более ярким).
Для восстановления исходных цветов символов и фона можно использовать процедуру NormVideo.
Рассмотрим пример вывода информации в текстовом режиме с изменением цвета фона и символов.
uses Crt;
begin {Начало работы программы - исходные цвета} Writeln(' Начало работы программы - исходные цвета ');
{Зеленые символы на черном фоне} TextColor(Green); TextBackground(Black); WriteLn(' Зеленые символы на черном фоне ');
{Мерцающие красные символы на светло - сером фоне } TextColor(Red+Blink); TextBackground(LightGray);
WriteLn(' Мерцающие красные символы на светло - сером фоне!');
{Желтые символы на синем фоне}
TextColor(Yellow); TextBackground(Blue); WriteLn(' Желтые символы на синем фоне!');
NormVideo; {Возврат в нормальный режим цветовоспроизведения } WriteLn(' Возврат в нормальный режим цветовоспроизведения '); end.
Можно также устанавливать режимы повышенной и пониженной яркости воспроизведения цвета на экране. Для этого используются две процедуры модуля Crt: HighVideo и LowVideo, задающие повышенную и пониженную яркость, соответственно. Следует отметить, что на практике различий между нормальным и пониженным режимами яркости не наблюдается.
Следующая простая программа иллюстрирует использование процедур задания яркости.
Uses crt; begin
textcolor(blue); textbackground(black); write(' Демонстрация использования ');
highvideo;
write(' повышенной яркости '); lowvideo;
writeln(' для выделения необходимой информации на экране'); readkey;
end.
Можно управлять цветом фона и символов, мерцанием и режимами яркости с помощью задания системной переменной TextAttr, определенной в модуле Crt. Тип этой переменной - byte и она может принимать значения от 0 до 255. Каждый из восьми битов этой переменной содержит определенную информацию:
14
15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
6 |
5 |
|
4 |
|
3 |
|
2 |
1 |
0 |
Задает бит мерцания |
Задают цвет |
Задают цвет символов |
||||||||||
или яркости |
|
|
фона |
|
|
|
|
|
||||
|
|
TextAttr:= C1+16*C2+128; |
или TextAttr:= C1+16*C2; |
|||||||||
C1 - цвет символов (от 0 до 15); |
С2 - цвет фона (от 0 до 7); |
|||||||||||
+128 - задает мерцание или заносит в бит яркости 1, т.е. задает режим повышенной яркости.
При выводе на экран можно перемещать курсор перед выводом в нужную позицию. Для этого используется процедура: GotoXY(X,Y), где
Х - координата курсора по оси х - номер позиции в строке; Y - координата курсора по оси у - номер строки.
Координаты курсора задаются относительно текущего окна или относительно начала координат экрана, если окна не открывались.
Можно определить текущие координаты курсора на экране. Для этого используются функции, выдающие результат типа Byte:
WhereX - выдает горизонтальную координату - номер позиции в строке; WhereY - выдает вертикальную координату - номер строки экрана; Следующий пример иллюстрирует использование процедур Window,
GotoXY и функций WhereX и WhereY. Uses crt;
Var x,y:byte; pred_mode:word; Begin clrscr;
textbackground(7); {Установка цвета фона: 7 - светло-серый} textcolor(1); {Установка цвета символов: 1 - синий}
{ Включение звукового сигнала } sound(200); delay(500); nosound; {}
window(10,5,70,20); { Установка размеров окна} clrscr; { Для появления окна его надо очистить}
gotoxy(3,5); {Перемещение курсора в 3-ю позицию 5-й строки} write(' Координаты курсора в открытом окне'); x:=wherex;y:=wherey; { Определение координат курсора в окне} writeln('x=',x,' y=',y); {Вывод координат - сам курсор во время
вывода его координат перемещается}
readkey;
pred_mode:= LastMode; {Сохранение кода режима} textmode(co40);{Установка нового текствого режима } window(5,8,35,18); {Задание координат окна} textbackground(3); {3 - Cyan}
textcolor(14); {14 - Yellow}
15
16
clrscr; gotoxy(10,4);
writeln(' Режим со40 - 40 х 25 '); readkey; normvideo;
textmode(pred_mode); {Восстановление режима 80 х 25 - со80}
clrscr; |
gotoxy(30,12); |
writeln(' |
Режим co80'); readkey; |
{Следующий цикл рисует множество окон различных размеров и цвета фона - цикл продолжается до нажатия клавиши }
repeat |
|
|
|
|
X := Random(10); |
Y := Random(5); |
|
||
Window(X, Y, X + Random(70), Y + Random(20)); |
|
|||
delay(200); |
|
|
|
|
TextBackground(Random(7)); |
{ In random colors } |
ClrScr; |
||
until KeyPressed; |
|
|
|
|
{Восстановление стандартных установок текстового режима} |
||||
textcolor(7);textbackground(0); |
window(1,1,80,25); |
|
||
clrscr; |
readkey; |
gotoXY(20,12); |
|
|
writeln(' Восстановлены стандартные установки'); |
readkey; |
|||
End.
В модуле Crt имеются еще три процедуры, которые могут оказаться полезными при разработке текстовых редакторов или прокрутки содержимого экрана вверх и вииз.
ClrEOL - стирает часть строки от текущего положения курсора до правой границы окна (или экрана). Курсор при этом не меняет своих координат.
InsLine - вставляет пустую строку и сдвигает строку с курсором и все расположенные под ней вниз на одну строку - самая нижняя исчезает с экрана.
DelLine - удаляет строку в которой находится курсор и подтягивает вверх все нижерасположенные строки.
Лабораторная работа № 3.2 (16)
Разработка программ с использованием процедур и функций модуля
CRT
Цель работы:
1.Изучение процедур и функций модуля Crt.
2.Разработка программ с использованием модуля Crt.
Варианты заданий
Ва р и а н т 1
1.Открыть окно с координатами х1=10, y1=5, x2=70, y2=20.
2.Окрасить его в синий цвет.
16
17
3.Установить цвет символов - белый.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=8, y1=8, x2=36, y2=17.
8.Повторить пункты 2-5, заменив цвет фона на зеленый и символов на черный.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 500 и длительность 250, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 2
1.Открыть окно с координатами х1=6, y1=4, x2=72, y2=22.
2.Окрасить его в красный цвет.
3.Установить цвет символов - желтый.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=4, y1=4, x2=32, y2=19.
8.Повторить пункты 2-5, заменив цвет фона на синий и символов на белый.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА КООРДИНАТ И ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 800 и длительность 500, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 3
1.Открыть окно с координатами х1=12, y1=3, x2=74, y2=21.
2.Окрасить его в зеленый цвет.
3.Установить цвет символов - черный.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=6, y1=3, x2=34, y2=22.
8.Повторить п.п. 2-5, заменив цвет фона на голубой и символов на красный.
17
18
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 100 и длительность 350, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 4
1.Открыть окно с координатами х1=14, y1=5, x2=66, y2=20.
2.Окрасить его в серый цвет.
3.Установить цвет символов - сиреневый.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=5, y1=3, x2=33, y2=18.
8.Повторить пункты 2-5, заменив цвет фона на зеленый и символов на белый.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА КООРДИНАТ И ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 200 и длительность 450, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 5
1.Открыть окно с координатами х1=7, y1=3, x2=74, y2=21.
2.Окрасить его в ceрый цвет.
3.Установить цвет символов - красный.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=5, y1=3, x2=35, y2=19.
8.Повторить пункты 2-5, изменив цвет фона на голубой и символов на желтый.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА ЗВУКА И КООРДИНАТ".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 400 и длительность 450, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
18
19
Ва р и а н т 6
1.Открыть окно с координатами х1=14, y1=3, x2=74, y2=22.
2.Окрасить его в синий цвет.
3.Установить цвет символов - желтый.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=2, y1=2, x2=38, y2=19.
8.Повторить пункты 2-5, изменив цвет фона на серый и символов на яркокрасный.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА КООРДИНАТ И ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 800 и длительность 450, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 7
1.Открыть окно с координатами х1=7, y1=2, x2=74, y2=23.
2.Окрасить его в черный цвет.
3.Установить цвет символов - белый.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=8, y1=4, x2=34, y2=19.
8.Повторить пункты 2-5, изменив цвет фона на серый и символов на синий.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 300 и длительность 550, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 8
1.Открыть окно с координатами х1=2, y1=2, x2=78, y2=20.
2.Окрасить его в зеленый цвет.
3.Установить цвет символов - красный.
19
20
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=6, y1=4, x2=34, y2=18.
8.Повторить пункты 2-5, изменив цвет фона на голубой и символов на синий.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 150 и длительность 550, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 9
1.Открыть окно с координатами х1=13, y1=3, x2=68, y2=20.
2.Окрасить его в серый цвет.
3.Установить цвет символов - черный.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=4, y1=4, x2=34, y2=22.
8.Повторить пункты 2-5, изменив цвет фона на зеленый и символов на черный.
9.Восстановить текстовый режим TextMode(co80).
10.Переместить курсор в центр окна.
11.Вывести сообщение: "ПРОВЕРКА ЗВУКА".
12.Определить и вывести на экран координаты курсора.
13.Установить частоту звука 250 и длительность 650, а затем отключить звук
14.Восстановить цвета и режимы.
Вставлять функцию Readkey во всех необходимых для контроля местах.
Ва р и а н т 10
1.Открыть окно с координатами х1=9, y1=5, x2=75, y2=22.
2.Окрасить его в синий цвет.
3.Установить цвет символов - желтый.
4.Вывести на экран фамилии и имена членов бригады, расположив информацию в центре окна.
5.Очистить текущее окно.
6.Установить режим TextMode(co40).
7.Открыть окно с координатами х1=5, y1=3, x2=35, y2=19.
8.Повторить пункты 2-5, изменив цвет фона на серый и символов - желтый.
9.Восстановить текстовый режим TextMode(co80).
20
