ЗАВДАННЯ:
Розробити алгоритм побудови графіка функції однієї змінної. Розроблений алгоритм реалізувати програмно. Реалізувати вказаний в таблиці спосіб масштабування графіка.
Y(x)=exp(–x)(sin(8x)+1; X( [0.1,2.1];
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,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:=3;{mashtab}w1:=10;w2:=100;w3:=200;w4:=200;{koord vikna}
h1:=round((w3-w1)/20){sitka goruzontalna};h2:=round((w4-w2)/6){sitka vertukalna};
n:=round((b-a)/(d)+1);
if (a<=0) and (b>0) then z:=round((w3-w1)*abs(a/(b-a)));
if (a<0) and (b<=0) then z:=w3-w1+round((w3-w1)*abs(b/(b-a)));
if (a>0) and (b>0) then z:=-round((w3-w1)*abs(a/(b-a)));
mx:=(w3-w1)/(b-a);
if (z2-z1>=abs(z1)) and (z2-z1>=abs(z2))then c:=abs(lgn(z2))+abs(lgn(z1))
else c:=abs(lgn(z2)-lgn(z1));
my:=(w4-w2)/c;
if (z1>=0) and (z2>0) then z3:=w4-w2+round(lgn(z1)*my);
if (z1<0) and (z2<=0) then z3:=round(lgn(z2)*my);
if (z1<0) and (z2>0) then z3:=round((w4-w2)* lgn(z2)/c);
x2:=z+round(a*mx); y2:=z3-round(lgn(y(a))*my);
s1:=z+round(0*mx); s2:=z3-round(lgn(0)*my);
s3:=z+round(a*mx);s4:=z+round(b*mx);
s5:=z3-round(lgn(z1)*my);s6:=z3-round(lgn(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(a*mx); y1:=z3-round(lgn(y(a))*my);
a:=a+d;
x2:=z+round(a*mx); y2:=z3-round(lgn(y(a))*my);
line(x1,y1,x2,y2);end;
repeat until keyboard.getkeyeventchar(keyboard.getkeyevent())='g';
closegraph();
donekeyboard;
end;end.
5.ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ.
Висновок: я навчився створювати програми які будують графіки. Ознайомився з оператиром SetViewPort ознайомився з видами масштабу рівномірним та логарифмічним, кольора задані для того щоб відрізнити графік від сітки, вісі абсцис та ординат.
Міністерство освіти і науки україни
Міністерство освіти і науки україни
НУ «Львівська Політехніка»
Кафедра теоретичної радіотехніки та радіовимірювань
ЗВІТ З ЛАБОРАТОРНОЇ РОБОТИ №14НА ТЕМУ:
«ПОБУДОВА ГРАФІКІВ ФУНКЦІЙ ОДНОГО АРГУМЕНТУ»
Підготував:
студент групи РТ-12
Мандзік Михайло
Прийняв:
Нестор Н. І.
Львів 2010р.