C/C++

Программирование на C.

Определить, площадь какой фигуры больше: круга радиуса ​R​,равностороннего треугольника с длиной стороны а или квадрата со стороной ​d​.
#include <iostream>
#include <cmath>
#include <tuple>
using namespace std;
struct Shape {
virtual double area()const = 0;
virtual double perimeter()const = 0;
virtual bool exist()const = 0;
friend bool operator<(const Shape& a, const Shape& b) {
return a.area() < b.area();
}
friend bool operator>(const Shape& a, const Shape& b) {
return a.area() > b.area();
}
friend bool operator==(const Shape& a, const Shape& b) {
return a.area() == b.area();
}
};
class Circle : public Shape {
public:
Circle() : r(0) {}
explicit Circle(const double r) : r(r) {}
double area()const override {
return pi * r * r;
}
double perimeter()const override {
return 2.0 * pi * r;
}
bool exist()const override {
return r > 0;
}
double radius()const {
return r;
}
void radius(const double value) {
r = value;
}
private:
double r;
inline static const auto pi = 3.1415926535897932;
};
class Rectangle : public Shape {
public:
Rectangle() : a(0), b(0) {}
explicit Rectangle(const double a) : a(a), b(a) {}
Rectangle(const double a, const double b) : a(a), b(b) {}
double area()const override {
return a * b;
}
double perimeter()const override {
return 2.0 * (a + b);
}
bool exist()const override {
return area() > 0;
}
pair<double, double> sides()const {
return { a, b };
}
void sides(const pair<double, double>& box) {
tie(a, b) = box;
}
private:
double a;
double b;
};
class Triangle : public Shape {
public:
Triangle() : a(0), b(0), c(0) {}
explicit Triangle(const double a) : a(a), b(a), c(a) {}
Triangle(const double a, const double b, const double c) : a(a), b(b), c(c) {}
double area()const override {
return sqrt(argument());
}
double perimeter()const override {
return a + b + c;
}
bool exist()const override {
return argument() > 0;
}
tuple<double, double, double> sides()const {
return { a, b, c };
}
void sides(const tuple<double, double, double>& box) {
tie(a, b, c) = box;
}
private:
double a;
double b;
double c;
double argument()const {
auto p = perimeter();
return p * (p - a) * (p - b) * (p - c);
}
};
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
system("chcp 1251 > nul");
auto r = real("Радиус круга: ");
Circle circle(r);
auto d = real("Длина стороны квадрата: ");
Rectangle rectangle(d);
auto c = real("Длина стороны равностороннего треугольника: ");
Triangle triangle(c);
if (circle > rectangle && circle > triangle) puts("Круга");
else if (rectangle > circle && rectangle > triangle) puts("Квадрата");
else if (triangle > circle && triangle > rectangle) puts("Треугольника");
else puts("Существует равенство максимальных площадей");
system("pause > nul");
}
Влад Петровский
Влад Петровский
53 557
Лучший ответ
Деня Шаталов Интересно, что скажет ему препод, увидев это в начале года)
Великие вопросы получают великие ответы
Денис Бушуев
Денис Бушуев
3 697