Определить, образуют ли точки заданного множества квадрат со сторонами, параллельными осям координат - 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, чтобы указать, что программа успешно завершилась.