Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






 

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.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.