Удаление одинаковых элементов структуры - C (СИ)

Формулировка задачи:

Здравствуйте. Есть задача, условие такое: разработать структуру, описывающую набор точек на плоскости. Точка описана как отдельная структура, координаты целочисленные. Этот тип данных описать в заголовочном файле PointSet.h Описать и реализовать функцию, удаляющую дубли точек, т.е. точки с одинаковыми координатами. Написать программу, в которой пользователю преддлагается определить количество точек в наборе, ввести координаты точек и продемонстрировать работу функции. Заголовок:
#ifndef POINTSET_H
#define POINTSET_H
 
struct point
{
    int x;
    int y;
};
 
#endif
Код:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "PointSet1.h"
#include <stdlib.h>
#include <math.h>
 
int DelSamePts(struct point *m, int n);
 
int main()
{
    int n, i, x, y;
    printf("vvedite kol-vo tochek:");
    scanf("%d", &n);
    struct point *m; /*massiv iz tochek, tip - structura*/
    m=(struct point*)malloc(n*sizeof(struct point));
 
 
    printf("\nvvedite coordinaty tochek:\n");
    for (i=0; i<n; i++)
    {
        printf("\npt%d:", i);
        scanf("%d %d", &x, &y);
        struct point pt;
        pt.x = x;
        pt.y = y;
        *(m+i) = pt;
    }
 
    for (i=0; i<n; i++)
    {
        printf("\n%d %d", m[i].x, m[i].y);
    }
 
    n=DelSamePts(m, n);
    free(m);
    return 0;
    getchar();
}
 
int DelSamePts(struct point *m, int n)
{
    int i, j;
   
    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n-1; j++)
        {
            if (m[i].x==m[j].x && m[i].y==m[j].y)
            {
                m[j].x=m[j+1].x;
                m[j].y=m[j+1].y;
                n--;
            }
        }
    }
    printf("\ntochki posle udaleniya dublicatov:\n");
    for (i=0; i<n; i++)
    {
        printf("%d %d\n", m[i].x, m[i].y);
    }
    return(m, n);
}
Что не так с циклом и как реализовать задачу? Я новичок, так что не судите строго мною написанное. Заранее благодарю.

Код к задаче: «Удаление одинаковых элементов структуры - C (СИ)»

textual
for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
        if (m[i].x == m[j].x && m[i].y == m[j].y) {
            for (int t = j; t < n - 1; t++) { // нужно сдвинуть остальные элементы
                m[t] = m[t+1];
            }
            n--;
            if (m[i].x == m[j].x && m[i].y == m[j].y) { // если следующий тоже дубль
                j--;
            }
        }
    }
}

12   голосов, оценка 3.750 из 5


СОХРАНИТЬ ССЫЛКУ