Міністерство освіти та науки України
Національний університет „Львівська політехніка”
АЛГОРИТМІЧНА МОВА ПРОГРАМУВАННЯ Сі
ПРОСТІ ПРОГРАМИ ЛІНІЙНОЇ СТРУКТУРИ
Звіт
до лабораторної роботи №2 15-варівнт
З КУРСУ “ Комп’ютерна графіка ”
Львів-2005
Мета роботи - набути практичних навиків в складанні програм для побудови графіків функ-цій за допомогою засобів мови Турбо Паскаль.
.
Завдання:
N% п/п
Функція
Інтервал
Крок
15
t=[-100;100]
h=0.5
Блок-схема програми
Процедура Bild_x0y0
Пояснення до блок-схеми процедури Bild_x0y0
№
Опис блока
1)
Умовний оператор, що перевіряє чи аргумент проходить через 0
2)
Присвоєння координат Х00 машинного значення мінімального елемента
3)
Умовний оператор, що перевіряє чи максимальний елемент більше 0
4)
Присвоєння Х00 значення крайньої лівої точки
5)
Присвоєння Х00 значення крайньої правої точки
6)
Побудова лінії осі координат Х по заданих точках
7)
Умовний оператор, що перевіряє чи аргумент проходить через 0
8)
Присвоєння координат y00 машинного значення мінімального елемента
9)
Умовний оператор, що перевіряє чи максимальний елемент більше 0
10)
Присвоєння y00 значення крайньої нижньої точки
11)
Присвоєння y00 значення крайньої верхньої точки
12)
Побудова лінії осі координат У по заданих точках
13)
Умовний оператор, що перевіряє чи максимальний елемент більше 0
14)
Присвоєння значень стрілок
15)
Присвоєння значень стрілок
16)
Умовний оператор, що перевіряє чи максимальний елемент більше 0
17)
Присвоєння значень стрілок
18)
Присвоєння значень стрілок
19)
Побудова стрілок по осі У
20)
Побудова стрілок по осі Х
21)
Покроковий цикл For
22)
Побудова засічок на осі Х
23)
Перехід від машинних до реальних координат
24)
Приведення строки з значенням Х до менших розмірів
25)
Оцифровка значень по осі Х
26)
Покроковий цикл For
27)
Побудова засічок на осі У
28)
Перехід від машинних до реальних координат
29)
Приведення строки з значенням У до менших розмірів
30)
Оцифровка значень по осі У
Лістинг:
Program graf_madel;
uses crt, graph;
Var
a,b,t,hi,x_max,y_max,x_min,y_min,x_zoom, y_zoom,x0,y0,x,y, x_begin,x_end:real;
i,x1,y1,x2,y2,h,w:integer;
{---------------graph_install--------------------}
Procedure graph_install;
var driver, regim, error: integer;
begin
Clrscr;
driver:=detect;
initgraph(driver, regim, '');
error:=graphResult;
End;
{------------------------------------------------}
Function x_t(xt:real):real;
Begin
X_t:=cos(xt)*xt;
end;
Function y_t(yt:real):real;
Begin
y_t:=(yt);
end;
{---------------bild_x0y0-------------}
procedure bild_x0y0;
VAR x00,y00, X_strilku_x, x_strilku_y, y_strilku_x, y_strilku_y,
ds_x_x, ds_x_y, ds_y_x, ds_y_y, Text_x, texT_y:integer;
st:string;
begin
setcolor(8);
if x_max*x_min<0 then X00:=trunc(x_zoom*(0-x_min))+20
else
begin
if x_max>0 then X00:=trunc(0)+20
else X00:=trunc(H)+20
end;
line(x00,W+30,x00,0) ;
if y_min*y_max<0 then y00:=w-trunc(y_zoom*(-y_min))+15
else
begin
if y_max>0 then y00:=w+15
else y00:=trunc(0)+15
end;
line(0,y00,h+40,y00);
if x_max>0 then
begin
x_strilku_x:=H+40; x_strilku_y:=y00;
ds_x_x:=-12; ds_x_y:=4;
end
else
begin
x_strilku_x:=0; x_strilku_y:=y00;
ds_x_x:=12; ds_x_y:=4;
end;
if y_max>0 then
begin
Y_strilku_x:=x00; y_strilku_y:=0;
ds_y_x:=4; ds_y_y:=12;
end
else
begin
Y_strilku_x:=x00; y_strilku_y:=w+30;
ds_y_x:=4; ds_y_y:=-12;
end;
line(X_strilku_x,x_strilku_y,X_strilku_x+ds_x_x,x_strilku_y-ds_x_y);
line(X_strilku_x,x_strilku_y,X_strilku_x+ds_x_x,x_strilku_y+ds_x_y);
line(y_strilku_x,y_strilku_y,y_strilku_x-ds_y_x,y_strilku_y+ds_y_y);
line(y_strilku_x,y_strilku_y,y_strilku_x+ds_y_x,y_strilku_y+ds_y_y);
if x_strilku_y=H+20 then ds_x_y:=12 else ds_x_y:=-12;
if y_strilku_x<W+15 then ds_y_x:=-10 else ds_y_x:=10;
settextstyle(1,0,0);
OutTextXY(x_strilku_x+ds_x_x, x_strilku_y+ds_x_y, 'x');
settextstyle(1,1,0);
OutTextXY(y_strilku_x+ds_y_x, y_strilku_y+Ds_y_y, 'y');
settextstyle(1,0,0);
if (x00>20) and (X00<h+20) and (y00>15) and (X00<w+15) then OutTextXY(x00-8,y00+4,'0');
for i:=1 to trunc(getMaxX/65) do
begin
text_x:=75*i;
line(text_x, y00+5, text_x, y00-5);
x:=x_min+(text_x-20)/x_zoom;
str(x,st);
delete(st,5,13);
delete(st,7,2);
outtextXY(text_x-20, x_strilku_y+ds_x_y, st);
end;
settextstyle(1,1,0);
for i:=1 to 5 do
begin
text_y:=80*i;
Line(x00+5,text_y,x00-5,text_y);
y:=y_min+(-text_y+20+w)/y_zoom;
str(y,st);
delete(st,5,13);
delete(st,7,2);
outtextXY(y_strilku_x+ds_y_x, text_y-20, st);
end;
end;
{---------------------------------------}
begin
write('a=');
read(a);
write('b=');
read(b);
write('h=');
read(hi);
t:=a;
x_max:=x_t(a);
y_max:=y_t(a);
y_min:=y_max;
x_min:=x_max;
while t<=b do begin
t:=t+hi;
x:=x_t(t);
y:=y_t(t);
if x<x_min then x_min:=x;
if x>x_max then x_max:=x;
if y<y_min then y_min:=y;
if y>y_max then y_max:=y;
end;
readln;
graph_install;
H:=GetMaxX-40;
W:=GetMaxY-30;
x_zoom:=h/(x_max-x_min);
y_zoom:=w/(y_max-y_min);
x0:=x_t(a);
y0:=y_t(a);
t:=a;
while t<=b do begin
x:=x_t(t);
y:=y_t(t);
x2:=20+trunc(x_zoom*(-x_min+x));
Y2:=15+w-trunc(y_zoom*(-y_min+y));
x1:=20+trunc(x_zoom*(-x_min+x0));
y1:=15+w-trunc(y_zoom*(-y_min+y0));
setcolor(1);
line(x1,y1,x2,y2);
x0:=x; y0:=y;
t:=t+hi;
end;
bild_x0y0;
readln;
closegraph;
readln;
end.
Список ідентифікаторів констант, змінних, функцій, використаних у блок-схемі алгоритму і програмі:
x1,y1,x2,y2,– перемінні цілого типу, що вказують координати побудови ліній, і – перемінні цілого типу , Graph_install – процедура встановлення графічного режиму, line(x1,y1,x2,y2)- процедура побудови лінії, setcolor – встановлення кольору, For – покроковий цикл;
Висновок: на цій лабораторній роботі ми набули ти практичних навиків в складанні програм для побудови графіків функ-цій за допомогою засобів мови Турбо Паскаль.