#include #include #include #define sqr(val) ((val)*(val)) // #define arrmax 100 #define armax 8 double angle(int x1, int y1, int x2, int y2, int x3, int y3) { double l1, l2, l3, cosx; l1 = sqrt(sqr(x2-x1)+sqr(y2-y1)); l2 = sqrt(sqr(x3-x2)+sqr(y3-y2)); l3 = sqrt(sqr(x3-x1)+sqr(y3-y1)); cosx = (l1*l1+l2*l2-l3*l3) / (2*l1*l2); return acos(cosx); } int main() { int x[armax] = {3, 6, 6, 5, 7, 7, 4, 9}, y[armax] = {2, 1, 3, 4, 4, 6, 7, 7}, x1[armax], y1[armax]; int i, j, n; double max_angle; clrscr(); n = 8; // puts("Kolichestvo tochek:\n"); // scanf("%d", &n); j = 1; max_angle = 0; // for(i = 0; i < n; i++) { // printf("x[%d]\n", i); scanf("%d", &x[i]); // printf("y[%d]\n", i); scanf("%d", &y[i]); // } y1[0] = y[0]; x1[0] = x[0]; for(i = 0; i < n; i++) { if(y[i] < y1[0]) { y1[0] = y[i]; x1[0] = x[i]; } else if(y[i] == y1[0] && x[i] > x1[0]) { y1[0] = y[i]; x1[0] = x[i]; } } for(i = 0; i < n; i++) { if(x1[0] != x[i] && y1[0] != y[i]) if(angle((x1[0]-3),y1[0],x1[0],y1[0],x[i],y[i]) > max_angle) { max_angle = angle((x1[0]-3),y1[0],x1[0],y1[0],x[i],y[i]); x1[1] = x[i]; y1[1] = y[i]; } } do { j += 1; max_angle = 0; for(i = 0; i < n; i++) { if( (x1[j-2] == x[i] && y1[j-2] == y[i]) || (x1[j-1] == x[i] && y1[j-1] == y[i]) ) continue; else { if(angle(x1[j-2],y1[j-2],x1[j-1],y1[j-1],x[i],y[i]) > max_angle) { max_angle = angle(x1[j-2],y1[j-2],x1[j-1],y1[j-1],x[i],y[i]); x1[j] = x[i]; y1[j] = y[i]; } } } } while(!(x1[j] == x1[0] && y1[j] == y1[0])); puts("Obolochka idet cherez tochki:\n"); for(i = 0; i < j; i++) { printf("x[%d]=%d y[%d]=%d\n", i, x1[i], i, y1[i]); } getch(); return 0; }