Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
T3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
111.62 Кб
Скачать

1. Призначення й умови застосування. Характеристики програми

Програма призначена для побудови графіків функцій, заданих таблицею. Результатом роботи програми є виведення графіків функцій на екран монітора комп'ютера. Для функціонування програми є необхідним набір наступних технічних засобів: ПЭВМ на базі процесора з ОЗП 1МБ, при режимі EGA(VGA). Для роботи програми необхідно використовувати драйвер графічного режиму EGAVGA.BGI.

Час роботи програми 1-2(сек).

Режим роботи – графічний (640/480).

Засобу контролю і самовідновлення не передбачені.

2. СТРУКТУРА ПРОГРАМИ

Програмний модуль Graphs1 складається з 3 процедур:

  1. Процедура maxmin знаходить мінімальний і максимальний елементи масиву.

  2. Процедура sortirovka сортує масив.

  3. Процедура 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.

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