Автор работы: Пользователь скрыл имя, 10 Ноября 2012 в 10:46, реферат
Целью выполненной курсовой работы является разработка программного продукта. Приложение должно в заданном множестве точек найти три треугольника с вершинами на плоскости, так чтобы второй треугольник лежал строго внутри первого, а третий внутри второго.
Введение
1 Общая часть
1.1 Постановка задачи
1.2 Описание математического метода решения задачи
1.3 Описание решения поставленной задачи
2 Специальная часть
2.1 Алгоритм работы программы
2.1.1 Процедура создания главной формы
2.1.2 Процедура ввода значений с клавиатуры
2.1.3 Процедура выбора случайных значений
2.1.4 Процедура открытия из текстового файла
2.1.5 Процедура сохранения в текстовый файл
2.1.6 Процедура вычисления
2.1.6.1 Процедура вывод
2.1.6.2 Процедура повтор
2.1.7 Процедура очистки окна вывода информации
2.1.8 Процедура выхода из программы
2.2 Системно – технические требования программы
2.3 Руководство пользователя
Заключение
Литература
Приложение А Листинг программы
Приложение Б Таблица спецификации глобальных переменных
else result:=false;
end;
procedure TForm1.setka;
var
h,w:integer;//высота окна вывода
lx,ly,ly1,lx1,lx2,lx3,lx4,
begin
h:=Form1.Image1.Height;
w:=Form1.Image1.Width;
x0:=w div 2;;
y0:=h div 2;
with Form1.Image1.Canvas do
begin
MoveTo(x0,y0);
LineTo(w,y0);
MoveTo(x0,y0);
LineTo(x0,0);
MoveTo(x0,y0);
LineTo(0,y0);
MoveTo(x0,y0);
LineTo(x0,h);
end;
dx:=x0 div 5;
dy:=y0 div 5;
lx:=x0;
lx1:=0;
lx3:=x0;
lx4:=0;
Form1.Image1.Canvas.TextOut(
repeat //прорисовка меток и оцифровка по оси ox
with Form1.Image1.Canvas do
begin
Pen.Style:=psDot;
Pen.Color:=clBlack;
lx:=lx+dx;
lx1:=lx1+5;
MoveTo(lx,y0);
LineTo(lx,0);
moveTo(lx,y0);
LineTo(lx,h);
Pen.Style:=psSolid ;
MoveTo(lx,y0+3);
Lineto(lx,y0);
lx2:=Trunc (lx1);
TextOut(lx-4,y0+7,IntToStr(
Pen.Style:=psDot;
lx3:=lx3-dx;
lx4:=lx4-5;
MoveTo(lx3,y0);
LineTo(lx3,0);
moveTo(lx3,y0);
LineTo(lx3,h);
Pen.Style:=psSolid ;
MoveTo(lx3,y0+3);
Lineto(lx3,y0);
lx2:=Trunc (lx4);
TextOut(lx3-4,y0+7,IntToStr(
end;
until (lx>=w);
ly:=y0;
ly1:=0;
ly3:=y0;
ly4:=0;
repeat//прорисовка меток и оцифровка по оси oy
with Form1.Image1.Canvas do
begin
Pen.Style:=psDot;
ly:=ly-dy;
MoveTo(x0,ly);
LineTo(w,ly);
MoveTo(x0,ly);
LineTo(0,ly);
Pen.Style:=psSolid;
MoveTo(x0-3,ly);
Lineto(x0,ly);
ly1:=ly1+5;
ly2:=trunc(ly1);
TextOut(x0-7,ly+4,InttoStr(
Pen.Style:=psDot;
ly3:=ly3+dy;
MoveTo(x0,ly3);
LineTo(w,ly3);
MoveTo(x0,ly3);
LineTo(0,ly3);
Pen.Style:=psSolid;
MoveTo(x0-3,ly3);
Lineto(x0,ly3);
ly4:=ly4-5;
ly2:=trunc(ly4);
TextOut(x0-7,ly3+4,InttoStr(
end;
until (ly<=0);
end;
procedure TForm1.vivod;
var
ravn,result: boolean;
i,j,k,l,m,s,s4,u,v,i1,j1,k1,
r,pr,pr1,pr2,pr3,AB,BC,AC,Ga,
A1,B1,C1: TPoint;
begin
ravn:=false;
for i:=1 to cnt-1 do
begin
A:=point[i];
for j:=1 to cnt-1 do
begin
B:=point[j];
for k:=1 to cnt-1 do
begin
C:=point[k];
AB:=(sqrt(sqr(B.X-A.X)+sqr(B.
BC:=(sqrt(sqr(C.x-B.X)+sqr(C.
AC:=(sqrt(sqr(C.X-A.X)+sqr(C.
if ((AB+BC<>AC) and (AB>0) and (BC>0) and (AC>0)) then
begin
kol:=1;
for l:=1 to cnt-1 do
begin
G:=point[l];
GA:=(sqrt(sqr(A.X-G.X)+sqr(A.
GB:=(sqrt(sqr(B.X-G.X)+sqr(B.
GC:=(sqrt(sqr(C.X-G.X)+sqr(C.
if (GA+GB<>AB)
and (GB+GC<>BC) and (GA+GC<>AC) and (GA<>0)and(GB<>0)and(GC<>0)
begin
s:=round(TriangleArea(A.X,A.Y,
s1:=TriangleArea(A.X,A.Y,G.X,
s2:=TriangleArea(A.X,A.Y,G.X,
s3:=TriangleArea(B.X,B.Y,G.X,
s4:=round(s1+s2+s3);
if s4=s then
begin inc(kol);D:=G;
kol:=2;
for u:=1 to cnt-1 do
begin
G:=point[u];
GA:=(sqrt(sqr(A.X-G.X)+sqr(A.
GB:=(sqrt(sqr(B.X-G.X)+sqr(B.
GC:=(sqrt(sqr(C.X-G.X)+sqr(C.
if (GA+GB<>AB) and (GB+GC<>BC)
and (GA+GC<>AC) and (GA<>0)and(GB<>0)and(GC<>0)
begin
result:=IsInTriange(G.X,G.Y,A.
if result then
begin
inc(kol);
E:=G;
kol:=3;
for v:=1 to cnt-1 do
begin
G:=point[v];
GA:=(sqrt(sqr(A.X-G.X)+sqr(A.
GB:=(sqrt(sqr(B.X-G.X)+sqr(B.
GC:=(sqrt(sqr(C.X-G.X)+sqr(C.
if (GA+GB<>AB) and (GB+GC<>BC)
and (GA+GC<>AC) and (GA<>0)and(GB<>0)and(GC<>0)
begin
result:=IsInTriange(G.X,G.Y,A.
if result then
begin //
F:=G; inc(kol);
end; //
If kol=4 then
begin//
DE:=round(sqrt(sqr(E.X-D.X)+
EF:=round(sqrt(sqr(F.X-E.X)+
FD:=round(sqrt(sqr(D.X-F.X)+
if (DE+EF<>FD)and(DE+FD<>EF)and(
begin
ravn:=false;
kol:=1;
for i1:=1 to cnt-1 do
begin
G:=point[i1];
GD:=(sqrt(sqr(d.X-G.X)+sqr(D.
GE:=(sqrt(sqr(E.X-G.X)+sqr(E.
GF:=(sqrt(sqr(F.X-G.X)+sqr(F.
if (GD+GE<>DE) and (GD+GF<>FD)
and (GE+GF<>EF) and (GD<>0)and(GE<>0)and(GF<>0)
begin
result:=IsInTriange(G.X,G.Y,D.
if result then
begin inc(kol);A1:=G;
kol:=2;
for j1:=1 to cnt-1 do
begin
G:=point[j1];
GD:=(sqrt(sqr(d.X-G.X)+sqr(D.
GE:=(sqrt(sqr(E.X-G.X)+sqr(E.
GF:=(sqrt(sqr(F.X-G.X)+sqr(F.
if (GD+GE<>DE) and (GD+GF<>FD)
and (GE+GF<>EF) and (GD<>0)and(GE<>0)and(GF<>0)
begin
result:=IsInTriange(G.X,G.Y,D.
if result then
if s4=s then
begin inc(kol);B1:=G;
kol:=3;
for k1:=1 to cnt-1 do
begin
G:=point[k1];
GD:=(sqrt(sqr(d.X-G.X)+sqr(D.
GE:=(sqrt(sqr(E.X-G.X)+sqr(E.
GF:=(sqrt(sqr(F.X-G.X)+sqr(F.
if (GD+GE<>DE) and (GD+GF<>FD)
and (GE+GF<>EF) and (GD<>0)and(GE<>0)and(GF<>0)
begin
result:=IsInTriange(G.X,G.Y,D.
if result then
begin inc(kol);C1:=G;
end;
If kol=4 then
begin//
kol:=5;
A1B1:=round(sqrt(sqr(B1.X-A1.
A1C1:=round(sqrt(sqr(C1.X-A1.
B1C1:=round(sqrt(sqr(C1.X-B1.
if (A1B1+A1B1<>B1C1) and (A1B1<>0) and (A1C1<>0) and (B1C1<>0) then
begin//
mas[cnt1]:=A;
mas[cnt1+1]:=B;
mas[cnt1+2]:=C;
mas[cnt1+3]:=D;
mas[cnt1+4]:=E;
mas[cnt1+5]:=F;
mas[cnt1+6]:=A1;
mas[cnt1+7]:=B1;
mas[cnt1+8]:=C1;
cnt1 :=cnt1+9;
ravn:=true;
with Image1.Canvas do
begin
moveto(A.X*dx div 5+x0,A.Y*dy div 5+y0);
lineto(B.X*dx div 5+x0,B.Y*dy div 5+y0);
lineto(C.X*dx div 5+x0,C.Y*dy div 5+y0);
lineto(A.X*dx div 5+x0,A.Y*dy div 5+y0);
moveto(D.X*dx div 5+x0,D.Y*dy div 5+y0);
lineto(E.X*dx div 5+x0,E.Y*dy div 5+y0);
lineto(F.X*dx div 5+x0,F.Y*dy div 5+y0);
lineto(D.X*dx div 5+x0,D.Y*dy div 5+y0);
moveto(A1.x*dx div 5+x0,A1.y*dy div 5+y0);
lineto(B1.x*dx div 5+x0,B1.y*dy div 5+y0);
lineto(C1.x*dx div 5+x0,C1.y*dy div 5+y0);
lineto(A1.x*dx div 5+x0,A1.y*dy div 5+y0);
end;
end;
end;
end;
if ravn then begin k2:=k1; break; end;
end;
end
end;
if ravn then begin j2:=j1; break; end;
end;
end;
end;
if ravn then begin i2:=i1; break; end;
end;
end;
end;
end;
if ravn then begin v1:=v; break; end;
end;
end;
end;
if ravn then begin u1:=u; break; end;
end;
end;
end;
if ravn=true then begin q:=l; break; end;
end;
end;
if ravn=true then begin t:= k; break; end;
end;
if ravn=true then begin w:=j; break; end;
end;
if ravn=true then begin z:=i; break; end;
end;
if kol<5 then
begin
Form3.listbox1.Clear;
//cnt:=1;
for m:=1 to cnt do
begin
point[m].X:=0;
point[m].Y:=0;
end;
cnt:=1;
cnt1:=1;
r:= MessageDlg( 'Нет точек удовлетворяющих условию', mtInformation, [mbOK], 0);exit;
end;
Form3.OKBtn.Caption:='
kol:=1;
end;
procedure TForm1.povtor;
var
ravn, result: boolean;
i,j,k,l,m,s4,u,v,i1,j1,k1,
r,AB,BC,AC,Ga,GB,GC,DE,FD,EF,
A1,B1,C1: TPoint;
begin
ravn:=false;
for i:=z to cnt-1 do
begin
A:=point[i];
for s:=1 to cnt1-1 do
begin
if (mas[s].X=A.X)and(mas[s].Y=A.
end;
for j:=w to cnt-1 do
begin
B:=point[j];
for s:=1 to cnt1-1 do
begin
if (mas[s].X=B.X)and(mas[s].Y=B.
end;
for k:=t to cnt-1 do
begin
C:=point[k];
for s:=1 to cnt1-1 do
begin
if (mas[s].X=C.X)and(mas[s].Y=C.
end;
AB:=(sqrt(sqr(B.X-A.X)+sqr(B.
BC:=(sqrt(sqr(C.x-B.X)+sqr(C.
AC:=(sqrt(sqr(C.X-A.X)+sqr(C.
if ((AB+BC<>AC) and (AB>0) and (BC>0) and (AC>0)) then
begin
kol:=1;
for l:=q to cnt do
begin
G:=point[l];
GA:=(sqrt(sqr(A.X-G.X)+sqr(A.
GB:=(sqrt(sqr(B.X-G.X)+sqr(B.
GC:=(sqrt(sqr(C.X-G.X)+sqr(C.
if (GA+GB<>AB)
and (GB+GC<>BC) and (GA+GC<>AC) and (GA<>0)and(GB<>0)and(GC<>0)
begin
result:=IsInTriange(G.X,G.Y,A.
if result then
begin inc(kol);D:=G;
for s:=1 to cnt1-1 do
begin
if (mas[s].X=D.X)and(mas[s].Y=D.
end;
kol:=2;
for u:=u1 to cnt do
begin
G:=point[u];
GA:=(sqrt(sqr(A.X-G.X)+sqr(A.
GB:=(sqrt(sqr(B.X-G.X)+sqr(B.
GC:=(sqrt(sqr(C.X-G.X)+sqr(C.
if (GA+GB<>AB)
and (GB+GC<>BC) and (GA+GC<>AC) and (GA<>0)and(GB<>0)and(GC<>0)
begin
result:=IsInTriange(G.X,G.Y,A.
if result then
begin
inc(kol);
E:=G;
for s:=1 to cnt1-1 do
begin
if (mas[s].X=E.X)and(mas[s].Y=E.
end;
kol:=3;
for v:=v1+1 to cnt do
begin
G:=point[v];
GA:=(sqrt(sqr(A.X-G.X)+sqr(A.
GB:=(sqrt(sqr(B.X-G.X)+sqr(B.
GC:=(sqrt(sqr(C.X-G.X)+sqr(C.Y
if (GA+GB<>AB)
and (GB+GC<>BC) and (GA+GC<>AC) and (GA<>0)and(GB<>0)and(GC<>0)
begin
result:=IsInTriange(G.X,G.Y,A.
if result then
begin //
F:=G;
for s:=1 to cnt1-1 do
begin
if (mas[s].X=F.X)and(mas[s].Y=F.
end;
inc(kol);
end; //
If kol=4 then
begin//
DE:=round(sqrt(sqr(E.X-D.X)+
EF:=round(sqrt(sqr(F.X-E.X)+
FD:=round(sqrt(sqr(D.X-F.X)+
if (DE+EF<>FD) and (DE<>0) and (EF<>0) and (FD<>0) then
begin
ravn:=false;
for i1:=i2 to cnt-1 do
begin
G:=point[i1];
GD:=(sqrt(sqr(d.X-G.X)+sqr(D.
GE:=(sqrt(sqr(E.X-G.X)+sqr(E.
GF:=(sqrt(sqr(F.X-G.X)+sqr(F.
if (GD+GE<>DE)
and (GD+GF<>FD) and (GE+GF<>EF) and (GD<>0)and(GE<>0)and(GF<>0)
begin
result:=IsInTriange(G.X,G.Y,D.
if result then
begin inc(kol);A1:=G;
for s:=1 to cnt1-1 do
begin
if (mas[s].X=A1.X)and(mas[s].Y=
end;
kol:=2;
for j1:=j2 to cnt-1 do
begin
G:=point[j1];
GD:=(sqrt(sqr(d.X-G.X)+sqr(D.
GE:=(sqrt(sqr(E.X-G.X)+sqr(E.
GF:=(sqrt(sqr(F.X-G.X)+sqr(F.
if (GD+GE<>DE)
and (GD+GF<>FD) and (GE+GF<>EF) and (GD<>0)and(GE<>0)and(GF<>0)
begin
result:=IsInTriange(G.X,G.Y,D.
if result then
begin inc(kol);B1:=G;
for s:=1 to cnt1-1 do
begin
if (mas[s].X=B1.X)and(mas[s].Y=
end;
kol:=3;
for k1:=k2+1 to cnt-1 do
begin
G:=point[k1];
GD:=(sqrt(sqr(d.X-G.X)+sqr(D.
GE:=(sqrt(sqr(E.X-G.X)+sqr(E.
GF:=(sqrt(sqr(F.X-G.X)+sqr(F.
if (GD+GE<>DE) and (GD+GF<>FD)
and (GE+GF<>EF) and (GD<>0)and(GE<>0)and(GF<>0)
begin
result:=IsInTriange(G.X,G.Y,D.
if result then
begin inc(kol);C1:=G;
for s:=1 to cnt1-1 do
begin
if (mas[s].X=C1.X)and(mas[s].Y=
end;
end;
p:=p1*p2*p3*p4*p5*p6*p7*p8*p9;
If (kol=4)and(p=0) then
begin//
kol:=5;
A1B1:=round(sqrt(sqr(B1.X-A1.
A1C1:=round(sqrt(sqr(C1.X-A1.
B1C1:=round(sqrt(sqr(C1.X-B1.
if (A1B1+A1B1<>B1C1) and (A1B1<>0) and (A1C1<>0) and (B1C1<>0) then
begin//
mas[cnt1]:=A;
mas[cnt1+1]:=B;
mas[cnt1+2]:=C;
mas[cnt1+3]:=D;
mas[cnt1+4]:=E;
mas[cnt1+5]:=F;
mas[cnt1+6]:=A1;
mas[cnt1+7]:=B1;
mas[cnt1+8]:=C1;
cnt1 :=cnt1+9;
ravn:=true;
with Image1.Canvas do
begin
moveto(A.X*dx div 5+x0,A.Y*dy div 5+y0);
lineto(B.X*dx div 5+x0,B.Y*dy div 5+y0);
lineto(C.X*dx div 5+x0,C.Y*dy div 5+y0);
lineto(A.X*dx div 5+x0,A.Y*dy div 5+y0);
moveto(D.X*dx div 5+x0,D.Y*dy div 5+y0);
lineto(E.X*dx div 5+x0,E.Y*dy div 5+y0);
lineto(F.X*dx div 5+x0,F.Y*dy div 5+y0);
lineto(D.X*dx div 5+x0,D.Y*dy div 5+y0);
moveto(A1.x*dx div 5+x0,A1.y*dy div 5+y0);
lineto(B1.x*dx div 5+x0,B1.y*dy div 5+y0);
lineto(C1.x*dx div 5+x0,C1.y*dy div 5+y0);
lineto(A1.x*dx div 5+x0,A1.y*dy div 5+y0);
end;
end;
end;
end;
k2:=0;
if ravn then begin k2:=k1; break; end;
end;
end
end;
j2:=1;
if ravn then begin j2:=j1; break; end;
end;
end;
end;
i2:=1;
if ravn then begin i2:=i1; break; end;
end;
end;
end;
end;
v1:=0;
if ravn then begin v1:=v; break; end;
end;
end;
end;
u1:=1;
if ravn then begin u1:=u; break; end;
end;
end;
end;
q:=1;
if ravn=true then begin q:=l; break; end;
end;
end;
t:=1;
if ravn=true then begin t:= k; break; end;
end;
w:=1;
if ravn=true then begin w:=j; break; end;
end;
if ravn=true then begin z:=i; break; end;
end;
s:=p;
s:=kol;
if (kol<5) or (cnt1>199) then
begin
Form3.listbox1.Clear;
for m:=1 to cnt do
begin
point[m].X:=0;
point[m].Y:=0;
end;
for s:=1 to cnt1-1 do
begin
mas[s].X:=0;
mas[s].Y:=0;
end;
cnt:=1;
cnt1:=1;
Form3.OKBtn.Caption:='вывести'
r:= MessageDlg( 'Нет точек удовлетворяющих условию', mtInformation, [mbOK], 0);exit;
end;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N7Click(Sender: TObject);
var
r: real;
begin
Form3.Show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
setka;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
image1.Canvas.FillRect(image1.
setka;
Form3.ListBox1.Clear;
Информация о работе Математическое решение задач с графической иллюстрацией результатов