Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Алгоритмы
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <fstream>
- #include <iomanip>
- #include <functional>
- using namespace std;
- ifstream in("input.txt");
- ofstream out("output.txt");
- class Point //структура точки
- {
- public:
- int x;
- int y;
- Point(int x, int y) //конструктор точки
- {
- this->x = x;
- this->y = y;
- }
- double GetP() //метод, возвращающий расстояние от начала с.к., до точки
- {
- return sqrt(x * x + y * y);
- }
- friend ostream& operator << (ostream &out, const Point &point); //оператор, выводящий точку
- };
- ostream& operator<< (std::ostream &out, const Point &point)
- {
- out << "(" << setw(2) << point.x << setw(2) << " , " << setw(2) << point.y << setw(2) << ")";
- return out;
- }
- bool Check(Point a) //функция, проверяющая находится ли точка в квадрате 10х10
- {
- if (((a.x <= 5) && (a.x >= -5)) && ((a.y <= 5) && (a.y >= -5)))
- return 0;
- else
- return 1;
- }
- int main()
- {
- setlocale(LC_ALL, "ru");
- vector <Point> p;
- Point a(0, 0);
- int x, y;
- char simvol;
- while (in >> x >> y) //заполняем вектор точками
- {
- p.push_back(*new Point(x, y));
- }
- if (p.empty()) //проверка на пустоту
- out << "файл пуст";
- else
- {
- cout << "Enter a, b, c or d: ";
- cin >> simvol;
- switch (simvol) //выбор задачи
- {
- case 'a': //удалить все точки не из квадрата со стороной 10 с центром в начале координат
- {
- vector <Point>::iterator i = p.begin(); //ставим итератор на начало вектора
- auto start = remove_if(p.begin(), p.end(), Check); //удаляет элементы, удовлетворяют функции чек
- p.erase(start, p.end());
- for (i; i != p.end(); i++) //выводим все элементы вектора
- out << "(" << setw(2) << (*i).x << setw(2) << " , " << setw(2) << (*i).y << setw(2) << ")" << '\n';
- break;
- }
- case 'b': //подсчитать количество точек, лежащих ниже оси x
- {
- vector <Point>::iterator i = p.begin(); //ставим итератор на начало
- auto kolvo = count_if(p.begin(), p.end(), [a](Point b)
- {
- return (a.y > b.y); //если значение y меньше, чем у точки а,
- //то прибавляем значение к kolvo
- });
- out << kolvo; //выводим кол-во точек
- break;
- }
- case 'c': //найти самую удалённую от начала координат среди точек IV четверти
- {
- auto result = max_element(p.begin(), p.end(), [](Point a, Point b)
- {
- return (a.GetP() < b.GetP()) && b.x > 0 && b.y < 0; //находим максимальный элемент,
- }); //удовлетворяющий условиям 4 четверти
- out << "Самая отдаленная точка : " << *result; //выводим элементы вектора
- break;
- }
- case 'd': //расположить в порядке удаления о начала координат, сохраняя исходный порядок при одинаковом расстоянии
- {
- sort(p.begin(), p.end(), [](Point a, Point b) //стортируем точки по их расстоянию
- {
- return (a.GetP() < b.GetP());
- });
- for (auto it : p) //выводим элементы вектора
- out << it << endl;
- break;
- }
- }
- }
- out.close();
- in.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement