Advertisement
Guest User

lab1.cc

a guest
Feb 26th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <cmath>
  3.  
  4. class Point
  5. {
  6. private:
  7.   int x;  //Координаты
  8.   int y;  //Точек
  9. public:
  10.   Point(int _x, int _y) : x(_x), y(_y) { };
  11.   int getx(){ return x; };
  12.   int gety(){ return y; };
  13. };
  14.  
  15. double distance(Point*, Point*);  //Функция для вычисления расстояния между пароми точек
  16.  
  17. int main(int argc, char* argv[])
  18. {
  19.   double sum;   //Сумма между текущей парой точек
  20.   int x1, y1;     //Координаты текущей точки
  21.   Point** p;    //Указатель на массив адресов
  22.   Point* sp;    //Указатель на текущий объект(точку)
  23.   int minX;
  24.   int minY;
  25.   double minimal;    //Минимальное суммарное расстояние между точками
  26.   int i = 0;
  27.   int j = 0;
  28.  
  29.   if(argc < 2)
  30.   {
  31.     printf("Введите координаты хотя бы двух точек \n");
  32.     exit(-1);
  33.   }
  34.  
  35.   p=new Point*[argc];  //p присваевается начальный адресс массива адресов всех объектов
  36.  
  37.   while(++i < argc)
  38.   {
  39.     sscanf(argv[i], "%d%*c%d", &x1, &y1);    //Cчитываем координаты точки
  40.     p[j] = new Point(x1, y1);               //В массив адресов записываем новый объект типа Point
  41.     j++;
  42.   }
  43.   p[j] = NULL;        //Последний эдемент массива адресов не ссылается на какой-либо объект
  44.  
  45.   for(j = 0; p[j] != NULL; j++)  
  46.     minimal += distance(p[0], p[j]);    //Обозначаем минимальное расстояние, как расстояние от первой точки до отсальных
  47.  
  48.   for(i = 0; p[i] != NULL; p++)
  49.   {
  50.     sum = 0.0;    //Обнуляем сумму
  51.     sp = p[i];    //Текущий эдемент становится следующим из массива адрессов
  52.     for(j = 0; p[j] != NULL; j++)
  53.       sum += distance(sp, p[j]);
  54.     if(sum < minimal)
  55.     {
  56.       minimal = sum;
  57.       minX = sp->getx();
  58.       minY = sp->gety();
  59.     }    
  60.   }
  61.  
  62.   printf("Найденная точка имеет координаты: %d;%d\n", minX, minY);
  63.  
  64.   for(j = 0; p[j] != NULL; j++)
  65.     delete p[j];
  66.   delete []p;
  67.  
  68.   return 0;
  69. }
  70.  
  71. double distance(Point *p, Point *q)
  72. {
  73.   double dist;
  74.   dist = (p->getx() - q->getx())*(p->getx() - q->getx()) + (p->gety() - q->gety())*(p->gety() - q->gety());
  75.   return sqrt(dist);
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement