1.ПОСТАНОВКА ЗАДАЧІ.
Cпочатку ініціалізуємо графічний режим. Утворюємо вікно за допомогою SetViewPort. Вираховуємо масштаб маючи границі для функції та аргумента. Враховуємо яким повинен бути масштаб – логарифмічний чи рівномірний. Для визначення логарифму скористаємося функцією –
function lgn(x:real):real; begin if x<0 then begin lgn:=-ln(abs(x));end
else lgn:=ln(abs(x)) end;
Для утворення графіка потрібно з’єднати лініями всі значення функції та аргумента на координатній площині.Кожну точку з’єднумо з наступною лінією. Для цього використовуємо цикл. Утворюємо вісь абсцис та ординат, а також сітку.
2.РОЗРОБКА СТРУКТУРИ ДАНИХ.
№п(п
Позначення
Ім’я(
Тип
Призначення, опис
1
gd,gm, patpatpatpathtodriver
gd,gm, patpatpatpathtodriver
-
Змінні необхідні для реалізації графічного режиму
2
s1,s2,s3,s4,s5,s6
s1,s2,s3,s4
ціла
Необхідні для утворення сітки
3
х1,х2,х3,х4
w1,w2,w3,w4
ціла
Координати вікна
4
Z, Z3
z
ціла
Значення функції, вихідна визначає нулі х,у
5
і
і
ціла
Слугує для утворення сітки і графіка
6
x1,y1,x2,y2
x1,y1,x2,y2
ціла
Значення х та у між якими проводиться лінія
7
Ymin,Ymax
z1,z2
дійсна
Межі «у» в яких
Буде виводитись
графік
8
Xmin,Xmax
b,a
дійсна
Межі «x» в яких
Буде виводитись
графік
9
D
d
дійсна
крок
3.РОЗРОБКА БЛОК-СХЕМИ АЛГОРИТМУ.
4.Запис тексту програми.
program Project1;uses graph,keyboard;
var b,a,d:real; gd,gm:smallint; s1,s2,s3,s4,s5,s6,h1,h2,
w1,w2,w3,w4,
z3,z,n,i,
x1,y1,x2,y2
:integer; c,c1,my,mx,z1,z2:real;
patpatpatpathtodriver:string;
function y(x:real):real;
begin y:=exp(-x)*sin(8*x)+1;
end;
function lgn(x:real):real;
begin if x<0 then begin lgn:=-ln(abs(x)+1);
end
else lgn:=ln(abs(x)+1) end;
begin
a:=0.1;d:=0.01;b:=2.1;{znahsennja x}z1:=0;z2:=1;{mashtab}w1:=10;w2:=10;w3:=150;w4:=150;{koord vikna}
h1:=round((w3-w1)/20){sitka goruzontalna};h2:=round((w4-w2)/6){sitka vertukalna};
n:=round((b-a)/(d)+1);
if (z2-z1>=abs(z1)) and (z2-z1>=abs(z2))then c:=abs(z2)+abs(z1)
else c:=abs(z2-z1);
my:=(w4-w2)/c;
if (z1>=0) and (z2>0) then z3:=w4-w2+round(z1*my);
if (z1<0) and (z2<=0) then z3:=round(z2*my);
if (z1<0) and (z2>0) then z3:=round((w4-w2)* z2/c);
if (b-a>=abs(a)) and (b-a>=abs(b))then c1:=abs(lgn(b))+abs(lgn(a))
else c1:=abs(lgn(b)-lgn(a));
mx:=(w3-w1)/c1;
if (a>=0) and (b>0) then z:=-round(lgn(a)*mx);
if (a<0) and (b<=0) then z:=w3-w1+round(lgn(b)*mx);
if (a<0) and (b>0) then z:=w3-w1+round((w3-w1)*lgn(b)/c1);
x2:=z+round(lgn(a)*mx); y2:=z3-round(y(a)*my);
s1:=z; s2:=z3;
s3:=z+round(lgn(a)*mx);s4:=z+round(lgn(b)*mx);
s5:=z3-round(z1*my);s6:=z3-round(z2*my);{dlja sitku}
begin
gd:=0;initkeyboard;initkeyboard;initgraph(gd,gm,'');
SetViewPort(w1, w2, w3,w4,ClipOn ); setbkcolor(8);clearviewport;
setcolor(6);
for i:=1 to 200 do begin
line(s3,s2+h1*i,s4,s2+h1*i);
line(s3,s2-h1*i,s4,s2-h1*i);
end;
for i:=1 to 200 do begin
line(s1+h2*i,s5,s1+h2*i,s6);
line(s1-h2*i,s5,s1-h2*i,s6);
end;
setcolor(4); line(s1,s5, s1,s6);line(s3,s2,s4,s2);
setcolor(3);
for i:=1 to n do begin {delaje liniji}
x1:=z+round(lgn(a)*mx); y1:=z3-round(y(a)*my);
a:=a+d;
x2:=z+round(lgn(a)*mx); y2:=z3-round(y(a)*my);
line(x1,y1,x2,y2);end;
repeat until keyboard.getkeyeventchar(keyboard.getkeyevent())='g';
closegraph();
donekeyboard;
end;end.
5.ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ.
Висновок: я навчився створювати програми які будують графіки. Ознайомився з оператиром SetViewPort ознайомився з видами масштабу рівномірним та логарифмічним, кольора задані для того щоб відрізнити графік від сітки, вісі абсцис та ординат.
Міністерство освіти і науки україни
НУ «Львівська Політехніка»
Кафедра інформатики.
ЛАБОРАТОРНА РОБОТА №14
ПОБУДОВА ГРАФІКІВ ФУНКЦІЙ ОДНОГО АРГУМЕНТУ
Підготував
студент
групи РТ-12
Стефанишин
Ігор