Advertisement
kokokozhina

v1_5

Dec 15th, 2015
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. //дано множетсво точек, определенных своими координатами. определить треугольник наибольшего периметра, который можно создать из этих точек
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. vector<pair<double,double>> coord;
  8.  
  9. double sideLenght(int i, int j)
  10. {
  11.     return sqrt((coord[i].first - coord[j].first) * (coord[i].first - coord[j].first) + (coord[i].second - coord[j].second) * (coord[i].second - coord[j].second));
  12. }
  13.  
  14. double perimetr(int i, int j, int k)
  15. {
  16.     return sideLenght(i, j) + sideLenght(j, k) + sideLenght(k, i);
  17. }
  18.  
  19. bool triangle(int i, int j, int k)
  20. {
  21.     if ((sideLenght(i, j) + sideLenght(j, k) > sideLenght(k, i)) && (sideLenght(j, k) + sideLenght(k, i) > sideLenght(i, j)) && (sideLenght(k, i) + sideLenght(i, j) > sideLenght(j, k)))
  22.         return false;
  23.     return true;
  24. }
  25.  
  26.  
  27. int main()
  28. {
  29.     double a, b;
  30.     cout << "End the input by typing any letter\n";
  31.     while(cin >> a)
  32.     {
  33.         cin >> b;
  34.         coord.push_back(make_pair(a, b));
  35.     }
  36.     int finish = coord.size();
  37.     double maximum = -1;
  38.     for(int i = 0; i < finish - 2; i++)
  39.     {
  40.         for(int j = i + 1; j < finish - 1; j++)
  41.         {
  42.             for(int k = j + 1; k < finish; k++)
  43.             {
  44.                 if (perimetr(i, j, k) > maximum && triangle(i, j, k))
  45.                     maximum = perimetr(i, j, k);
  46.             }
  47.  
  48.         }
  49.  
  50.     }
  51.  
  52.     cout << maximum << endl;
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement