Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Доклад практика.doc
Скачиваний:
6
Добавлен:
10.09.2019
Размер:
4 Мб
Скачать

Завдання №1.

Скласти блок-схему і програму табулювання функції з перевіркою її на існування і виведення на екран координат графіка функції, використовуючи масштабування. Значення коефіцієнтів - випадкові числа, певного значення.

Функція:

Значення коефіцієнтів: х [-10; 10] , а [-20; 20]

    1. Блок-схема алгоритму.

    1. Текст програми на Qbasic.

CLS

SCREEN 12

cv = 8

LINE (300, 200)-(600, 200), cv

LINE (450, 50)-(450, 350), cv

LINE (590, 195)-(600, 200), cv

LINE (590, 205)-(600, 200), cv

LINE (445, 60)-(450, 50), cv

LINE (455, 60)-(450, 50), cv

FOR dx = 300 TO 595 STEP 10

LINE (dx, 200 - 2)-(dx, 200 + 2), cv

NEXT dx

FOR dy = 50 TO 350 STEP 10

LINE (450 - 1, dy)-(450 + 1, dy), cv

NEXT dy

RANDOMIZE TIMER

a = INT(40 * RND) - 20

PRINT "a="; a

x = -10

PRINT " x y"

WHILE x < 10

b = a * x * (1 + COS(2 * x))

c = ((a - x) * (1 + COS(x)))

IF b > 0 AND c <> 0 THEN

k = SQR(b)

y = (x * x) * (k / c)

PRINT USING " ### #####.##"; x; y

ELSE

PRINT " "; x; " ne sushestvyet"

END IF

x = x + 1

WEND

x = -10

WHILE x < 10

b = a * x * (1 + COS(2 * x))

IF b > 0 AND c <> 0 THEN

k = SQR(b)

y = (x * x) * (k / c) * (-1)

LINE (450 + x1 * 10, y1 / 20 + 200)-(450 + x * 10, y / 20 + 200), 4

x1 = x

y1 = y

END IF

x = x + .05

WEND

END

    1. Результат роботи програми на Qbasic.

Завдання №2.

Визначити належність точок, що задані випадковими координатами, заштрихованій області або її межі. На екрані відобразити таблицю з координатами і графічне вікно, що демонструє малюнок розташування точок або діаграму співвіднесення кількості точок в області, за зовнішньою межею, у внутрінній не заштрихованій області на межі.

Данні про фігуру:

R=16

Кількість точок =16

2.1. Блок-схема алгоритму.

2.2. Текст програми на Pascal.

uses crt,graph;

const

POINTS = 16;

R = 16;

var gd,gm:integer;

x,y,xg,yg,xs,ys,xt,yt,i,pologenie:integer;

v:array [0..2] of integer;

strx,stry, pol:string;

m:single;

Procedure risuemCoordinate(x,y:integer; m:single);

var size:integer;

begin

size:=round((r+10)*m);

line(x-size,y,x+size,y);

line(x,y-size,x,y+size);

line(x+size,y,x+size-5,y-5);

line(x+size,y,x+size-5,y+5);

line(x,y-size,x+5,y-size+5);

line(x,y-size,x-5,y-size+5);

end;

Procedure risuemFigure(x,y:integer;m:single);

var s,c:integer;

begin

s:=round(r*m);

setfillstyle(3,8); {второе число цвет закраски, первое стиль}

pieslice(x,y,0,135,round(R*m));

pieslice(x,y,225,360,round(R*m));

line(x-s,y+s,x+s,y-s);

line(x-s,y-s,x+s,y+s);

outtextxy(x+s+5,y-s,'y=x');

outtextxy(x-s,y-s-10,'y=-x');

end;

procedure risuemgistogramm(x,y:integer; v:array of integer);

const s:array[0..2] of string = ('попадает','на границе','за пределами');

var w,h,wf,i,sum:integer;

vs:string;

begin

w:=300;

h:=150;

sum:=v[0]+v[1]+v[2];

wf:=(w div 3);

rectangle(x,y,x+w,y+h);

for i:=0 to 2 do begin

setfillstyle(1,i*2+2);

bar(x+i*wf+20,y+h,x+wf*i+(wf-20),y+h-round((h/sum)*v[i]));

str(v[i],vs);

outtextxy(x+i*wf+40,y+h-round((h/sum)*v[i])-10,vs);

outtextxy(x+i*wf+10,y+h,s[i]);

end;

end;

function popadaet(x,y:integer):integer;

begin

if (R*R>x*x+y*y) and ((x>0)or(abs(y)>abs(x))) then popadaet:=-1

else if ((R*R=x*x+y*y) and ((x>=0)or(abs(y)>abs(x))))

or ((R*R>x*x+y*y) and (x<=0) and (abs(x)=abs(y))) then popadaet:=0

else popadaet:=1;

end;

begin

Gd:=detect;

InitGraph(Gd, Gm, '');

If GraphResult <> grOk Then Halt(0);

Randomize;

{=====================}

m:=5;

xs:=150;

ys:=200;

xt:=350;

yt:=50;

xg:=320;

yg:=240;

v[0]:=0;v[1]:=0;v[2]:=0;

setcolor(15);

outtextxy(xt,yt-3,'Таблица координат');

setcolor(4);

risuemFigure(xs,ys,m);

setcolor(7);{цвет крестика}

risuemCoordinate(xs,ys,m);

{рисуем точки}

for i:=1 to POINTS do begin

x:=random(r*2)-r;

y:=random(r*2)-r;

x:=-5;y:=1;

setcolor(15);

CIRCLE(xs+round(x*m),ys+round(y*m),1);

pologenie:=popadaet(x,y);

setcolor(15);

str(x,strx);str(y,stry);

outtextxy(xt,yt+10*i,'x='+strx);

outtextxy(xt+50,yt+10*i,'y='+stry);

if pologenie<0 then begin

outtextxy(xt+100,yt+10*i ,'Поподает');

v[0]:=v[0]+1;

end else if pologenie=0 then begin

outtextxy(xt+100,yt+10*i,'На границе');

v[1]:=v[1]+1;

end else if pologenie>0 then begin

outtextxy(xt+100,yt+10*i,'За областью');

v[2]:=v[2]+1;

end;

end;

risuemGistogramm(xg,yg,v);

readkey;

CloseGraph;

end.