Определить, образуют ли точки заданного множества квадрат со сторонами, параллельными осям координат - C (СИ)
Формулировка задачи:
Помогите написать программу
Определить, образуют ли точки заданного множества квадрат со
сторонами, параллельными осям координат.
Мне кажется, что задачу надо разбить на этапы:
1 проверить на кол-во точек (их должно быть минимум 4), если меньше - это уже не квадрат
2 образуют ли точки квадрат
- для этого надо найти, для начала, вершины этого квадрата(точки наиболее удаленные друг от друга).
- потом проверить находятся ли остальные точки на сторонах квадрата
3. параллельна ли сторона А Оси Х или У.
Самым тяжелым мне сдесь видится 2 условие, не могу понять как его выполнять. Заранее спасибо
Решение задачи: «Определить, образуют ли точки заданного множества квадрат со сторонами, параллельными осям координат»
textual
Листинг программы
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- int n, i, j, **a, x_min=0, y_min=0, x_max=0, y_max=0;
- printf("Kol-vo tochek: ");
- scanf("%d", &n);
- a=(int **)malloc(n*sizeof(int*));
- for(i=0; i<n; i++)
- {
- a[i]=(int *)malloc(2*sizeof(int));
- printf("X%d =", i+1);
- scanf("%d", &a[i][0]);
- printf("Y%d =", i+1);
- scanf("%d", &a[i][1]);
- }
- // вот здесь пользуетесь координатами: a[i][0] - координата X i-ой точки, a[i][1] - координата Y i-ой точки
- for(i=0; i<n-1; i++)//проверка координат точек на предмет совпадений
- for(j=i+1; j<n; j++)
- if(a[i][0]==a[j][0] && a[i][1]==a[j][1])
- printf("Tochki %d i %d sovpadaut\n", i, j);
- for(i=1; i<n; i++)
- {
- if(a[i][0]>a[x_max][0])
- x_max=i;
- if(a[i][0]<a[x_min][0])
- x_min=i;
- if(a[i][1]>a[y_max][1])
- y_max=i;
- if(a[i][1]<a[x_min][1])
- y_min=i;
- }
- printf("Maximaln znach po X: %d\n", a[x_max][0]);
- printf("Minimaln znach po X: %d\n", a[x_min][0]);
- printf("Maximaln znach po Y: %d\n", a[y_max][1]);
- printf("Minimaln znach po Y: %d\n", a[y_min][1]);
- for ( i = 0; i < n; ++i )
- free(a[i]);
- free(a);
- return 0;
- }
Объяснение кода листинга программы
- Объявление переменных: n (количество точек), i, j, **a (двумерный массив для хранения координат точек), x_min, y_min, x_max, y_max (для хранения минимальных и максимальных координат).
- Ввод количества точек и их координат с помощью scanf.
- Выделение памяти под двумерный массив.
- Проверка совпадения координат точек (если две точки имеют одинаковые координаты, то они выводятся на экран).
- Поиск минимальных и максимальных координат по X и Y.
- Вывод минимальных и максимальных координат на экран.
- Освобождение памяти, выделенной под двумерный массив.
- Возврат 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д