Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / перестановки / Unit1
.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
struct Tochka
{
int x0;
int y0;
};
int xx, yy;
int x[100], y[100];
int n=0;
int p[100];
int s=0;
void PaintX (Tochka t1, Tochka t2)
{
Form1->Image1->Canvas->MoveTo(t1.x0,t1.y0);
Form1->Image1->Canvas->LineTo(t2.x0,t2.y0);
}
Tochka t[100];
bool GenPer(int p[], int k)
{
int j, d; bool result;
do
{k--;
d = p[1];
for(j=1;j<k+1;j++)
p[j] = p[j+1];
p[k+1] = d;
result = d>k;
}
while (result&&k!=1);
return result;
}
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
xx=X;
yy=Y;
}
void __fastcall TForm1::Image1Click(TObject *Sender)
{
n++;
int nn = n;
Form1->Image1->Canvas->Ellipse(xx-8,yy-8,xx+8,yy+8);
Form1->Image1->Canvas->TextOutA(xx-3,yy-7,IntToStr(nn));
x[nn]=xx;
y[nn]=yy;
t[nn].x0 = x[nn];
t[nn].y0 = y[nn];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text = "";
if (s!=0)
{
for(int i=2;i<n;i++)
{
Form1->Image1->Canvas->Pen->Color=0xffffff;
PaintX(t[p[i-1]],t[p[i]]);
}
Form1->Image1->Canvas->Pen->Color=0xffffff;
PaintX(t[p[1]],t[p[n-1]]);
Form1->Image1->Canvas->Pen->Color=0x000000;
}
float mas[100];
int a, b, j, k;
bool flag, pr;
float f, r;
for(j=1;j<n+1;j++)
p[j] = j;
do
{
flag = GenPer(p,n);
for(j=1;j<n+1;j++)
{f = 0;
pr = true;
a = p[j];
if (j<n)
b = p[j+1];
else
b = p[1];
for(k=1;k<n+1;k++)
if (p[k]!=a&&p[k]!=b)
{
r = (x[b] - x[a])*(y[p[k]] - y[a]) - (y[b] - y[a])*(x[p[k]] - x[a]);
pr = f*r>=0;
if (pr==true)
f = r;
else break;
}
if (pr==false)
break;
}
}
while (!pr&&!flag);
if (pr)
{for (int i=1;i<n+1;i++)
Edit1->Text = Edit1->Text + IntToStr(p[i])+ " ";
Form1->Image1->Canvas->Pen->Color=0x0000aa;
for(int i=2;i<n+1;i++)
{
PaintX(t[p[i-1]],t[p[i]]);
}
PaintX(t[p[1]],t[p[n]]);
Form1->Image1->Canvas->Pen->Color=0x000000;
s++;
}
else
{ShowMessage(IntToStr(n)+"-угольник не выпуклый");
Form1->Image1->Canvas->Rectangle(0,0,Form1->Image1->Width,Form1->Image1->Height);
n=0;
s=0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Image1->Canvas->Rectangle(0,0,Form1->Image1->Width,Form1->Image1->Height);
n=0;
s=0;
Edit1->Text = "";
}
//---------------------------------------------------------------------------
Соседние файлы в папке перестановки