Пользователь вводит координаты трек точек на плоскости. необходимо определить: 1) могут ли образовать три точки треугольник
2) является ли треугольник равносторонний
C/C++
Помогите решить задачу в C++
#include
#include
#include
using namespace std;
struct Dot {
double x;
double y;
double length(const Dot& d)const {
return sqrt(pow(d.x - x, 2) + pow(d.y - y, 2));
}
private:
friend istream& operator>>(istream& inp, Dot& d) {
return inp >> d.x >> d.y;
}
};
class Triangle {
Dot da, db, dc;
friend istream& operator>>(istream& inp, Triangle& t) {
return inp >> t.da >> t.db >> t.dc;
}
tuple lengths()const {
const auto a = da.length(db);
const auto b = db.length(dc);
const auto c = dc.length(da);
return { a, b, c };
}
double argument()const {
const auto [a, b, c] = lengths();
auto p = (a + b + c) / 2.0;
return p * (p - a) * (p - b) * (p - c);
}
public:
bool exist()const {
argument() > 0;
}
bool equilateral_triangle()const {
static const auto eps = 1e-12;
const auto [a, b, c] = lengths();
return fabs(a - b) < eps && fabs(b - c) < eps && fabs(c - a) < eps;
}
};
int main() {
Triangle tr;
cin >> tr;
if (tr.exist()) {
puts("Triangle exist.");
if (tr.equilateral_triangle()) {
puts("Equilateral triangle.");
}
} else {
puts("Triangle not exist.");
}
}
Равносторонний - запросто ( сравниваем длину сторон, можно не вычислять квадратный корень для точности ) , а первая задача может выдавать неверные ответы из-за "округления"
Похожие вопросы
- Помогите решить задачу по C++!
- Помогите решить задачу на C++
- Помогите решить задачу на C++.
- Помогите решить задачу на c++
- Помогите решить задачу на C++
- Помогите решить задачу на C++
- Помогите решить задачу на C++
- УМОЛЯЮ!!!!! Помогите решить задачу на C++
- Помогите решить задачу на C++
- Помогите решить задачу по программированию на C++
зачем static? Вроде достаточно constexpr const double - переменная всегда будет висеть в памяти уже заданная.