Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема Graph.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
176.13 Кб
Скачать

10. Аналіз програм з елементами графіки, звукових сигналів.

Приклад 1. Програма встановлює кількість графічних режимів для поточного завантаженого драйвера, виводить значення номера графічного режиму, встановленого автоматично, по черзі встановлює всі можливі графічні режими. Крім того, в кожному режимі малює рамку довкола екрана та виводить на екран кількість точок по осях х та у.

program Grafika1;

uses Graph, Сrt; {оголошення модулів, ресурси яких використовує програма}

var grDriver : integer;

grMode : integer;

ErrCode : integer;

rezcol : byte;

М, RMax, т, і, il,j, xl,x2,yl,y2:integer;

s,s1, s2:string;

begin

InitGraph(grDriver, grMode, 'D:\tp\bgi'); { ініціалізація графічного режиму} ,

ErrCode := GraphResult; {перевірка коду помилки}

If ErrCode = grOk then begin {якщо код помилки = 0 - помилки немає}

RМax:=GetMaxMode; { визначення максимального номера графічного режиму} M:=GetGraphMode; { визначення поточного номера графічного режиму}

str(RMax+1, s1); { переведення кількості графічних режимів у символьне представлення}

str(M, s2); { переведення номера поточного режиму у символьне представлення}

s:='Bcьoгo '+s1 + ' графічні режими '; { формування рядка для виведення}

x2:=GetMaxX div 2; { середина екрана по горизонталі}

y2:=GetMaxY div 2; { середина екрана по вертикалі}

SetTextStyJe(0,0,2); { встановлення стилю}

OutTextXY (х2-100, у2, s); {виведення тексту}

s:='поточний ='+s2; { формування наступного тексту для виведення}

МоvеТо(330,320); { поточний вказівник переводиться в точку 330,320 }

OutText(s); { виведення тексту відносно поточної позиції вказівника }

readln; {очікуcrься натискання клавіші Enter }

for і:=0 to RМax do begin { утворення циклу}

SetGraphMode(i); {встановлення графічного режиму номер і}

Rectangle(0, 0, GetMaxX, GetMaxY); {малюється прямокутник на весь екран}

x1:=GetМахХ; { максимальна координата по х }

у1:=GetMaxY; { максимальна координата по у }

х2:=х1 div 2; { середина екрана по горизонталі}

у2:=уl div 2; { середина екрана по вертикалі}

str(x1, s1); { переведення числа в його символьне представлення}

str(yl, s2);

s:=s1+'x'+s2; { формується повідомлення для виведення}

OutTextXY(x2, у2, s); {виводиться повідомлення про кількість точок по вертикалі і по горизонталі для даного графічного режиму}

readln; {очікується натискання клавіші Enter}

end; { закінчення циклу}

CloseGraph; { вихід з графічного режиму}

end

else { повідомлення про причину не встановлення графічного режиму}

wrіtеln('Помилка графіки: ',GraphErrorMsg(ErrCode));

end.

Приклад 2. Програма демонструє можливості роботи з кольорами. На екрані концентричні кільця різного кольору, які що 5 секунд змінюють свій колір.

program Grafika2;

uses Graph, Crt; {оголошення модулів, ресурси яких використовує програма}

const { константа Раl0 містить палітру кольорів}

Раl0: PaletteType = (Size : 15; Colors : (0, 1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15));

var

Раlеttеl : PaletteType;

grDriver : integer;

grMode : integer;

ErrCode : integer;

rezcol : byte;

r, і, i1,j, x1,x2,y1,y2:integer;

begin InitGraph(grDriver, grMode, 'D:\tp\bgi'); { ініціалізація графічного режиму}

ErrCode := GraphResult; {перевірка коду помилки}

іf ErrCode = grOk then begin {якщо код помилки=0 - графічний режим завантажений}

Palette1:= раl0;

х1:=GetMaxX div 2; { обчислюються координати середини екрана}

yl:=GetMaxY div 2;

r:=0;

for і:=0 to 15 do begin

setcolor(Palette1.Colors[i]); {поточним стає і-тий колір палітри}

for j:=1 to 10 do begin {малюється кільце товщиною 10 поточним кольором}

r:=r+1 ;

circle(xl, у1 r); { малюється коло радіусу r поточним кольором}

end;

end;

repeat { цей цикл забезпечує зміну кольорів кілець без повторного їх прорисовування } rezcol:=Palette1.Colors[ 15]; {циклічна зміна кольорів}

for і1:= 15 downto 2 do Раlеttе1.Colors[i1]:=Раlеttе1.Colors[i1-1];

Palette1.Colors[l]:=rezcol;

delay(5000); { очікування 5000 мілісекунд }

{ зміна кольорів у палітрі на кольори, встановлені в Раlette1.Colors }

for і1:=1 to 15 SetPalette(i1, Palette1.Colors[i1]);

until keypressed;

CloseGraph;

end

else

wrіtеln('Помилка графіки: ',GraphErrorMsg(ErrCode));

end.

Приклад 3. Програма демонструє різноманітні графічні можливості Turbo-Pascal.

program Grafika3;

uses Graph, Crt; {оголошення модулів, ресурси яких використовує програма}

const Рl:array [1..10,1..2] of word=((10,300), (30,250), (60,240), (90,240), (120,270), (10,300),(0,0),(0,0),(0,0),(0,0)); {задається масив координат п’ятикутника. }

{кожна пара задає одну точку. Перша точка співпадає з шостою, щоб крива була замкнутою} Р2:аrrау [1..10,1..2] of word=({200,200),(225,100),(250,200),(350,225),(250,250),(225,350),(200,250),(100,225), (200,200),(0,0)); {задається масив координат чотирикутної зірки. }

var

grDriver : integer;

grMode : integer;

ErrCode : integer;

rezcol : byte;

r, і, il,j, x1,x2,y1,y2:integer;

begin

InitGraph(grDriver, grMode, 'D:\tp\bgi'); { ініціалізація графічного режиму}

ErrCode := GraphResult; {перевірка коду помилки}

if ErrCode = grOk then begin завантажений }

SetColor(10); { стає активним ясно-зелений колір}

Rectangle(0, 0, GetMaxX, GetMaxY); {малювати прямокутник на весь екран}

{ встановлюється стиль лінії: неперервна лінія нормальної товщини}

SetLineStyle(0,$FFFF, 1);

SetFillStyle(4,4); {встановлюється стиль заповнення: жирні лінії червоного кольору}

Ваr(10,90,50,40); {малюється прямокутник заданий координатами (10,90) і (50,40),}

{ і зафарбовується жирними лініями червоного кольору}

SetFillStyle(0,4); {встановлюється стиль заповнення: суцільний фон червоного кольору}

{ встановлюється стиль лінії: пунктирна лінія нормальної товщини}

SеtLіneStуle(3, $0000, 1);

Bаr3D(90,90, 150,40, 12,true); {пунктирною лінією малюється паралелепіпед }

{ встановлюється стиль лінії: неперервна лінія нормальної товщини}

SetLineStyle(0, $0000,1);

{ встановлюється стиль заповнення: заповнення області червоним кольором}

SetFillStyle( 1,4);

{малюється паралелепіпед, фронтальна площина зафарбовується червоним кольором}

Bar3D(200, 90, 250, 40, 12, true);

SetColor(14); { стає активним жовтий колір}

SetLineStyle( 4,$0000, 1); { встановлюється стиль лінії: невидима лінія}

FillРоlу(6,Р1); {малюється п'ятикутник і замальовується червоним кольором}

SetLineStyle(0,$FFFF,3); {встановлюється стиль лінії: неперервна потовщена лінія}

{ встановлюється стиль заповнення: заповнення області рідким штрихуванням світло-смарагдового кольору }

SetFillStyle(7, 11);

{ малюється сектор еліпса з координатами центру (200,400), горизонтальним радіусом 50, вертикальним - 25, обмежений кутами 0 і 270 градусів, заповнений рідким штрихуванням світло-смарагдового кольору}

Sector(200 ,400, 0,270,50,25);

{ малюється дуга еліпса з координатами центру (500,400), горизонтальним радіусом 80, вертикальним - 40, обмежена кутами 90 і 180 градусів, потовщеною лінією жовтого кольору}

Ellipse(500,400, 90,180, 80,40);

{ малюється дуга кола з координатами центру (550,400), радіусом 50, обмежена кутами 180 і 959 градусів, потовщеною лінією жовтого кольору}

Arc(550,400,180,359,50);

{ малюється коло з координатами центру (500,150), радіусом 100, потовщеною лінією жовтого кольору}

Circle(500, 150, 100);

{ малюється чотирикутна зірка потовщеною лінією жовтого кольору}

DrawPoly(9,P2);

{ встановлюється стиль заповнення: заповнення області рідкими точками жовтого кольору}

SetFillStyle(11,14);

{ малюється сектор кола з координатами центру (300,400), радіусом 50, обмежений кутами 45 і 135 градусів, заповнений рідкими точками жовтого кольору}

PieSlice(300,400,45,135,50);

readln; {очікується натискання клавіші Enter }

closegraph; { вихід з графічного режиму}

end

else wrіtеln('Помилка графіки: ',GraphErrorMsg(ErrCode));

end.

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

  1. Які є режими виведення інформації у мові Паскаль?

  2. Що таке піксель?

  3. З якої точки починається відлік координатної системи?

  4. Які дії потрібно виконати для організації виведення в графічному режимі?

  5. Як задати графічний режим роботи в мові Паскаль?

  6. Як закінчити роботу в графічному режимі?

  7. Які поняття використовуються для роботи в графічному режимі?

  8. Які є графічні режими?

  9. Як позначаються кольори в графічному режимі?

  10. Що таке палітра кольорів?

  11. За допомогою яких процедур задаються кольори?

  12. Які є функції для переміщення поточного вказівника?

  13. За допомогою яких функцій можна намалювати лінії?

  14. Які функції є для малювання геометричних фігур?

  15. Як здійснюється виведення тексту в графічному режимі?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]