Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб.работы.doc
Скачиваний:
16
Добавлен:
28.03.2016
Размер:
1.78 Mб
Скачать

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

Скласти програму для виводу на екран рисунка деталі, наведеного в додатку А (табл. А1).

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

1 Вивчіть графічні процедури Паскаля.

2 Підготуйте i розмістіть ескіз рисунка деталі у масштабі 1:1.

3 Складіть програму із використанням графічних процедур мови Паскаль для виводу на екран підготовленої графічної інформації. Розміри, зазначені на рисунку, введіть оператором READ.

4 Налагодьте програму i одержіть рисунок на екрані дисплея.

5 Змініть вхідні дані i одержіть новий рисунок.

6 Оформіть звіт про виконану роботу.

Зміст звіту

Звіт повинен містити:

1 Мету роботи.

2 Опис використаних графічних процедур Паскаля i їх формальних параметрів.

3 Ескіз графічної інформації.

4 Текст програми побудови рисунка деталі.

5 Стислі висновки з роботи.

Лабораторна робота 19

ПРОГРАМУВАННЯ ІЗ ВИВОДОМ РЕЗУЛЬТАТІВ

У ВИГЛЯДІ ГРАФІКІВ НА ЕКРАН ГРАФІЧНОГО ДИСПЛЕЯ

Мета роботи: оволодіти засобами комп'ютерної графіки Паскаль-системи для виводу результатів обчислень у вигляді графіків, практичними навичками з використання графічних засобів.

Загальні вказівки

Для побудови на екрані графічного дисплея кусочно-лінійного графіка функції y=f(x) необхідно враховувати, що значення аргументу i функції можуть знаходитися поза діапазону розмірів екрана чи незначно змінюватися, тому необхідно уводити масштаб i зрушення. Масштаб обирається, виходячи з того, щоб мінімальне i максимальне значення аргументу i функції зображалися точками, які розташовані одна від одної не більше, як на розміри графічного екрана GETMAXX на GETMAXY. Зрушення вибирається так, щоб мінімальне значення виводилося не менш, як у першу позицію.

Розрахунок масштабу I зрушення графіка

Звичайно, діапазон зміни аргументу x відомий, а діапазон зміни функції y невідомий. Тому в програмі необхідно визначити максимальне ymax i мінімальне ymin значення функції y=f(x) при зміні x у заданих межах [xn, xk].

У графічному режимі застосовується система координат, в якій відлік починається від верхнього лівого кута екрана з координатами (0,0), значення першої координати збільшується в напрямі зліва направо, а значення другої - в напрямі від верха до низу. Тому масштаб mx i зрушення sx аргументу x та масштаб my i зрушення sy функції y можна визначити, виходячи із співвідношень:

mx xn + sx = xa, mx xk + sx = xb,

my ymax + sy = ya, my ymin + sy = yb,

де (xa, ya), (xb, yb) - координати верхнього лівого i нижнього правого кута вікна для виводу графіка.

Розв'язком даної системи буде:

mx = (xb-xa)/(xk-xn), sx = xa - mx xn,

my = (yb-ya)/(ymax-ymin), sy = ya + my ymax.

У такому вигляді my буде позитивною величиною, оскільки yb>ya.

Тепер для побудови графіка необхідно виконати перетворення координат точки (x, f(x)) обраної системи координат із центром (sx,sy) у координати екрана (xe,ye):

xe = round(mx x + sx), ye = round(-my f(x) + sy).

Знак «-» при обчисленні ye означає зміну напряму осі координат.

Процедура для креслення графіка

Hижче наведена процедура Graffun креслення графіка довільної функції y=f(x). У процедурі передбачено креслення координатної сітки із нанесенням шкал поділки, а також округлення y до потрібного числа ok.

procedure Graffun(xn,xk,ok:real;

xa,ya,xb,yb:integer; f:fun);

var y,x,hx,hx1,ymin,ymax,

mx,my,yy,sx,sy : real;

i,x1,y1,x2,y2,hy : integer;

st : string;

{ знаходження максимуму i мінімуму функції }

procedure maxmin;

begin

x:=xn; ymax:=-1e30; ymin:=1e30;

while x<=xk do begin

y:=f(x);

if y>ymax then ymax:=y;

if y<ymin then ymin:=y;

x:=x+hx1 end;

ymax:=round(ymax/ok+0.4999)*ok;

