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

Объяснение кода листинга программы

  1. Объявление переменных: n (количество точек), i, j, **a (двумерный массив для хранения координат точек), x_min, y_min, x_max, y_max (для хранения минимальных и максимальных координат).
  2. Ввод количества точек и их координат с помощью scanf.
  3. Выделение памяти под двумерный массив.
  4. Проверка совпадения координат точек (если две точки имеют одинаковые координаты, то они выводятся на экран).
  5. Поиск минимальных и максимальных координат по X и Y.
  6. Вывод минимальных и максимальных координат на экран.
  7. Освобождение памяти, выделенной под двумерный массив.
  8. Возврат 0, чтобы указать, что программа успешно завершилась.

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы