Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
програмування.doc
Скачиваний:
14
Добавлен:
04.05.2019
Размер:
374.27 Кб
Скачать

Лабораторна робота 7

Тема: Розробка та налагодження підпрограми побудови та зображення діаграм та графіків функцій

Теоретичні відомості щодо виконання лабораторної роботи

На практиці часто трапляється: результати вимірювань деяких величин або результати обчислень подавати у графічній формі, наприклад, у вигляді різноманітних діаграм та графіків. Розглянуті в попередній лабораторній роботі графічні засоби дозволяють достатньо просто виконати побудову діаграми (та графіків) на екрані дисплея. Однак, слід зазначити, що у програмах, в яких задіяна графіка, доводиться вирішувати деякі проблеми, які властиві самій прикладній задачі.

Одна з таких проблем пов’язана із системою координат, якою треба користуватися. В багатьох випадках, особливо при математичних обчисленнях, зручно мати справу з дійсними числами, а не з цілими. Крім того, більш звичним і, отже, більш зручним, є напрямок осі Y вгору.

Як ілюстрація (один - найпростіший варіант) вирішення даної проблеми, встановимо звичайну декартову систему координат з початком у нижньому лівому куті екрана і незалежними від розміру екрана (або розміру графічного вікна) координатами, що виражені у вигляді дійсних чисел. Якщо допустити, що ось Х на екрані поділяється на десять одиниць, і позначити її через Xmax, а через Ymax позначити найбільше значення Y в новій системі координат, то:

(причому х=0, у=0 у нижньому лівому куті)

П р и к л а д. Програма DemoBar на екрані дисплея викреслює зображення стовпчикової діаграми, застосовуючи шаблони заповнення.

Program DemoBar;

Uses Crt,Graph;

Const

NumBars=5; {кількість стовпців}

{масив констант, який визначає висоту стовпців}

x:Array[1..NumBars] of ReaL=(1,1.5,4,2.5,1.5);

{масив констант, який визначає стиль заповнення стовпців}

Styles:Array[1..NumBars] of byte = (1,3,10,5,9);

Var

{додатковий масив, що містить висоту стовпців у пікселях, які відповідають висоті стовпців масиву х}

y:Array[1..NumBars] of Integer;

Max:Real;

MaxX,MaxY,

i,x1,y1,x2,y2,

J,s,z,H:Integer;

XStep,YStep:Real;

Color:Word;

Procedure Initialize;

{Процедура Initialize така сама, як і в програмі Example_1}

Function Int2Str(L:LongInt):String;

{Перетворення цілого у рядок для використання у OutText, OutTextXY}

Var

S:String;

Begin

Str(L,S); Int2Str:=S;

End;{Int2Str}

Begin

Initialize;

{визначення максимальних значень екранних координат}

MaxX:=GetMaxX;MaxY:=GetMaxY;

H := 3*TextHeight('M');

Rectangle(0,H,MaxX,MaxY-H); {рамка по периметру екрана}

SetTextJustify(CenterText,TopText);

SetTextStyle(TriplexFont,HorizDir,1);

OutTextXY(MaxX div 2,0,'Histogram !');

SetTextStyle(DefaultFont,HorizDir,1);

x1:=10;y1:=100;x2:=600;y2:=400; {визначення області виводу}

Max:=x[3]; {визначення максимального значення}

{перетворення висоти стовпців, що задані масивом дійсних значень х[i] у екрані координати - масив y[i]}

For i:=1 to NumBars do y[i]:=Round((y2-y1)*x[i]/max);

{вивід на екран осей}

Line(H,H,H,y2); Line(H,y2,x2,y2);

{визначення кроку}

YStep:=(y2-H)/NumBars;

XStep:=(x2-H)/NumBars;

J := y2;

SetTextJustify(BottomText,CenterText);

{позначення осі Y}

For i:=0 to NumBars-1 do

Begin

Line(H div 2,J,H,J);

OutTextXY(H div 6,J,Int2Str(i));

J := Round(J-Ystep);

End;

{позначення осі X, вивід діаграми (bars)}

J := H;

Color:=Black;

SetTextJustify(CenterText,TopText);

For I := 1 to Succ(NumBars) do

Begin

SetColor(White);

Line(J,y2+H div 4,J,y2-H div 4);

OutTextXY(J,y2+(H div 2),Int2Str(I));

If I<>Succ(NumBars) Then

Begin

Inc(Color);

SetFillStyle(Styles[I],Color);

SetColor(Color);

Bar(J,y2-y[I],Round(J+Xstep),y2-1);

{у наступному рядку можна зняти коментар}

{ Rectangle(J,y2-y[I],Round(J+Xstep),y2-1); }

End;

J := Round(J+Xstep);

End;

OutTextXY(MaxX div 2,MaxY-2*H,'Press any key to continue');

Repeat Until KeyPressed;

CloseGraph;

End.

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

П р и к л а д. Програма DemoPie демонструє найпростіший варіант зображення кругової діаграми на екрані дисплея із застосуванням шаблонів заповнення.

Program DemoPie;

Uses Crt,Graph;

Var

MaxX,MaxY,

i,H,x1,y1,x2,y2:Integer;

CenterX,CenterY,Radius:Integer;

Color:Word;

Procedure Initialize;

{Процедура Initialize така сама, як і в програмі Example_1}

Function Int2Str(L:LongInt):String;

{Процедура Int2Str така сама, як і в програмі DemoBar}

Begin {головна програма}

Initialize;

{визначення максимальних значень екранних координат}

MaxX:=GetMaxX;MaxY:=GetMaxY;

H := 3*TextHeight('M');

Rectangle(0,H,MaxX,MaxY-H); {рамка по периметру екрана}

SetTextJustify(CenterText,TopText);

SetTextStyle(TriplexFont,HorizDir,1);

OutTextXY(MaxX div 2,0,'PieSlice Demonstration!');

SetTextStyle(DefaultFont,HorizDir,1);

x1:=10;y1:=100;x2:=600;y2:=400; {визначення області виводу}

{визначення центру і радіусу}

CenterY:=(y2-y1) div 2+70; CenterX:=(x2-x1) div 2;

Radius:=(y2-y1) div 2;

Color:=Blue;

SetTextJustify(CenterText,TopText);

SetFillStyle(SolidFill,Color);

PieSlice(CenterX+10, CenterY,0,90,Radius);

SetTextJustify(LeftText, BottomText);

OutTextXY(CenterX+Radius,CenterY-CenterY div 2,'25 %');

Inc(Color);

SetFillStyle(HatchFill,Color);

PieSlice(CenterX, CenterY, 225, 360, Radius);

SetTextJustify(LeftText, TopText);

OutTextXY(CenterX+Radius,CenterY+CenterY div 2,'37.5 %');

Inc(Color);

SetFillStyle(InterleaveFill,Color);

PieSlice(CenterX-10, CenterY, 135, 225, Radius);

SetTextJustify(RightText, CenterText);

OutTextXY(CenterX-Radius-2*TextWidth('H'),CenterY,'25 %');

Inc(Color);

SetFillStyle(WideDotFill,Color);

PieSlice(CenterX, CenterY, 90, 135, Radius);

SetTextJustify(RightText, BottomText);

OutTextXY(CenterX-Radius div 2,CenterY-Radius,'12.5 %');

SetTextJustify(CenterText, TopText);

OutTextXY(MaxX div 2,MaxY-2*H,'Press any key to continue');

Repeat Until KeyPressed;

CloseGraph;

End.

Завдання щодо виконання лабораторної роботи

Розробити підпрограму побудови гістограми або графіка засобами модуля Graph для програми відповідно до варіанта завдання лабораторної роботи 2.