Файл: ОП Конспект лекций - Паскаль.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.06.2020

Просмотров: 1680

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Тема 13: Складні типи. Масиви

Тема 14: Багатомірні масиви

Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування

Тема 16: Динамічна пам'ять. Адреси і покажчики

Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті

Тема 18: Процедури та функції для роботи з динамічною пам’яттю

Тема 19: Символьний тип даних. Упаковані масиви

Тема 20: Процедури та функції для обробки рядків

Тема 21: Структурований тип даних - безліч

Тема 22: Структурований тип даних – записи

Тема 23: Опис файлових змінних. Обробка типізованих файлів

Тема 24: Послідовний та прямий доступ до файлів

Тема 25: Обробка не типізованих файлів

Тема 26: Робота з текстовими файлами

Тема 27: Типізовані константи

Тема 28: Поняття та робота з процедурами та функціями

Тема 29: Використання модуля CRT. Програмування клавіатури

Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора

Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph

PointType = record

Тема 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.


Питання для контролю:

  1. Назвіть стандартні модулі ТР. Підключення модулів у програмі.

  2. Модуль 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.



Питання для контролю:

  1. Модуль Crt, установка текстового режиму.

  2. Модуль Crt, установка кольору символів, фону, режиму.

  3. Модуль Crt, керування рядками.

  4. Модуль Crt, установка яскравості символів.

  5. Модуль Crt, керування курсором.

  6. Модуль Crt, текстове вікно.

  7. Модуль 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-вихід');