Advertisement
Guest User

laba2.cpp

a guest
Feb 21st, 2018
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // класс точки плоскости
  5.  
  6. class Point2 {
  7. private:
  8. int x;
  9. int y;
  10. public:
  11. Point2(int _x, int _y) : x(_x), y(_y) { }; // конструктор точки
  12. int getx() { return x; }; // доступ к x
  13. int gety() { return y; }; // доступ к y
  14. friend double distance(Point2*, Point2*); // расстояние между 2-мя точками
  15. };
  16.  
  17. // дружественная функция вычисления расстояния между двумя точками
  18.  
  19. double distance(Point2* r, Point2* q) {
  20. double d2=(r->x-q->x)*(r->x-q->x)+(r->y-q->y)*(r->y-q->y);
  21. return (sqrt(d2));
  22. }
  23.  
  24. //Основная функция
  25.  
  26. int main(int argc, char* argv[ ]) {
  27. Point2** p; // адрес массива адресов точек набора
  28. Point2* t; // адрес текущей точки
  29. Point2* tt;
  30. int x,y; // координаты точки
  31. int tx, ty;
  32. int i=0;
  33. int j=0; // номера точек набора
  34. double maxdist;
  35. if(argc < 2) //анализ числа аргументов командной строки
  36. return(-1);
  37. p = new Point2*[argc]; // распределить память под массив адресов точек
  38. while(++i < argc) { //цикл ввода точек из командной строки
  39. sscanf(argv[i], "%d%*c%d", &x, &y); // получение координат точки
  40. p[j]=new Point2(x,y); // динамическое конструирование точки
  41. j ++;
  42. }
  43. p[j]=NULL; // маркировка конца массива адресов точек набора
  44. for (i=0; p[i] != NULL; i++) { // цикл вычисления средних расстояний
  45. maxdist=0;
  46. t = p[i]; // фиксировать адрес текущей точки
  47. // цикл суммирования расстояний от текущей точки до остальных
  48. for (j=0; p[j] != NULL; j++)
  49. {
  50. tt=p[j];
  51. if (maxdist < distance(t, p[j]))
  52. {
  53. maxdist = distance(t, p[j]);
  54. tx=tt->getx(); ty=tt->gety();
  55. }
  56. }
  57. printf("Max distance from point (%d;%d)=%f. Second point is (%d;%d)\n", t->getx(), t->gety(), maxdist, tx, ty);
  58. }
  59. // освобождить дин. память точек набора по их адресам
  60. for(j=0; p[j] != NULL; j++)
  61. delete p[j];
  62. delete [ ]p; // освобождить дин. память массива адресов точек
  63. return 0; //корректное завершение программы
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement