#include #include #include using namespace std; #define MAX 20 //多边形中最多点的个数 struct POINT { int x; int y; POINT() { x = 0; y = 0; } }; int main() { ifstream infile("Input.txt"); if(!infile) { cout<<"can not open the file"; exit(1); } int num; infile>>num; vector pvector = new vector int i,j,m=0; //计数器 // 读取数据 char ch = ','; //读取一个char变量,任意一个即可 char ch1 = ';'; //读取一个char变量,任意一个即可 for(i=0;i struct POINT *P = new struct POINT[MAX]; for(j=0;j infile>>P[j].x>>ch>>P[j].y; pvector[i].push_back(P[j]); if((P[j].x==P[m].x)&&(P[j].y==P[m].y)&&(j!=m)) { i++; break; } infile>>ch1; } } infile.close(); // 将点的坐标输出到屏幕上 for(i=0;i for(j=0;j cout< cout< // 求多边形的周长和面积 float *perimeter = new float[num]; //多边形周长 float *area = new float[num]; //多边形面积 for(i=0;i area[i] = 0.0; perimeter[i] = 0.0; int size = pvector[i].size(); for(j=0;j perimeter[i] += sqrt(pow((pvector[i][j+1].y-pvector[i][j].y),2)+pow((pvector[i][j+1].x-pvector[i][j].x),2)); //周长 area[i] += (pvector[i][j+1].y-pvector[i][j].y)*(pvector[i][j+1].x+pvector[i][j].x); } perimeter[i] = perimeter[i]; area[i] = 0.5*abs(area[i]); } float areaMax,areaMin,periMax,periMin; areaMax = areaMin = area[0]; periMax = periMin = perimeter[0]; int num1,num2,num3,num4; //记录面积、周长最大最小的多边形的ID号 // 求最大最小面积、周长及相应多边形的ID号 for(i=0;i if(area[i]>areaMax) { areaMax = area[i]; num1 = i; } if(area[i] areaMin = area[i]; num2 = i; } if(perimeter[i]>periMax) { periMax = perimeter[i]; num3 = i; } if(perimeter[i] periMin = perimeter[i]; num4 = i; } } // 求面积的均值 float averArea = 0.0; for(i=0;i averArea = averArea/num; // 求面积的标准差 float stdev = 0.0; for(i=0;i stdev = sqrt(stdev/num); // 多边形分类并统计 int numA = 0; int numB = 0; int numC = 0; int numD = 0; for(i=0;i if(area[i]>averArea+stdev) { numA++; } else if(area[i]>averArea&&area[i] numB++; } else if(area[i]>averArea-stdev&&area[i] numC++; } else { numD++; } } ofstrea m outfile("result.txt"); if(!outfile) { cerr<<"can not write the file"; exit(1); } outfile<<"所有多边形的面积:"; for(i=0;i outfile<} outfile< delete []area; delete []perimeter; delete []pvector; return 0; }