SHARE
TWEET

Untitled

a guest Feb 24th, 2020 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Разработать объектно-ориентированную программу поиска в любом заданном наборе точек плоскости
  3. пары наиболее отдаленных точек, которые разделены прямой с уравнением y=x. Декартовые координаты
  4. всех точек заданного набора должны быть указаны парами целых чисел в аргументах командной строки
  5. вызова программы. Координаты полученной пары точек и расстояние между ними должны отображаться
  6. строкой потока стандартного вывода. В программе должен быть реализован класс точки с приватными
  7. полями для ее декартовых координат, публичными методами доступа к ним и конструктором инициализации
  8. их значений, а также компонентный метод вычисления расстояния до любой другой заданной точки.
  9. Кроме того, в программе должно быть предусмотрено динамическое распределение памяти для всех
  10. точек заданного набора и массивов их адресов.
  11.  
  12.  
  13.  
  14. Кулагин Арсений Олегович, РК6-23Б, 24.02.20
  15. /*
  16.  
  17. #include <iostream>
  18. #include <math.h>
  19.  
  20. using namespace std;
  21.  
  22. class Point
  23. {
  24.         private:
  25.                  int x, y;
  26.         public:
  27.                 friend double distance(Point*, Point*);
  28.  
  29.                 Point(int _x,int _y): x(_x), y(_y)
  30.                 {
  31.                 }
  32.  
  33.                 int getx()
  34.                 {
  35.                         return x;
  36.                 }
  37.                 int gety()
  38.                 {
  39.                         return y;
  40.                 }
  41.  
  42. };
  43.  
  44. int main(int noarg, char* arg[])
  45. {
  46.     Point** p;
  47.     int i, j, x, y;
  48.     void finding_the_greatest_distance(Point**);
  49.    
  50.     if(noarg<2)
  51.     {
  52.         cout << "Недостаточное количество точек." << endl;
  53.         exit(-1);
  54.     }
  55.     p=new Point* [noarg];
  56.     for(i=1, j=0; i<noarg; i++, j++)
  57.     {
  58.         sscanf(arg[i], "%d%*c%d", &x, &y);
  59.         p[j]=new Point(x,y);
  60.     }
  61.     p[j]=NULL;
  62.  
  63.     finding_the_greatest_distance(p);
  64.  
  65.     for(j=0; p[j]!=NULL; j++)
  66.     {
  67.         delete p[j];
  68.     }
  69.     delete []p;
  70.  
  71.     return 0;
  72. }
  73.  
  74. double distance(Point* A, Point* B)
  75. {
  76.     double d;
  77.     d=sqrt((A->x-B->x)*(A->x-B->x)+(A->y-B->y)*(A->y-B->y));
  78.  
  79.     return d;
  80. }
  81.  
  82. void finding_the_greatest_distance(Point** p)
  83. {
  84.     int i, j, A, B;
  85.     double d, maxd=0;
  86.     for(i=0; p[i]!=NULL; i++)
  87.     {
  88.         for(j=i+1; p[j]!=NULL; j++)
  89.         {
  90.             if((p[i]->gety()-p[i]->getx())*(p[j]->gety()-p[j]->getx())<0)//проверка на нахождение точек по разные стороны от прямой y=x
  91.             {
  92.                 d=distance(p[i], p[j]);
  93.                 if(d>maxd)
  94.                 {
  95.                     maxd=d;
  96.                     A=i;
  97.                     B=j;
  98.                 }
  99.             }
  100.         }
  101.     }
  102.    
  103.     if(maxd==0)
  104.     {
  105.         cout << "Все точки не удовлетворяют условиям задачи." << endl;
  106.     }
  107.     else
  108.     {  
  109.         cout << "Максимальное расстояние: " << maxd << endl;
  110.         cout << "Координаты точки А: " << p[A]->getx() << ";" << p[A]->gety() << endl;
  111.         cout << "Координаты точки B: " << p[B]->getx() << ";" << p[B]->gety() << endl;
  112.     }
  113. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top