Другие языки программирования и технологии

Я уже 2 день не могу решить ( Помогите пожалуйста!

Пожалуйста помогите, язык с++!
Создайте структуру «Прямоугольник» (Rectangle), которая состоит из двух полей — точек p1 и p2.

Напишите функции double rectangle_square(Rectangle x) и double rectangle_perimeter(Rectangle x), которые вычисляют площадь и периметр соответственно.

С помощью этих функций вычислите характеристики прямоугольника, введенного с клавиатуры.

Формат входных данных
С клавиатуры вводятся четыре вещественных числа — координаты точек. Все числа не превосходят 1000 по модулю, заданы с точностью не более 2 знаков после десятичной точки.
Последовательность чисел следующая:
— точка p1: x и y;
— точка p2: x и y.
Входные данные : 5.00 9.00 7.00 13.00
Выходные данные : 8.000000 12.000000
#include <iostream>
#include <algorithm>
using namespace std;
struct Coord {
double x;
double y;
Coord() : x(0), y(0) {}
Coord(double x, double y) : x(x), y(y) {}
friend istream& operator>>(istream& in, Coord& p) {
in >> p.x >> p.y;
return in;
}
};
class Rectangle {
public:
Rectangle() = default;
Rectangle(const Coord& a, const Coord& b) : a_(a), b_(b) {
normalize_();
}
double area()const {
return fabs(a_.x - b_.x) * fabs(a_.y - b_.y);
}
double perimeter()const {
return (fabs(a_.x - b_.x) + fabs(a_.y - b_.y)) * 2;
}
Rectangle intersection(const Rectangle& rect) {
auto left = max(a_.x, rect.a_.x);
auto right = min(b_.x, rect.b_.x);
auto bottom = max(a_.y, rect.a_.y);
auto top = min(b_.y, rect.b_.y);
if (right - left < 0 || top - bottom < 0) return Rectangle();
return Rectangle(Coord(left, bottom), Coord(right, top));
}
private:
Coord a_;
Coord b_;
void normalize_() {
if (a_.y > b_.y) swap(a_.y, b_.y);
else if (a_.x > b_.x) swap(a_.x, b_.x);
}
};
Coord coord() {
Coord p;
cin >> p;
return p;
}
Rectangle rectangle() {
Coord p1, p2;
p1 = coord();
p2 = coord();
return Rectangle(p1, p2);
}
int main() {
auto r1 = rectangle();
cout << r1.area() << ' ' << r1.perimeter() << '\n';
system("pause");
}
АН
Адель Набиев
95 454
Лучший ответ