ymin:=round(ymin/ok-0.5)*ok;

end;

{ креслення графіка функції }

procedure graf;

begin

setlinestyle(0,0,3);

x:=xn; setcolor(4);

x1:=round(mx*x+sx);

y1:=round(-my*f(x)+sy);

while x<=xk-hx1 do

begin

x:=x+hx1;

x2:=round(mx*x+sx);

y2:=round(-my*f(x)+sy);

line(x1,y1,x2,y2);

x1:=x2; y1:=y2; end

end;

begin

hx1:=(xk-xn)/200;

maxmin;

{розрахунок масштабів для осей }

hx:=(xk-xn)/10;

hy:=(yb-ya) div 8;

mx:=(xb-xa)/(xk-xn);

my:=(yb-ya)/(ymax-ymin);

sy:=ya+my*ymax;

sx:=xa-mx*xn;

setfillstyle(1,7);

bar(xa,ya,xb,yb);

{ горизонтальна вісь }

setlinestyle(0,0,1);

settextjustify(1,2);

settextstyle(0,0,1);

x:=xn; i:=round(mx*x+sx);

while i<=xb+1 do begin

setcolor(15); line(i,ya,i,yb);

setcolor(14); str(x:4:2,st);

outtextxy(i,yb+3,st);

x:=x+hx; i:=round(mx*x+sx); end;

{ прямовисна вісь }

settextjustify(2,1);

i:=yb;

while i>=ya do

begin

setcolor(15);

line(xa,i,xb,i);

yy:=(sy-i)/my;

setcolor(14);

str(yy:4:2,st);outtextxy(xa-3,i,st);

i:=i-hy;

end;

graf;

end;

Нижче наведена процедура Kurcorx креслення курсору - візирної лінії, що переміщується внаслідок натиску клавіш <ліворуч>, <праворуч>, а також видає на екран значення аргументу x i функції f(x) у поточній точці.

procedure Kurcorx(xn,xk:real;

xa,ya,xb,yb:integer;f:fun);

var x,mx,sx,y : real;

i,hi : integer; st : string; ch : char;

procedure out;

begin

setcolor(11); setlinestyle(0,0,3);

line(i,ya,i,yb)

end;

procedure quit;

begin

setfillstyle(1,1);

bar(xb+15,yb-55,xb+86,yb-43);

setcolor(15);

settextjustify(0,0);

outtextxy(xb+18,yb-45,'QUIT-ESC');

end;

begin

mx:=(xb-xa)/(xk-xn);

sx:=xa-mx*xn;

hi:=4;i:=xa;

quit;

setwritemode(xorput);

out;

while true do begin

ch:=readkey; if ch=#27 then exit;

if ch=#0 then begin ch:=readkey;

case ch of

#75 : begin out; i:=i-hi; if i<xa then i:=xa; out end;

#77 : begin out; i:=i+hi; if i>xb then i:=xb; out end;

#71 : begin out; i:=xa; out end;

#79 : begin out; i:=xb; out end;

end;

x:=(i-sx)/mx; y:=f(x);

setviewport(xb+15,yb-30,getmaxx,yb,false);

setcolor(14);

clearviewport;

str(x:4:2,st);outtextxy(4,12,'X='+st);

str(y:5:2,st);outtextxy(4,27,'F='+st);

setviewport(0,0,getmaxx,getmaxy,true);

end

end { while }

end;

Приклад програми із використанням процедур

Graffun i Kurcorx

Приклад 45. Побудувати на екрані графічного дисплея кусочно-лінійний графік функції y=10e-x/4sin(2x) при зміні аргументу x від 1,5 до 6,5. Для зазначення крапки графіка використати курсор-візирну лінію.

Програма має вид:

PROGRAM PR45;

USES CRT,GRAPH;

TYPE fun=function(x:real):real;

VAR GD,GM : INTEGER;

{$f+}

function f(x:real):real;

begin f:=10*exp(-x/4)*sin(2*x) end;

{$f-}

BEGIN

GD:=DETECT; INITGRAPH(GD,GM,'');

SETBKCOLOR(9);

Graffun(1.5,6.5,0.5,60,8,getmaxx-90,getmaxy-23,f);

Kurcorx(1.5,6.5,60,8,getmaxx-90,getmaxy-23,f);

CLOSEGRAPH;

END.

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