РОЗДІЛ 8. КОНТРОЛЬНІ ЗАВДАННЯ

 

Лабораторна робота № 1

Тема. Синтез статичного і динамічного зображення засобами псевдографіки

 

1. Синтез статичного зображення

Широке застосування в інженерну діяльність персональних комп'ютерів (ПК) дозволило різко розширити галузь застосування графічних зображень, як найбільш інформативних засобів для сприйняття і передачі інформації. Існуючі засоби формування зображень визначаються одним із двох принципово різних режимів роботи адаптера (контролера) дисплея текстовим або графічним. У текстовому режимі екран монітора розбивається на матрицю знакомісць розміром 40×25, 80×25, 80×43 або 80×50 залежно від типу адаптера і номера формату. Стандартним вважається формат, розбиваючий весь простір екрану на 25 стрічок довжиною у 80 знакомісць. У той же час адаптер BGA допускає формат 43×80, a VGA і вище 50×80. Кожне знакомісце характеризується такими параметрами:

1.                     координатами;

2.                     складом;

3.                     кольором символу;

4.                     кольором фону.

Координати знакомісця номери стрічки і стовпця, на перетині яких розміщене шукане знакомісце. Нумерація стрічок здійснюється зверху донизу (1−25 чи 0−24), а стовпців зліва направо (1−80 чи 0−79).

Склад знакомісця один із символів розширеного набору ASCII, який називається зазвичай кодовою сторінкою і завантажуючого в пам'ять ПК у момент включення комп'ютера чи запуску програмного пакета. Набір містить 256 символів, з яких перші 128 зазвичай постійні для всіх кодових сторінок, а решта 128 змінюються залежно від алфавіту країни чи призначення програмного пакету. Усі символи мають свої числові коди в діапазоні від 0 до 255, тобто для збереження складових одного знакомісця потрібен один байт. У той же час даний код дозволяє відобразити будь-який символ кодової таблиці шляхом набору коду на правій цифровій клавіатурі при натисненій кнопці Alt.

У сучасних адаптерах для кодування кольору символу зазвичай застосовується чотири біта, що дає 16 можливих кольорів, які нумеруються: 0 − чорний, 1 − синій, 2 − зелений, 3 − голубий, 4 − червоний, 5 − рожевий, 6 − коричневий, 7 − сірий, 8 − темно-сірий, 9 − яскраво-сииій, 10 − яскраво-зелений, 11 − яскраво-голубий, 12 − яскраво-червоний, 13 − яскраво-рожевий, 14 − жовтий, 15 − білий.

Для зафарбовування фону зазвичай застосовуються 8 кольорів палітри, що потребує для кодування 3 біта. Ще один біт призначений для фіксації режиму мигання символу чи його відсутності. У відеопам'яті ПК зберігається інформація тільки про три останні параметри знакомісця, яка подається одним байтом.

Таким чином, під час роботи в символьному режимі одне знакомісце потребує два байти відеопам'яті (один на опис складу, інший на опис параметрів), а загальна потреба в такій пам'яті становить всього 4 кБ (формат 80×25) чи 8 кБ (80×50). Низька вимогливість до відеопам'яті робить символьний режим привабливим для синтезу найпростіших графічних зображень (таблиць, стовпчикових діаграм, комп'ютерних ігор). Для цього в кодову таблицю ПК вводяться символи псевдографіки, вивід яких здійснюється за правилом, описаним раніше.

Опис середовища програмування

Статичне графічне зображення в символьному режимі може бути створене засобами будь-якого текстового редактора (Лексикона, Фотона, WD та ін.), але подібний підхід не дозволяє застосовувати різні кольори в силу відсутності відповідних засобів в складі вказаних пакетів. Такі засоби мають різні мови програмування, тому лабораторна робота базується на синтезі програми на мови Паскаль, яка створює на екрані потрібне зображення.

Зазвичай для виводу інформації на екран у мові Паскаль застосовуються такі процедури, які перебувають у модулі Crt:

TextBackground (колір) − задає колір фону знакомісця. Колір задається номерами 0÷7.

TextColor (колір) задає колір символу за допомогою номерів 0÷15.

Window (x1, y1, х2, у2) − задає розміри вікна на екрані і встановлює курсор у лівий верхній кут вікна з координатами (1, 1), оскільки нумерація стрічок і стовпців у Паскалі починається з 1. Під час входу в середовище ТурбоПаскаль по замовчуванню встановлюється вікно з параметрами (1, 1, 80, 25). Під час встановлення вікна меншого розміру увесь ввід/вивід прикладної програми здійснюється через нього. Під час повернення до повного екрану необхідно виконати процедуру Window (1, 1, 80, 25).

ClrScr − очищає поточне вікно, заповнюючи його кольором фону і встановлює курсор у його верхній лівий кут.

GotoXY (x, у) встановлює курсор до елемента екрана з заданими координатами х, у.

Сам же вивід на екран конкретного символу чи символьної стрічки здійснюється процедурами Write чи WriteLn. Фіксація синтезованого зображення на певний час (до натиснення будь-якої кнопки) можлива за допомогою циклічної структури repeat .until і процедури KeyPressed, повертаючої значення True під час натиснення будь-якої кнопки. На певний час зображення на екрані фіксується за допомогою процедури Delay (кількість мілісекунд).

Приклад програми. Створити програму, яка реалізує графічними засобами мови програмування Turbo Pascal таке статичне зображення: фасад будинку з двома вікнами

Лістинг програми

program s;

uses crt, graph;                                                          

var

driver, mode:integer;

begin

clrscr;

driver:=0;

mode:=0;

InitGraph (driver,mode,'');

rectangle (200,200,300,300);

rectangle (210,230,230,270);

rectangle (270,230,290,270);

line (200,200,250,150);

line (250,150,300,200);

readln;

end.

 

2. Синтез динамічного зображення

Динамічне зображення, яке генерується на екрані дисплея ПК, широко застосовується для ілюстрації протікання в часі різних процесів, пов’язаних як із обслуговуванням самого комп'ютера (копіювання файлів, тестування жорсткого диска), так і виконання на ПК різних прикладних програм (моделювання руху судна чи робота, комп'ютерні ігри, переміщення по екрану редагуючого тексту і т.п.). Таке зображення має більшу інформативність, ніж статичне, але потребує і значних затрат праці для своєї реалізації. Найбільш повноцінне, реалістичне динамічне зображення може бути отримане тільки під час роботи дисплея в графічному режимі.

Але часто потрібний результат може бути доступний і засобам символьного режиму, що знижує, в кінцевому результаті, вимоги до ресурсів комп'ютера і підвищує його швидкодію. Динамічне зображення може бути синтезоване тільки програмним шляхом.

Можливі різні підходи до формування динамічних зображень. Існує варіант формування зображення, яке не містить статичних елементів, що потребує на кожному кроці його стирання з наступним перемальовуванням на новому місці. Стирання може бути виконане очищенням (команда ClrScr) чи заповненням екрану пробілами потрібного кольору.

Якщо зображення формується тільки на частину екрану, то рекомендується виділити командою Window вікно потрібного розміру і працювати в його межах.

Якщо потрібне зображення містить нерухомий фрагмент, то на кожному кроці рекомендується стирати і синтезувати на новому місці тільки рухому частину, що знижує загальну трудоємкість генерації рисунка. При цьому можливі такі варіанти:

1.                     із зафарбовуванням кольором фону рухомої частини;

2.                     із накладанням на рухому частину вікна і його очищенням кольором фону.

Опис середовища програмування

Синтез рухомого зображення може бути реалізований засобами будь-якої алгоритмічної мови високого рівня, яка містить процедури і функції роботи з екраном. У даній роботі, як і в попередній, пропонується вирішити завдання на основі мови ТурбоПаскаль.

Приклад програми. Створити програму, реалізуючи засобами псевдографіки мови програмування Turbo Pascal таке динамічне зображення: на екрані в лівому верхньому і правому нижньому кутах написано різним кольором «ЛНТУ». Лівий напис плавно опускається, а правий піднімається до краю екрану протягом 13 сек.

Лістинг програми

program semafor;

uses

Crt;

var

i:integer;

begin

TextBackground(6);

Clrscr;

for i:=1 to 25 do

begin

TextColor(0);

GotoXY(1,i);

Write('LNTY');

TextColor(6);

GotoXY(1,i-1);

Write('    ');

TextColor(5);

GotoXY(77,26-i);

Write('LNTY');

TextColor(6);

GotoXY(77,27-i);

Write('    ');

GotoXY(1,1);

write('    ');

GotoXY(1,i);

delay(50000);

end;

end.

Варіанти завдань

Створити програму, реалізуючу засобами псевдографіки мови програмування Turbo Pascal такі динамічні зображення:

1.                     на екрані відображається календар, на якому написані дні місяця. Червона рамка рухається по всіх числах із інтервалом у 1,1 сек;

2.                     на екрані по горизонталі намальовані 4 вікна. У кожному з них по черзі загорається світло зі збільшуючимся інтервалом від 1 до 4 сек;

3.                     на екрані по горизонталі намальований спідометр до 200 км/год. Максимальна швидкість досягається за 25 сек, а потім падає до 80 км/год. за 15 сек;

4.                     на екрані зображаються осі координат, а потім у динаміці 10°/сек символами * будується графік одного періоду синусоїди з амплітудою 10 стрічок;

5.                     на екрані вертикально намальований термометр зі шкалою від -20° до 60°. Температура на першому етапі від -10° до 30° за 12 сек, а потім за 10 сек падає до нуля;

6.                     намальоване перехрестя, яким рухаються назустріч одна одній дві машини, швидкість однієї в два рази вище, ніж іншої;

7.                     по екрану зліва направо протягом 60 сек рухається стрілка =>, швидкість початку в два рази вище швидкості хвоста;

8.                     по екрану справа наліво протягом 20 сек рухається стовпчик коричневого кольору, на кожному кроці збільшуючись у висоту на одну стрічку;

9.                     по периметру екрану з кроком у 0,4 сек рухаються один за одним три трикутники: червоного, зеленого і жовтого кольору;

10.                 на екрані намальована вертикальна драбина жовтого кольору. Щабель червоного кольору рухається знизу вверх з кроком у 2 сек;

11.                 прямокутник червоного кольору, рухаючись по екрану справа наліво з кроком 0.6 сек, тягне за собою подвійну лінію зеленого кольору;

12.                 дві башти: жовтого кольору висотою у 15 стрічок і коричневого у 1 стрічку. Із дискретом у 1 сек висота жовтої башти зменшується до одиничної, а коричневої збільшується до 15 стрічок;

13.                 на екрані зображена буква «Н» висотою у 14 стрічок. Щабель букви повільно декілька разів піднімається і опускається. Під час зміни напряму змінюється колір букви;

14.                 на екрані зліва направо переміщується світлофор із кроком по горизонталі одна позиція, а за часом – 0,5 сек. На кожному кроці змінюється активний колір світлофора;

15.                 фігура ┌┐, обертаючись за годинниковою стрілкою зі швидкістю 90°/сек, здійснює чотири оберти;

16.                 у прямокутнику 12×14 коричневого кольору намальований по центру прямокутник 6×4 білого кольору. Білий прямокутник повільно переміщується до лівої границі внутрішнього прямокутника, а потім до правої;

17.                 на екрані намальована стилізована зелена ялинка. На ній спалахують і гаснуть три червоні зірочки з інтервалом 1 сек, а ялинка переміщується зверху екрану вниз;

18.                 дві рамки, початково знаходяться в правому нижньому і лівому верхньому кутах екрану, переміщуються по діагоналі назустріч одна одній до повного співпадання з дискретом 0.7 сек/крок;

19.                 вздовж екрану намальований забор одного кольору, а за ним переміщуючий прямокутник іншого кольору. Дискрет переміщення - символ/сек;

20.                 прямокутник висотою в 12 стрічок, у якому написане слово «Інформація», рухається повільно по екрану справа наліво, а слово рухається зверху вниз прямокутника.

Зміст звіту

1)                    Зміст завдання;

2)                    лістинг програми;

3)                    надруковане зображення.

Контрольні питання

1.                     Яким чином реалізується на мові Turbo Pascal затримка в часі?

2.                     Для чого застосовується динамічне зображення, яке створюється на екрані комп'ютера?

3.                     Чому дорівнює дискрет переміщення зображення по горизонталі і вертикалі в символьному режимі роботи комп'ютера?

4.                     Яким чином можна стерти зображення на екрані комп'ютера?

5.                     Як можна засобами псевдографіки намалювати на екрані комп'ютера трикутник?