Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement