ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 28.06.2020
Просмотров: 1680
Скачиваний: 3
СОДЕРЖАНИЕ
Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
Тема 16: Динамічна пам'ять. Адреси і покажчики
Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті
Тема 18: Процедури та функції для роботи з динамічною пам’яттю
Тема 19: Символьний тип даних. Упаковані масиви
Тема 20: Процедури та функції для обробки рядків
Тема 21: Структурований тип даних - безліч
Тема 22: Структурований тип даних – записи
Тема 23: Опис файлових змінних. Обробка типізованих файлів
Тема 24: Послідовний та прямий доступ до файлів
Тема 25: Обробка не типізованих файлів
Тема 26: Робота з текстовими файлами
Тема 28: Поняття та робота з процедурами та функціями
Тема 29: Використання модуля CRT. Програмування клавіатури
Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора
Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph
Тема 32: Бібліотечні модулі користувача
Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів
Основні алгоритми обробки масивів
Тема 29: Використання модуля CRT. Програмування клавіатури
При роботі з ТР у розпорядженні користувача є наступні стандартні модулі:
System
Dos Crt Printer Pverlay |
-містить опис убудованих процедур і функцій ТР (підключається автоматично) -містить процедури і функції відповідні командам Dos -містить процедури і функції, що дозволяють керувати екраном і клавіатурою. -зв'язує текстовий файл із файловою змінною Lst і портом Lpt1; -дозволяє організувати оверлейну структуру програм (перекриття в пам'яті); |
Модулі окремих файлів з расширением.tpu |
|
Graph.tpu Graph3.tpu |
- містить опис процедур і функцій, використовуваних у графічному режимі; - забезпечує сумісність з 3-й версією ТР |
Модуль Crt і його застосування. Для використання модуля в програмі варто підключити його в розділі Uses:
uses crt;
Після завантаження модуль знаходиться в ОЗУ.
Керування клавіатурою.
Функція keyPressed : boolean повертає True, якщо була натиснута клавіша, і False, якщо буфер клавіатури порожній.
Функція ReadKey : char зчитує код натиснутої клавіші.
Приклади програм.
{Використання функції KeyPressed}
uses crt;
var сh : char;
procedure TestKey(var ch : char);
procedure If_Pressed;
begin
gotoXY(1, Where);
ClrEoL;
Write(‘Клавіша натиснута!');
delay(500); gotoXY(1, Where);
ClrEoL; {очищення рядка}
ch := ReadKey;
if ch = #0 then ch := ReadKey;
end;
begin {TestKey}
ch := #25;
if KeyPressed then If_Pressed
end;
begin {головна програма}
ClrScr; writeln(‘Для закінчення - кл. Esc’);
repeat
TestKey(ch)
until ch = #27;
end.
{Використання процедури ReadKey. Визначення спеціальних символів}
uses crt;
var сh : char;
procedure GetKey(var ch:char);
begin
ch := ReadKey; {прийом першого символу}
gotoXY(1, Where);
ClrEol;
if ch = #0 then {якщо #0 то спецклавіша}
begin
write(‘Спецклавіша’);
ch := ReadKey;
end else write(‘звичайна клавіша: ’,ch);
end;
begin
ClrScr;
writeln(‘Для закінчення - кл. Esc’);
repeat
getkey (ch)
until ch = #27;
end.
Питання для контролю:
-
Назвіть стандартні модулі ТР. Підключення модулів у програмі.
-
Модуль Crt, керування клавіатурою.
Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора
Установка текстового режиму.
Процедура
TextMode (Mode:word) установлює текстовий режим
виведення інформації. Параметр Mode
задається ім'ям константи чи номером
режиму
(табл. 30.1):
Таблиця 30.1. Текстові режими виведення інформації.
Ім'я константи |
Номер режиму |
Екран |
Монітор |
bw40 co40 bw80 co80 mono font8x8
|
0 1 2 3 7 256 |
40x25 40x25 80x25 80x25 80x25 80/40x43 80/40x50 |
Ч/б, CGA, EGA Кольор., CGA, EGA Ч/б, CGA, EGA Кольор., CGA, EGA MDA, Hereales Кольор., EGA Кольор., VGA |
Константа Font8x8 самостійно не застосовується і повинна додаватися до інших констант, наприклад:
TextMode(co80+font8x8); - установлюється режим со80, але кількість рядків не 25, а 43 чи 50.
Установка кольору та фону.
Процедура TextColor установлює колір символів. Колір задається назвою чи номером (табл. 30.2).
Таблиця 30.2. Номери та назви кольорів
Номер та назва кольору |
Колір |
Номер та назва кольору |
Колір |
0(Black) 1(Blue) 2(Green) 3(Cyan) 4(Red) 5(Magenta) 6(Brown) 7(LightGray) |
-чорний -синій -зелений -блакитний -червоний -фіолетовий -коричневий -сірий
|
8(DarkGray) 9(LightBlue) 10(LightGreen) 11(LightCyan) 12(LightRed) 13(LightMagenta) 14(Yellow) 15(White) 128(Blink) |
-темно-сірий -світло-сірий -світло-зелений -світло-блакитний -світло-червоний -світло-фіолетовий -жовтий -білий -мерехтіння |
Мерехтіння задається додаванням до кольору константи Blink:
TextColor(Blue+Blink);
Змінна TextAttr використовується для керування кольором символів, фону, режимом мерехтіння і застосовується за формулою:
TextAttr := колір _символу + 16*колір_фону [ + мерехтіння];
Колір символу = 0...15; колір фону = 0..7; мерехтіння = 128.
Змінна має тип byte, і біти в байті несуть наступну інформацію:
0 - синій компонент кольору символів;
1 - зелений компонент кольору символів;
2 - червоний компонент кольору символів;
3 - яскравість символів(1 - є, 0 - немає);
4 - синій компонент кольору фону;
5 - зелений компонент кольору фону;
6 - червоний компонент кольору фону;
7 - мерехтіння(1- є, 0 - немає).
Процедура TextBackGround (Color byte) установлює колір фону color=0..7.
Керування рядками.
Процедура ClrScr очищає екран чи поточне вікно і поміщає курсор у лівий верхній кут.
Процедура ClrEoL стирає всі символи в рядку, починаючи з поточної позиції курсору до кінця рядка.
Процедура DelLine видаляє рядок, у якому розташований курсор, при цьому нижчестоящі рядки переміщаються нагору на одну позицію.
Установка яскравості символів.
Процедура HighVideo установлює режим максимальної яскравості.
Процедура LowVideo скасовує максимальну яскравість і встановлює нормальний режим яскравості.
Процедура NormVideo відновлює той режим (колір символів, фон, мерехтіння), що був напочатку роботи програми.
Керування курсором.
Процедура GotoXY(x, y:byte) встановлює курсор у позицію X (стовпець) і Y (рядок) щодо поточного вікна.
Функції WhereX:byte і WhereY:byte визначає координати Х та Y місця розташування курсору.
Текстове вікно.
Процедура Window (x1,y1,x2,y2:byte) формує вікно і задається координатами x1, y1 - лівим верхнім і x2, y2 - правим нижнім кутом вікна. Після виконання Window вікно стає поточним.
Керування звуком.
Процедура Sound (Hz : word) включає динамік і генерує звук з частотою Hz.
Процедура NoSound скасовує Sound. Ця процедура обов'язково повинна бути після виконання процедури Sound, інакше динамік буде звучати і після виконання програми.
Процедура Delay (t:Word) виконує затримку часу t у мілісекундах (1000млск. = 1сек.).
Приклади програм.
{Використання процедур TextMode, TextColor, Window, TextBackGround, GotoXY, ClrScr, функції Delay}
uses crt;
var i:byte;
begin
TextMode(c80+Font8x8);
Window(30, 10, 50, 15);
for i := 0 to 7 do begin
TextBackGround(i);
ClrScr;
TextColor(i+1);
GotoXY(3,3);
writeln(‘Тло = ‘,i,’, колір =’,i+1);
delay(2000);
end;
end.
{Використання процедур InsLine, DelLine}
uses crt;
var i : byte;
begin
TextMode(co80);{режим CGA 80/25}
ClrScr;
writeln(‘Натисніть клавішу для переміщення ‘,
’рядка вниз.’);
ReadKey;
write(‘Переміщуваний рядок’);
for i := 2 to 24 do begin
InsLine;
{переміщення рядка вниз додаванням
порожнього}
{рядка
в позицію курсору}
delay(100);
end;
gotoXY(1,1);
writeln(‘Натисніть клавішу для переміщення’,
’рядка нагору.’);
ReadKey;
for i:=2 to 24 do begin
DelLine;{переміщення
рядка нагору видаленням рядка в}
{поточній позиції курсору}
delay(100);
end;
delay(100);
end.
{Використання змінної TextAttr}
uses crt;
var i : byte;
begin
TextBackGround(Black);
ClrScr;
for i := 0 to 7 do begin
TextAttr := i + 8 + 16*i; {установка кольору фону і символів}
Writeln(‘Номер кольору фону:’,i,’,номер кольору символів: ’,i+8);
TextAttr := i + 8 + 16*i +
Blink; {установка тих же кольорів, але з}
{мерехтінням}
Write(‘Те ж саме, але з мерехтінням’);
Readkey;
gotoXY(1,WhereY-1);
end;
end.
{Використання підвищеної і нормальної яскравості}
uses crt;
begin
ClrScr;
writeln(‘Початкова яскравість (фон чорний)’);
TextBackGround(Blue);
HighVideo; {включення високої яскравості}
Writeln(‘Включена висока яскравість (фон синій)’);
LowVideo; {вимикання високої яскравості}
TextBackGround(Brown);
Writeln(‘Виключена висока яскравість (фон коричневий)’);
NormVideo; {відновлення
режиму до моменту початку роботи}
{програми}
Writeln(‘Відновлені початкова яскравість і фон‘);
ReadKey;
end.
{Генерація музичної гами}
uses crt;
const
nota : array[0..7] of word = (262,294,330,349,392,440,494,524);
var i : byte;
begin
ClrScr;
TextBackGround(Blue);
GotoXY(30,2); write(‘Звучить гама:’);
repeat
for i := 0 to 7 do begin
Sound(nota[i]);{звук включений}
Delay(500);
NoSound;{ звук виключений}
end
until KeyPressed;
end.
Питання для контролю:
-
Модуль Crt, установка текстового режиму.
-
Модуль Crt, установка кольору символів, фону, режиму.
-
Модуль Crt, керування рядками.
-
Модуль Crt, установка яскравості символів.
-
Модуль Crt, керування курсором.
-
Модуль Crt, текстове вікно.
-
Модуль Crt, керування звуком.
Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph
Для одержання доступу до графічних процедур і функцій потрібно в розділі Uses підключити модуль Graph. Часто в роботі з графікою необхідні засоби модуля Crt, тому підключаємо і його:
uses crt, graph;
Файли типу .bgi дозволяють настроїтися на конкретний графічний адаптер: CGA, EGA, VGA.
Для ініціалізації графіки і переходу в графічний режим використовується процедура
InitGraph(var GraphDriver : integer; var GraphMode : integer; Path : string);
де змінна GraphDriver задає тип драйвера, що підключається, наприклад:
GraphDriver := EGA;
(можна задати цифрою 3)
Приведемо найбільш розповсюджені драйвери (табл. 31.1).
Таблиця 31.1. Драйвери
Драйвер |
Режим |
Розмір |
Файл |
CGA (1) |
CGACO, CGAHi |
320x200 (640x200) |
cga.bgi |
EGA (3) |
EGALo, EGAHi |
640x200 (640x350) |
egavga.bgi |
VGA (9) |
VGALo, VGAHi |
640x200 (640x350) |
egavga.bgi |
Змінна GraphMode задає режим графіки, наприклад:
GraphMode := EGAHi;
у параметрі Path указується шлях до каталогу в якому містяться bgi-файл. У нас на комп'ютерах ці файли розташовані в каталозі
С:\ТР\BGI;
Для автовизначення графічного режиму потрібно змінній GraphDrive привласнити значення константи Detect, наприклад:
GraphDriver:=Detect;
Приклад.
uses Graph;
var Gm, Gd : integer; {драйвер і режим}
begin
Gd := Detect; {режим автовизначення}
InitGraph(Gd, Gm, 'c:\tp\bgi'); {ініціалізація графіки}
Для визначення помилок при ініціалізації графіки використовується функція GraphResult. Якщо після ініціалізації графіки її значення дорівнює 0, то помилок немає, інакше - є. Для видачі повідомлення про тип помилки використовується функція GraphErrorMsg, що перетворює результат функції GraphResult у повідомлення, виведене на екран процедурою Write. Функція має вигляд:
GraphErrorMsg(ErrorCode);
Приклад видачі повідомлення про помилки.
uses Graph;
var Gm, Gd : integer;
ErrorCode : integer; {зберігає номер помилки}
begin
Gd := Detect;
InitGraph(Gd,Gm,'c:\tp\bgi');
ErrorCode := GraphResult; {збереження результ. ініціал.}
if ErrorCode <> 0 then begin
writeln('Помилка графіки: ',GraphErrorMsg(ErrorCode));
Halt(1);
end;
. . .
Процедура CloseGraph застосовується, коли графічна програма завершує свою роботу чи коли потрібно вийти з графічного режиму в текстовий.
Виведення тексту в графічному режимі.
Зображення звичайно супроводжують різними поясненнями. Для виведення тексту використовують процедуру OutTextXY(x,y,text), де х, у - координати точки початку виведення тексту, text - константа чи змінна типу string. Процедура OutText(text) виводить текст, починаючи з поточного положення покажчика.
Для визначення типу шрифту, його напрямку і розміру, використовується процедура
SetTextStyle(font, direction, charsize);
де константа font задає шрифт і вибирається з таблиці 31.2.
Таблиця 31.2. Список констант для визначення шрифту.
Ім'я константи |
Номер |
Шрифт і файл, де він зберігається |
DefaultFont |
0 |
Матричний 8х8 (Graph.tru) |
TriplexFont |
1 |
Напівжирний (trip.chr) |
SmallFont |
2 |
Тонкий (ntt.chr) |
SansSerifFont |
3 |
Рубаний (sans.chr) |
GothicFont |
4 |
Готичний (goth.chr) |
За замовчуванням задається шрифт №0.
Константа direction задає напрямок виводимих символів:
0 - горизонтальне;
1 - вертикальне (знизу нагору),
константа charsize задає розмір символів від 1 до 10.
Приклад. Демонстрація шрифтів.
uses Graph, Crt;
var
gd, gm : integer; i : word;
begin
gd := Detect;
InitGraph(gd, gm, ‘c:\tp\bgi’);
if GraphResult<>0 then Halt(1);
SetColor(2);
SetTextStyle(0,0,2);
OutTextXY(75, 10, ‘П Р И К Л А Д И Ш Р И Ф Т І В’);
SetColor(3); SetTextStyle(0,0,1);
OutTextXY(120,140,
‘DefaultFont. Матричний шрифт 8х8 (за ‘,
‘замовченням)’);
SetColor(4); SetTextStyle(1,0,1);
OutTextXY(160,70,’TriplexFont(SetTextStyle(1,0,1))’);
SetColor(5); SetTextStyle(2,0,5);
OutTextXY(160,110, ‘SmallFont (SetTextStyle(2,0,5))’);
SetColor(6); SetTextStyle(3,0,1);
OutTextXY(160,130, ‘SansSerifFont(SetTextStyle(3,0,1))’);
SetColor(7); SetTextStyle(4,0,4);
OutTextXY(80,170, ‘GothicFont (SetTextStyle(4,0,4))’);
SetColor(15); SetTextStyle(0,1,1);
OutTextXY(300,250, 'Вертикальне виведення');
ReadKey:
CloseGraph;
end.
Для виведення числа потрібно його перетворити процедурою Str у рядок, а потім операцією “+” підключити його до рядку, що виводиться OutTextXY.
Наприклад:
. . .
max := 2.14;
str(max : 4:2,smax); {результат перетворення в smax}
OutTextXY(400,40 ‘Максимум = ‘+smax);
. . .
Можливості Graph
У графічному режимі є невидимий поточний покажчик СР (current pointer), що виконує ті ж функції, що і курсор у текстовому режимі. Система координат починається з верхнього лівого кута (координати 0,0). Значення Х збільшується зліва направо, а Y - зверху вниз. Екран представляється у вигляді прямокутного масиву адресуємих точок. Кількість точок по горизонталі і вертикалі різне для різних адаптерів. Максимальне значення координат можна визначити функціями
GetMax:integer і GetMax:integer.
Процедура ClearDevice очищає екран і поміщає СР у точку (0,0).
Для переміщення СР використовуються процедури:
MoveTo(x,y:integer) - переміщає поточний СР у точку X,Y;
MoveRel(dx,dy:integer) - переміщає СР на dX і dY точок щодо поточного СР.
Функції GetX:integer і GetY:integer дають поточне положення СР.
Процедура PutPixel(x,y,color) виводить крапку в X,Y кольором color.
Функція GetPixel(x,y) повертає номер кольору пикселя в X,Y.
Процедура Line(x1,y1,x2,y2:integer) виводить лінію (X1,Y1 - початок лінії, x2,y2 - кінець лінії; РС у точці x2,y2).
Процедура LineTo(x,y) з'єднує крапку РС із крапкою X,Y і РС переходить у X,Y.
Процедура LineRel(dx,dy) зміщає РС у крапку X+dX, Y+dY і малює лінію (x,y,x+dx,y+dy).
Можна змінювати стиль зображуваних ліній використовуючи процедуру:
SetLineStyle(вид, зразок, товщина);
де параметр “вид” дозволяє задати лінію або 4-х стандартних типів, або за своїм зразком.
0 - безперервна лінія;
1 - крапкова;
2 - штрих-пунктирна;
3 - штрихова;
4 - дозволяє задати вид лини користувача. Для цього призначений параметр “зразок”:word, 2 байти якого задають тип лінії; параметр “товщина” задає товщину лінії в пикселях (1 - нормальна товщина, 3 - велика товщина).
Приклад. Побудова ліній користувача.
uses Graph, Crt;
var
gd, gm : integer; x1,x2,y1,y2: word; ch : char;
begin
gd := Detect;
InitGraph(gd,dm,'c:\tp\bgi');
if GraphResult <> 0 then Halt(1);
Randomize;
repeat
ClearDevice;
OutTextXY(200,10,’Випадкові лінії користувача’);
OutTextXY(140,20,’Зміна лінії - будь-яка клавіша, Esc-вихід');