Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <cmath>
- class Point
- {
- private:
- int x; //Координаты
- int y; //Точек
- public:
- Point(int _x, int _y) : x(_x), y(_y) { };
- int getx(){ return x; };
- int gety(){ return y; };
- };
- double distance(Point*, Point*); //Функция для вычисления расстояния между пароми точек
- int main(int argc, char* argv[])
- {
- double sum; //Сумма между текущей парой точек
- int x1, y1; //Координаты текущей точки
- Point** p; //Указатель на массив адресов
- Point* sp; //Указатель на текущий объект(точку)
- int minX;
- int minY;
- double minimal; //Минимальное суммарное расстояние между точками
- int i = 0;
- int j = 0;
- if(argc < 2)
- {
- printf("Введите координаты хотя бы двух точек \n");
- exit(-1);
- }
- p=new Point*[argc]; //p присваевается начальный адресс массива адресов всех объектов
- while(++i < argc)
- {
- sscanf(argv[i], "%d%*c%d", &x1, &y1); //Cчитываем координаты точки
- p[j] = new Point(x1, y1); //В массив адресов записываем новый объект типа Point
- j++;
- }
- p[j] = NULL; //Последний эдемент массива адресов не ссылается на какой-либо объект
- for(j = 0; p[j] != NULL; j++)
- minimal += distance(p[0], p[j]); //Обозначаем минимальное расстояние, как расстояние от первой точки до отсальных
- for(i = 0; p[i] != NULL; p++)
- {
- sum = 0.0; //Обнуляем сумму
- sp = p[i]; //Текущий эдемент становится следующим из массива адрессов
- for(j = 0; p[j] != NULL; j++)
- sum += distance(sp, p[j]);
- if(sum < minimal)
- {
- minimal = sum;
- minX = sp->getx();
- minY = sp->gety();
- }
- }
- printf("Найденная точка имеет координаты: %d;%d\n", minX, minY);
- for(j = 0; p[j] != NULL; j++)
- delete p[j];
- delete []p;
- return 0;
- }
- double distance(Point *p, Point *q)
- {
- double dist;
- dist = (p->getx() - q->getx())*(p->getx() - q->getx()) + (p->gety() - q->gety())*(p->gety() - q->gety());
- return sqrt(dist);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement