У графічному режимі мінімальним об'єктом, яким може управляти програміст, є так званий піксел. Його геометричні розміри визначаються дозволом монітора. Дозвіл монітора звичайно задається у вигляді rх х rу , де rх - кількість пікселів на екрані по горизонталі, а rу - кількість пікселів по вертикалі. Навіть у випадку самого грубого дозволу зображення в графічному режимі формується за допомогою 64 000 графічних елементів, що набагато перевищує можливості текстового режиму. Будь-яке зображення формується з досить простих геометричних фігур. Це точки, відрізки прямих, окружності і т.д. З геометрії відомо, що положення геометричного об'єкта і його форма задаються координатами його точок. Отже, для того щоб запрограмувати графічний об’єкт, треба навчитися задавати координати графічних об'єктів.
Графічні координати задають положення точки на екрані дисплея. Оскільки мінімальним елементом, до якого має доступ програміст, є піксел, природно як графічні координати використати порядкові номери пікселів. Припустимий діапазон зміни графічних координат становить [0, rх - 1] для x-координати й [0, rу - 1] для y-координати. Точкою відліку є верхній лівий кут екрана. Значення y-координати відлічуються з ліва праворуч, а у-координати - зверху вниз. Останнє відрізняє графічні координати від звичайних декартових координат, прийнятих у математиці, і служить джерелом помилок для початківця програміста. Проблема полягає в тім, що при розробці програми графік або інше зображення звичайне проектується у звичній для нас декартовій системі координат. Але для правильного відображення такого графіка на екрані необхідно врахувати розходження між декартовой і графічної системами координат. Підкреслю, що таких розходжень три:
1.Графічні координати приймають тільки цілочисленні значення.
2.Графічні координати приймають значення, обмежені як знизу
(нульовим значенням), так і зверху (значенням дозволу).
3.Графічна координата у відлічується зверху вниз.
Таким чином, геометричні декартові координати точки (х, у) для відображення її на екрані варто перерахувати в графічні (xg, yg) по формулах
xg = [rx х x] + dx, yg = ry -[ry x y]- dy,
де [x] - ціла частина х; rx і ry - масштабні множники, обрані з умови
СумДУ МК І КР 0023
Змн. Арк. |
№ докум. |
Підпис Дата |
|
Розроб. |
Шаховська С.О. |
Літера Аркуш |
Аркушів |
Перевір. Кукарін В.О. |
3 Графіка в Паскаль |
6 |
23 |
Реценз. |
Гр. 211-і |
|
|
Н. Контр. |
|
|
Затверд.
rx - [rx x xmax ]+1 rу = [sy x ymax ]+1.
Тут хmax і уmах - максимальні значення геометричних координат. Перерахування координати в по такій же формулі, що й для х, привів би до дзеркально відбитого щодо горизонтальної лінії зображенню. Що складають dx і dy забезпечують зсув зображення щодо лівого верхнього кута екрана. Зображення буде зміщено в центр екрана при dx = [rx / 2],
Робота дісплея неможлива без спеціальних мікросхем, керуючих його роботою. Відеоадаптер повинен підтримувати роботу дисплея в графічному режимі. Турбо Паскаль забезпечує роботу з наступними відеоадаптерами: CGA, MCGA, EGA, VGA, Hercules, AT&T 400, 3270 PC, ІBM-8514.
Роботою відеоадаптера управляє спеціальна програма, що називається драйвером. Драйвер зберігається в окремому файлі на диску з кодом що необхідний йому для роботи. Ознака файлу із драйвером - розширення .bgі імені файлу. Ім'я файлу із драйвером відповідає типу відеоадаптера вашого комп'ютера.
Перемикання в графічний режим і робота в ньому реалізовані в Турбо Паскалі у вигляді набору процедур, що перебувають у спеціальному модулі graph.tpu. Цей модуль повинен явно підключатися до програми за допомогою оператора використання uses. У модуль graph входить приблизно 50 процедур.
Отже, програма при перемиканні в графічний режим повинна визначити тип відеоадаптера. Це можна зробити, явно вказавши в програмі тип відеоадаптера або давши програмі можливість самостійно визначити значення відповідних параметрів. Для цього необхідно ввести змінну цілого типу, нехай її ідентифікатор буде gd. При явному визначенні
відеоадаптера в програмі повинен бути присутнім оператор присвоювання |
|
||||
|
gd := value; |
|
|
|
|
|
де value - це або деяке число, або убудована константа (убудовані константи не треба |
||||
описувати спеціально, тому що їхні описи втримуються в модулях). |
|
||||
|
При автоматичному розпізнаванні відеоадаптера в правій частині оператора |
||||
присвоювання використається константа Detect (або нульове значення). |
|
||||
|
Друге, що повинна зробити програма, - задати певний графічний режим. Для цього |
||||
варто ввести ще одну змінну цілого типу, назвемо її gm, і привласнити їй значення. |
|
||||
|
Перемикання в графічний режим роботи дисплея виконується викликом процедури |
||||
ІnіtGraph з модуля graph: |
|
|
|||
|
ІnіtGraph(gd, |
gm. 'c:\tp\bgі'); |
|
||
|
Перший параметр у цій процедурі задає тип відеоадаптера, другий визначає режим, а |
||||
третій |
являє собою рядок із |
вказівкою розташування драйвера на диску. Порожній рядок |
|||
|
|
|
СумДУ МК І КР 0023 |
Арк. |
|
|
|
|
7 |
||
Змн. Арк. |
№ докум. |
Підпис |
Дата |
||
|
|||||
означає, що графічний драйвер перебуває в тім же каталозі, що й програма. Процедура ІnіtGraph переводить систему в графічний режим, а потім повертає керування викликаючій програмі. Завершення роботи в графічному режимі виробляється за допомогою процедури CloseGraph, що вивантажує драйвер з пам'яті й відновлює попередній відеорежим.
За допомогою процедур RestoreCrtMode і SetGraphMode можна перемикатися між текстовим і графічним режимами, не закриваючи графічний режим.
Перемикання в графічний режим (ініціалізація графічного режиму) звичайно супроводжується обробкою можливих помилок ініціалізації. Ці помилки можуть бути пов'язані з відсутністю графічного драйвера або неправильних значень параметрів. При наявності помилки процедура ІnіtGraph виробляє відповідний, відмінний від нуля, результат - код помилки. Цей код можна одержати за допомогою функції GraphResuіt.
Щоб зображення не залежало від дозволу, потрібно использувать функції GetMax і GetMax, що повертають найбільший номер пиксела по горизонталі й по вертикалі відповідно. Графічні координати правого нижнього кута екрана рівні (GetMax, GetMax). Процедура SetBkColor установлює колір тла, а процедура SetColor - колір графічного об'єкта. Параметрами цих процедур є або цифрові коди квітів, або убудовані константи, що позначають колір. У таблиці наведені убудовані константи Турбо Паскаля, що позначають кольори й відповідають цифрові коди.
Процедура Lіne(xl, yl, х2. в2) виводить відрізок прямої, що задає початковою крапкою (x1, y1) і кінцевою крапкою (х2,y2). Окружність виводиться процедурою Cіrcle(x, в, r), параметрами якої є графічні координати центра х и в, а також радіус r (у пикселах).
Прямокутник будується процедурою Rectangle(xl. yl, х2, в2), перші два параметри якої задають графічні координати верхнього лівого кута прямокутника, а останні два параметри - координати нижнього правого кута. Процедура Bar(xl, yl, х2, в2) також призначена для висновку прямокутника й відрізняється від процедури Rectangle тим, що в цьому випадку внутрішня частина прямокутника зафарбовується заздалегідь певним чином. У випадку процедури Rectangle для заповнення внутрішньої області фігури доводиться використати додатковий виклик процедури модуля Graph. Колір заповнення може бути заданий за допомогою процедури SetColor(Color). Аргументом цієї процедури є константа або змінна типу Word, що є кодом кольору. Цей код може приймати значення з інтервалу 0. .15. Зручніше використати убудовані константи модуля Graph, імена яких відповідають виведеним квітам. Спосіб зафарбування визначається не тільки кольором, але й стилем заповнення. У Турбо Паскале є 12 стилів заповнення, а вибрати кожної з них можна за допомогою процедури SetFіll Style (Style, Color). Перший параметр цієї процедури задає стиль заповнення, а другий - колір. У числі припустимих стилів зафарбування - суцільна, штрихова й т.д.
Арк.
|
СумДУ МК І КР 0023 |
|
|
Змн. Арк. № докум. Підпис Дата |
8 |
||
|
|||
|
|
1.Створити два файли: основний файл з програмою та файл модуля.
2.В основному файлі зв’язати файлову змінну з файлом даних та створити меню відповідно до заданих пунктів.
3.В файлі модуля створити тип даних, який описує структуру запису та описати необхідні змінні (f – файлова змінна, z – змінна типу запису і т.д.)
4.В файлі модуля створити процедури та функції, які реалізують задані пункти меню.
4.1.Створити процедуру створення файла записів та занесення в нього даних:
- створити та відкрити файл для запису за допомогою процедури rewrite (f, ‘robota.dat’);
-ввести потрібні данні з клавіатури та записати їх у файл за допомогою процедури read (f, z);
-закрити файл процедурою close (f).
4.2.Створити процедуру виведення даних на екран:
-відкрити файл для читання – reset (f);
-зчитати дані з файлу – read (f, z);
-вивести дані на екран;
-закрити файл.
4.3.Створити процедуру додавання інформації у файл:
-відкрити файл для читання та запису – reset (f);
-встановити вказівник файла за останнім його компонентом процедурою seek (f,filesize(f));
-записати додаткові дані аналогічно процедурі введення даних;
-закрити файл.
4.4.Створити процедуру редагування запису:
-відкрити файл, що потрібно відредагувати;
-ввести номер запису для редагування;
-зчитати дані з файлу та порівняти його номер із введеним;
-встановити вказівник файла на заданий елемент seek (f,n-1);
-відредагувати поля запису та записати їх у файл;
-закрити файл.
СумДУ МК І КР 0023
Змн. Арк. № докум. Підпис Дата Розроб. Шаховська С.О.
Перевір. Кукарін В.О.
Реценз. Н. Контр.
Літера Аркуш Аркушів
4 Алгоритм розробки |
9 |
23 |
програми |
Гр. 211-і |
|
|
|
Затверд.
4.5.Створити процедуру видалення запису:
-описати допоміжний файл та зв’язати його з фізичним файлом на диску;
-відкрити основний файл для читання та допоміжний фай для запису;
-ввести номер запису, який необхідно видалити;
-зчитати дані з файлу та порівняти його номер із введеним, якщо не співпадає то перезаписати дані у допоміжний файл;
-закрити обидва файли;
-видалити основний фізичний файл процедурою – erase (f);
-перейменувати допоміжний файл у файл з основною назвою.
4.6.Створити процедуру, яка реалізує дії свого варіанту та описати її.
5. Відкомпілювати створений модуль та виконати програму з використання створеного
модуля.
Арк.
|
СумДУ МК І КР 0023 |
|
|
Змн. Арк. № докум. Підпис Дата |
10 |
||
|
|||
|
|