Advertisement
semkaegor4ik

алгоритмы все

Jul 5th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.91 KB | None | 0 0
  1. //Алгоритмы
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <fstream>
  6. #include <iomanip>
  7. #include <functional>
  8. using namespace std;
  9. ifstream in("input.txt");
  10. ofstream out("output.txt");
  11. class Point                             //структура точки
  12. {
  13. public:
  14.     int x;
  15.     int y;
  16.     Point(int x, int y)                     //конструктор точки
  17.     {
  18.         this->x = x;
  19.         this->y = y;
  20.     }
  21.     double GetP()                               //метод, возвращающий расстояние от начала с.к., до точки
  22.     {
  23.         return sqrt(x * x + y * y);
  24.     }
  25.     friend ostream& operator << (ostream &out, const Point &point); //оператор, выводящий точку
  26. };
  27.  
  28. ostream& operator<< (std::ostream &out, const Point &point)
  29. {
  30.     out << "(" << setw(2) << point.x << setw(2) << " , " << setw(2) << point.y << setw(2) << ")";
  31.     return out;
  32. }
  33.  
  34. bool Check(Point a)                         //функция, проверяющая находится ли точка в квадрате 10х10
  35. {
  36.     if (((a.x <= 5) && (a.x >= -5)) && ((a.y <= 5) && (a.y >= -5)))
  37.         return 0;
  38.     else
  39.         return 1;
  40. }
  41.  
  42. int main()
  43. {
  44.     setlocale(LC_ALL, "ru");
  45.     vector <Point> p;
  46.     Point a(0, 0);
  47.     int x, y;
  48.     char simvol;
  49.     while (in >> x >> y)                    //заполняем  вектор точками
  50.     {
  51.         p.push_back(*new Point(x, y));
  52.     }
  53.     if (p.empty())                          //проверка на пустоту
  54.         out << "файл пуст";
  55.     else
  56.     {
  57.         cout << "Enter a, b, c or d: ";
  58.         cin >> simvol;
  59.  
  60.         switch (simvol)                     //выбор задачи
  61.         {
  62.             case 'a':       //удалить все точки не из квадрата со стороной 10 с центром в начале координат
  63.             {
  64.                 vector <Point>::iterator i = p.begin(); //ставим итератор на начало вектора
  65.                 auto start = remove_if(p.begin(), p.end(), Check);  //удаляет элементы, удовлетворяют функции чек
  66.                 p.erase(start, p.end());
  67.                 for (i; i != p.end(); i++)              //выводим все элементы вектора
  68.                     out << "(" << setw(2) << (*i).x << setw(2) << " , " << setw(2) << (*i).y << setw(2) << ")" << '\n';
  69.                 break;
  70.             }
  71.             case 'b':       //подсчитать количество точек, лежащих ниже оси x
  72.             {
  73.                 vector <Point>::iterator i = p.begin();     //ставим итератор на начало
  74.                 auto kolvo = count_if(p.begin(), p.end(), [a](Point b)
  75.                 {
  76.                     return (a.y > b.y);                     //если значение y меньше, чем у точки а,
  77.                                                             //то прибавляем значение к kolvo
  78.                 });
  79.                 out << kolvo;                               //выводим кол-во точек
  80.                 break;
  81.             }
  82.             case 'c':       //найти самую удалённую от начала координат среди точек IV четверти
  83.             {
  84.                 auto result = max_element(p.begin(), p.end(), [](Point a, Point b)
  85.                 {
  86.                     return (a.GetP() < b.GetP()) && b.x > 0 && b.y < 0;     //находим максимальный элемент,
  87.                 });                                                     //удовлетворяющий условиям 4 четверти
  88.                 out << "Самая отдаленная точка : " << *result;          //выводим элементы вектора
  89.                 break;
  90.             }
  91.             case 'd':       //расположить в порядке удаления о начала координат, сохраняя исходный порядок при одинаковом расстоянии
  92.             {
  93.                 sort(p.begin(), p.end(), [](Point a, Point b)   //стортируем точки по их расстоянию
  94.                 {
  95.                     return (a.GetP() < b.GetP());
  96.                 });
  97.                 for (auto it : p)                               //выводим элементы вектора
  98.                     out << it << endl;
  99.                 break;
  100.             }
  101.         }
  102.     }
  103.     out.close();
  104.     in.close();
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement