當前位置:編程學習大全網 - 編程語言 - 編程TT

編程TT

。問題的描述。

輸入n個點的坐標,判斷這n個點能否形成凸多邊形。

2.問題分析。

根據兩點確定壹條直線的原理,即y-y 1/x-x 1 = y2-y 1/x2-x 1;X(Y2-Y 1)+Y(X 1-X2)-X 1 Y2+x2y 1,設t = X (Y2-Y1)+Y (X1-X2)。

從任何壹點出發,都能找到能與之形成壹條邊的點。如果能依次找到n個點,就是凸多邊形。

反之,則不能。

3.設計思路。

輸入n個點,用二維數組存儲這n個點,定義壹個實函數來判斷這n個點是否能形成凸多邊形,從第壹個點開始尋找滿足函數tt的n條邊為圖形多邊形。tt是判斷兩個點是否能形成圖形多邊形的邊的函數。

4.流程圖。

5.源程序。

# include & ltstdio.h & gt

#定義N 4

int tt(int p[][2],int a,int b)

{

int temp[N],k = 0;

int t;

int I;

int j;

for(I = 0;我& ltn;i++)

{

如果(i==a||i==b)

{

繼續;

}

t = p[I][0]*(p[b][1]-p[a][1])+(p[a][0]-p[b][0])* p[I][1]-p[a][0]* p[b][1]+p[b][0]* p[a][1];

如果(t==0)

返回0;

其他

if(t & gt;0)

temp[k++]= 1;

其他

temp[k++]=-1;

}

for(j = 1;j & ltk;j++)

{

if(temp[0]!=temp[j])返回0;

}

返回1;

}

int real(int p[][2])

{

int flag[N],m = 0;

int i,j;

for(I = 0;我& ltn;i++)

{

flag[I]= 0;

}

for(I = 0;我& ltn;i++)

{

for(j = 1;j & ltn;j++)

{

if(flag[j])繼續;

如果(tt)

{

flag[m]= 1;

m = j;

打破;

}

}

}

flag[m]= 1;

for(I = 0;我& ltn;i++)

{

if(flag[i]==0)

返回0;

}

if(tt(p,0,m))返回1;

返回0;

}

void main()

{

int p[N][2];

int I;

Printf("請輸入這n個點的坐標:\ n ");

for(I = 0;我& ltn;i++)

{

Printf("點%d的坐標:",I+1);

scanf("%d,%d ",& ampp[i][0],& ampp[I][1]);

printf("%d,%d\n ",p[i][0],p[I][1]);

}

if(實數(p))

printf(" can ");

其他

Printf("不能");

}

  • 上一篇:發現15有趣的問題
  • 下一篇:數據分析零基礎學習嗎?
  • copyright 2024編程學習大全網