C/C++
Помогите пожалуйста сделать задачу по программированию C++
Реализовать класс треугольников. Для некоторого множества заданных координатами своих вершин треугольников, найти треугольник максимальной площади (если максимальную площадь имеют несколько треугольников, то найти первый из них). Предусмотреть возможность перемещения треугольников и проверки включения одного треугольника в другой
#include <algorithm>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
class Point {
public:
Point() : x(0), y(0) {}
Point(const double x, const double y) : x(x), y(y) {}
double length(const Point& p)const {
return sqrt(pow(p.x - x, 2) + pow(p.y - y, 2));
}
private:
double x;
double y;
friend ostream& operator<<(ostream& out, const Point& p) {
return out << "{" << p.x << "; " << p.y << "}";
}
};
class Triangle {
public:
Triangle() : a(1.0), b(1.0), c(1.0) { }
Triangle(const double a, const double b, const double c) :
a(a), b(b), c(c) { }
Triangle(const Point& a, const Point& b, const Point& c) :
x(a), y(b), z(c),
a(a.length(b)), b(b.length(c)), c(c.length(a)) {}
double perimeter()const {
return a + b + c;
}
bool exist()const {
return argument() > 0.0;
}
double area()const {
return sqrt(argument());
}
void coords()const {
cout << "Координаты: {" << x << ", " << y << ", " << z << "}\n";
}
private:
Point x, y, z;
double a, b, c;
double argument()const {
auto p = perimeter() / 2;
return p * (p - a) * (p - b) * (p - c);
}
friend ostream& operator<<(ostream& out, const Triangle& t) {
return out << "{" << t.a << ", " << t.b << ", " << t.c << "}";
}
friend bool operator<(const Triangle& a, const Triangle& b) {
return a.area() < b.area();
}
};
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
unsigned integer(const char* msg) {
cout << msg;
unsigned value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
Point point(const char* name) {
cout << name;
auto x = real("x: ");
cout << name;
auto y = real("y: ");
return { x, y };
}
Triangle triangle() {
auto a = point("A");
auto b = point("B");
auto c = point("C");
return { a, b, c };
}
int main() {
system("chcp 1251 > nul");
auto quantity = integer("Введите количество треугольников: ");
vector<Triangle> box(quantity);
for (auto& shape : box) {
shape = triangle();
puts("");
}
auto& max = *max_element(box.begin(), box.end());
cout
<< "Максимальная площадь: " << max.area() << '\n'
<< "Длины сторон: " << max << '\n';
max.coords();
system("pause > nul");
}
P.S. Перемещать и включать вам придётся самостоятельно.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
class Point {
public:
Point() : x(0), y(0) {}
Point(const double x, const double y) : x(x), y(y) {}
double length(const Point& p)const {
return sqrt(pow(p.x - x, 2) + pow(p.y - y, 2));
}
private:
double x;
double y;
friend ostream& operator<<(ostream& out, const Point& p) {
return out << "{" << p.x << "; " << p.y << "}";
}
};
class Triangle {
public:
Triangle() : a(1.0), b(1.0), c(1.0) { }
Triangle(const double a, const double b, const double c) :
a(a), b(b), c(c) { }
Triangle(const Point& a, const Point& b, const Point& c) :
x(a), y(b), z(c),
a(a.length(b)), b(b.length(c)), c(c.length(a)) {}
double perimeter()const {
return a + b + c;
}
bool exist()const {
return argument() > 0.0;
}
double area()const {
return sqrt(argument());
}
void coords()const {
cout << "Координаты: {" << x << ", " << y << ", " << z << "}\n";
}
private:
Point x, y, z;
double a, b, c;
double argument()const {
auto p = perimeter() / 2;
return p * (p - a) * (p - b) * (p - c);
}
friend ostream& operator<<(ostream& out, const Triangle& t) {
return out << "{" << t.a << ", " << t.b << ", " << t.c << "}";
}
friend bool operator<(const Triangle& a, const Triangle& b) {
return a.area() < b.area();
}
};
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
unsigned integer(const char* msg) {
cout << msg;
unsigned value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
Point point(const char* name) {
cout << name;
auto x = real("x: ");
cout << name;
auto y = real("y: ");
return { x, y };
}
Triangle triangle() {
auto a = point("A");
auto b = point("B");
auto c = point("C");
return { a, b, c };
}
int main() {
system("chcp 1251 > nul");
auto quantity = integer("Введите количество треугольников: ");
vector<Triangle> box(quantity);
for (auto& shape : box) {
shape = triangle();
puts("");
}
auto& max = *max_element(box.begin(), box.end());
cout
<< "Максимальная площадь: " << max.area() << '\n'
<< "Длины сторон: " << max << '\n';
max.coords();
system("pause > nul");
}
P.S. Перемещать и включать вам придётся самостоятельно.
Алексей Рязанов
Не компилируется
Похожие вопросы
- Помогите пожалуйста с задачей по программированию на С++.
- Задача по программированию C++
- Помогите пожалуйста с задачей на c++, если кто-нибудь захочет помочь.
- Помогите решить задачу по программированию C++
- Программирование С++. Помогите, пожалуйста, решить задачу.
- Помогите пожалуйста решить задачу на C ИЛИ C#
- Помогите сделать задние по программированию (c++)
- Задача по программированию C++
- Всем привет. Помогите пожалуйста с задачей на C++
- Помогите пожалуйста с задачей на C++