- •Лабораторна робота № 12.
- •Анотація
- •1. Загальні відомості
- •2. Функціональне призначення.
- •Процедура maxmin знаходить мінімальний і максимальний елементи з перших n елементів масиву і видає їх як вихідні параметри.
- •3. Опис логічної структури.
- •Використовувані технічні засоби.
- •5. Виклик і завантаження.
- •Перелік посилальних документів
- •Анотація
- •1. Призначення й умови застосування. Характеристики програми
- •3. Звертання до програми
- •4. Перевірка програми. Перевірка програми здійснюється на прикладі табличного файлу “testgraf.Txt”.
- •Додаток
1. Призначення й умови застосування. Характеристики програми
Програма призначена для побудови графіків функцій, заданих таблицею. Результатом роботи програми є виведення графіків функцій на екран монітора комп'ютера. Для функціонування програми є необхідним набір наступних технічних засобів: ПЭВМ на базі процесора з ОЗП 1МБ, при режимі EGA(VGA). Для роботи програми необхідно використовувати драйвер графічного режиму EGAVGA.BGI.
Час роботи програми 1-2(сек).
Режим роботи – графічний (640/480).
Засобу контролю і самовідновлення не передбачені.
2. СТРУКТУРА ПРОГРАМИ
Програмний модуль Graphs1 складається з 3 процедур:
Процедура maxmin знаходить мінімальний і максимальний елементи масиву.
Процедура sortirovka сортує масив.
Процедура grafik зчитує з файлу масиви точок ,будує координатну сітку з підписами, будує лінії графіка, виводить легенду - підпис.
При побудові графіка спочатку визначається коефіцієнт масштабування, потім фізичні координати точок переводяться в графічні і ці точки на екрані з'єднуються лініями. При виводі підписів координатної сітки на екран використовується формула зворотного переходу від екранних координат до фізичних координат.
Повідомлення .
У випадку відсутності в зазначеному каталозі файлу з заданим ім'ям видається повідомлення: ('Вибачте. Файл не знайдено.').
У випадку відсутності в поточному каталозі файлу драйвера графічного режиму видається повідомлення:
'Файл EGAVGA.BGI не знайдено. Будь ласка, скопіюйте цей файл у робочий каталог'.
3. Звертання до програми
Для звертання до процедури побудови графіка необхідно підключити модуль Graphs1 і стандартний модуль Graph. Далі викликати процедуру grafik. Заголовок процедури приведений нижче:
procedure grafik(sss:string; s, s:byte);
Вхідні параметри:
строкова змінна sss: string, у якій зберігається інформація про ім'я текстової таблиці;
змінні цілого типу s, s:byte – кількість кроків координатної сітки по горизонталі, вертикалі відповідно.
Усі дії проводяться в середовищі TURBO PASCAL.
4. Перевірка програми. Перевірка програми здійснюється на прикладі табличного файлу “testgraf.Txt”.
Як формальні параметри процедури grafik виступають: ім'я текстової таблиці, кількість кроків координатної сітки по горизонталі, вертикалі.
Приклад:
ім'я текстової таблиці: testgraf.txt
Кількість кроків по горизонталі – 7
Кількість кроків по вертикалі – 5.
Копія графічного екрана приведена на рис. 1. Текст файлу testgraf.txt приведений у додатку.
Рис. 1
Додаток
100 4
-5.00 -25.00 25.00 23.97 7.09
-4.90 -24.00 24.49 23.58 4.45
-4.80 -23.02 23.99 22.94 1.97
-4.70 -22.06 23.48 22.06 -0.34
-4.60 -21.12 22.98 20.98 -2.45
-4.49 -20.20 22.47 19.73 -4.36
-4.39 -19.31 21.97 18.34 -6.04
-4.29 -18.43 21.46 16.83 -7.51
-4.19 -17.57 20.96 15.25 -8.74
-4.09 -16.74 20.45 13.61 -9.74
-3.99 -15.92 19.95 11.94 -10.53
-3.89 -15.12 19.44 10.28 -11.09
-3.79 -14.35 18.94 8.64 -11.45
-3.69 -13.59 18.43 7.05 -11.62
-3.59 -12.86 17.93 5.53 -11.61
-3.48 -12.14 17.42 4.09 -11.44
-3.38 -11.45 16.92 2.75 -11.12
-3.28 -10.78 16.41 1.52 -10.67
-3.18 -10.12 15.91 0.41 -10.12
-3.08 -9.49 15.40 -0.58 -9.47
-2.98 -8.88 14.90 -1.43 -8.76
-2.88 -8.29 14.39 -2.15 -8.00
-2.78 -7.72 13.89 -2.75 -7.21
-2.68 -7.17 13.38 -3.21 -6.40
-2.58 -6.63 12.88 -3.56 -5.60
-2.47 -6.12 12.37 -3.79 -4.81
-2.37 -5.63 11.87 -3.91 -4.05
-2.27 -5.17 11.36 -3.94 -3.34
-2.17 -4.72 10.86 -3.89 -2.67
-2.07 -4.29 10.35 -3.76 -2.06
-1.97 -3.88 9.85 -3.58 -1.51
-1.87 -3.49 9.34 -3.34 -1.02
-1.77 -3.12 8.84 -3.06 -0.61
-1.67 -2.78 8.33 -2.77 -0.27
-1.57 -2.45 7.83 -2.45 0.01
-1.46 -2.15 7.32 -2.13 0.23
-1.36 -1.86 6.82 -1.82 0.38
-1.26 -1.59 6.31 -1.52 0.48
-1.16 -1.35 5.81 -1.24 0.54
-1.06 -1.12 5.30 -0.98 0.55
-0.96 -0.92 4.80 -0.75 0.53
-0.86 -0.74 4.29 -0.56 0.48
-0.76 -0.57 3.79 -0.39 0.42
-0.66 -0.43 3.28 -0.26 0.34
-0.56 -0.31 2.78 -0.16 0.26
-0.45 -0.21 2.27 -0.09 0.19
-0.35 -0.12 1.77 -0.04 0.12
-0.25 -0.06 1.26 -0.02 0.06
-0.15 -0.02 0.76 -0.00 0.02
-0.05 -0.00 0.25 -0.00 0.00
0.05 0.00 0.25 0.00 0.00
0.15 0.02 0.76 0.00 0.02
0.25 0.06 1.26 0.02 0.06
0.35 0.12 1.77 0.04 0.12
0.45 0.21 2.27 0.09 0.19
0.56 0.31 2.78 0.16 0.26
0.66 0.43 3.28 0.26 0.34
0.76 0.57 3.79 0.39 0.42
0.86 0.74 4.29 0.56 0.48
0.96 0.92 4.80 0.75 0.53
1.06 1.12 5.30 0.98 0.55
1.16 1.35 5.81 1.24 0.54
1.26 1.59 6.31 1.52 0.48
1.36 1.86 6.82 1.82 0.38
1.46 2.15 7.32 2.13 0.23
1.57 2.45 7.83 2.45 0.01
1.67 2.78 8.33 2.77 -0.27
1.77 3.12 8.84 3.06 -0.61
1.87 3.49 9.34 3.34 -1.02
1.97 3.88 9.85 3.58 -1.51
2.07 4.29 10.35 3.76 -2.06
2.17 4.72 10.86 3.89 -2.67
2.27 5.17 11.36 3.94 -3.34
2.37 5.63 11.87 3.91 -4.05
2.47 6.12 12.37 3.79 -4.81
2.58 6.63 12.88 3.56 -5.60
2.68 7.17 13.38 3.21 -6.40
2.78 7.72 13.89 2.75 -7.21
2.88 8.29 14.39 2.15 -8.00
2.98 8.88 14.90 1.43 -8.76
3.08 9.49 15.40 0.58 -9.47
3.18 10.12 15.91 -0.41 -10.12
3.28 10.78 16.41 -1.52 -10.67
3.38 11.45 16.92 -2.75 -11.12
3.48 12.14 17.42 -4.09 -11.44
3.59 12.86 17.93 -5.53 -11.61
3.69 13.59 18.43 -7.05 -11.62
3.79 14.35 18.94 -8.64 -11.45
3.89 15.12 19.44 -10.28 -11.09
3.99 15.92 19.95 -11.94 -10.53
4.09 16.74 20.45 -13.61 -9.74
4.19 17.57 20.96 -15.25 -8.74
4.29 18.43 21.46 -16.83 -7.51
4.39 19.31 21.97 -18.34 -6.04
4.49 20.20 22.47 -19.73 -4.36
4.60 21.12 22.98 -20.98 -2.45
4.70 22.06 23.48 -22.06 -0.34
4.80 23.02 23.99 -22.94 1.97
4.90 24.00 24.49 -23.58 4.45
5.00 25.00 25.00 -23.97 7.09
Вашій увазі представлений тестовий графік функцій
Y=X|X|, Y=5|X|,Y=X^2*sin і Y=X^2*cos
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»
ПРОГРАМА
ПОБУДОВИ ГРАФІКІВ ФУНКЦІЙ,
ЗАДАНИХ ТАБЛИЦЕЮ
Текст програми
2071180. 00018 – 01 12
Аркушів 10
Представники розроблювача:
Керівник розробки
к.т.н., доцент
Іванов І.І.
Виконавець
ст. гр.І-21
Саленко Я.Д.
2002
unit kursova2;
interface
const
NumOfFun=5; {максимальна кількість функцій}
pic=200; {максимальна кількість точок}
l=60; {ліва границя графіка}
r=150; {права границя графіка}
u=30; {верхня границя графіка}
d=100; {нижня границя графіка}
type
mas=array[1..pic] of real; mas1=array[1..pic] of byte;
procedure sortirovka(n:byte;a:mas;var d:mas1);
procedure MaxMin(n:byte;a:mas;var Maax,Miin:real);
procedure grafikT(sss:string;sX,sY:byte);
implementation
uses graph,crt;
{процедура сортування масиву методом "бульбочки"}
procedure sortirovka(n:byte;a:mas;var d:mas1);
var b:mas;c:real;i,i1:byte;
begin
b:=a;
for i:=1 to n-1 do
if b[i]>b[i+1] then begin c:=b[i];b[i]:=b[i+1];b[i+1]:=c;i:=0;end;
for i:=1 to n do
for i1:=1 to n do
if abs(b[i]-a[i1])<0.0001 then begin d[i]:=i1;a[i1]:=b[1]-1;i1:=n;end;
end;
{процедура визначення максимального, мінімального значень}
procedure MaxMin(n:byte;a:mas;var Maax,Miin:real);
var i:integer;
begin
maax:=a[1];miin:=a[1];
for i:=2 to n do
begin
if maax<a[i] then maax:=a[i];
if miin>a[i] then miin:=a[i];
end;
end;
{основна процедура побудови графіка}
procedure grafikT(sss:string;sX,sY:byte);
var Ymax,Ymin,Xmax,Xmin,mx,my:real; fun,i1,i,n:byte; xg1,yg1,gd,gm,xg,yg:integer;
legend,p:string[10]; f:text; x:mas; koef:mas1; y:array[1..NumOfFun] of mas;
YYmax,YYmin:mas; c:array[1..NumOfFun] of shortint; s:array[1..NumOfFun] of string[10];
ttext:array[1..3] of string[30]; tt:byte; ch:char;
begin
assign(f,sss);
{$i-}
reset(f);
{$i+}
{перевірка наявності файлу, що відкривається,}
if ioresult<>0 then begin writeln('Вибачьте. Файл не знайдено.'); readkey; halt; end;
tt:=0;
{--------------------------читання даних----------------------------}
readln(f,n,fun,legend);
{перевірка наявності легенди}
if (pos('true',legend)<>0)
then for i:=1 to fun do readln(f,c[i],s[i])
else for i:=1 to fun do begin c[i]:=16-i;str(i,p);s[i]:='f'+p+'(x)';end;
for i:=1 to n do begin
read(f,x[i]);
for i1:=1 to fun do read(f,y[i1,i]);
readln(f);
end;
for i:=1 to 3 do
if not eof(f) then begin tt:=tt+1;readln(f,ttext[tt]); end;
close(f);
{-----------------------------------------------------------------------}
sortirovka(n,x,koef);
{-------------------ініціалізація графіки----------------}
gd:=detect;
initgraph(gd,gm,'');
if graphresult<>grOk then begin
writeln('Файл EGAVGA.BGI не знайдений. Будь ласка скопіюйте цей файл у робочий каталог');
readln;halt;end;
{----------------------находження коефіцієнтів масштабування------------------}
MaxMin(n,x,Xmax,Xmin);
mx:=(GetmaxX-l-r)/(Xmax-Xmin);
for i:=1 to fun do MaxMin(n,y[i],YYmax[i],YYmin[i]);
MaxMin(fun,YYmax,Ymax,my);
MaxMin(fun,YYmin,my,Ymin);
my:=(GetmaxY-u-d)/(Ymax-Ymin);
{------------------------побудова і підпис сітки-----------------}
{вертикальні лінії}
setcolor(8);
for i:=0 to sX do
line(l+(GetmaxX-r-l)*i div sX,(GetmaxY-d),l+(GetmaxX-l-r)*i div sX,30);
i1:=sX div 21+1;
i:=0;
setcolor(7);
while i<=sX do begin
line(l+(GetmaxX-l-r)*i div sX,(GetmaxY-d),l+(GetmaxX-l-r)*i div sX,30);
str((Xmax-Xmin)*i/sX+Xmin:5:2,p);
OutTextXY(25+(GetmaxX-l-r)*i div sX,(GetmaxY-d)+5+8*(i mod 2),p);
i:=i+i1;
end;
{горизонтальні лінії}
setcolor(8);
for i:=1 to sY do
line(l,u+(GetmaxY-u-d)*i div sY,(GetmaxX-r),u+(GetmaxY-u-d)*i div sY);
i1:=sY div 50+1;
i:=0;
setcolor(7);
while i<=sY do begin
line(l,u+(GetmaxY-u-d)*i div sY,(GetmaxX-r),u+(GetmaxY-u-d)*i div sY);
str((Ymax-Ymin)*(sY-i)/sY+Ymin:5:2,p);
OutTextXY(0,25+(GetmaxY-u-d)*i div sY,p);
i:=i+i1;
end;
{---------------- виведення підпису графіка й імені виведеного файлу-----}-setcolor(15);
outtextXY((getmaxX+l-r-length(sss)*7) div 2,10,sss);
SetTextStyle(0,0,2);
for і:=1 to tt do OutTextXY((getmax+l-r-length(ttext[і])*16) div 2,GetmaxY-d+20*і+10,ttext[і]);
{----------------------------виведення легенди----------------------}
SetTextStyle(0,0,1);
for i:=1 to fun do begin
setcolor(c[i]);
line(GetmaxX-r+10,102+і*10,GetmaxX-r+20,102+і*10);
OutTextXY(GetmaxX-r+25,100+і*10,s[і]); end;
{-------------------------побудова графіків-------------}
for i:=1 to n-1 do begin
xg:=round( (x[koef[i]]-Xmin)*mx )+l;
xg1:=round( (x[koef[i+1]]-Xmin)*mx )+l;
for i1:=1 to fun do begin
yg:=GetmaxY-round( (y[i1,koef[i]]-Ymin)*my )-d;
yg1:=GetmaxY-round( (y[i1,koef[i+1]]-Ymin)*my )-d;
setcolor(c[i1]);
line(xg,yg,xg1,yg1);
end;
end;
{-----------------------------------------------------------------------}
readkey;
closegraph;
end;
begin
end.
