C/C++

Написать программу на С++ определения площади пятиугольника с заданными координатами его вершин.

Написать программу на С++ определения площади пятиугольника с заданными координатами его вершин (x1, y1), (x2, y2), (х3у3), (х4.y4), (х5,y5) как сумму площадей трех треугольников. Площадь треугольника, определенную по координатам вершин, рассчитать с помощью функции.​
Magzhan Akanuly
Magzhan Akanuly
126
#include <iostream>
#include <cmath>
using namespace std;
double coord(istream& inp, const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(numeric_limits<size_t>::max(), '\n');
return value;
}
struct Point {
double x, y;
Point() : x(0), y(0) {}
double length(const Point& p)const {
return sqrt(pow(p.x - x, 2) + pow(p.y - y, 2));
}
private:
friend istream& operator>>(istream& inp, Point& p) {
p.x = coord(inp, "x: ");
p.y = coord(inp, "y: ");
return inp;
}
};
struct Triangle {
Point a, b, c;
Triangle() = default;
Triangle(const Point& a, const Point& b, const Point& c) : a(a), b(b), c(c) {}
bool exist()const {
return argument() > 0;
}
double perimeter()const {
return a.length(b) + b.length(c) + c.length(a);
}
double area()const {
return sqrt(argument());
}
private:
double argument()const {
auto p = perimeter() / 2.0;
return p * (p - a.length(b)) * (p - b.length(c)) * (p - c.length(a));
}
};
Point point(const char* msg) {
cout << msg;
Point p;
cin >> p;
return p;
}
int main() {
auto a = point("Point A:\n");
auto b = point("Point B:\n");
auto c = point("Point C:\n");
auto d = point("Point D:\n");
auto e = point("Point E:\n");
Triangle abc(a, b, c);
Triangle acd(a, c, d);
Triangle ade(a, d, e);
if (abc.exist() && acd.exist() && ade.exist()) {
auto area = abc.area() + acd.area() + ade.area();
cout << "Area: " << area << '\n';
}
else {
puts("The pentagon doesn't exist!");
}
system("pause > nul");
}

P.S. Для выпуклого пятиугольника.
Евгений Кочубей
Евгений Кочубей
90 717
Лучший ответ