Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- using namespace std;
- struct POINT {
- double x;
- double y;
- };
- typedef POINT * PPOINT;
- struct TRIANGLE {
- double a;
- double b;
- double c;
- POINT first;
- POINT second;
- POINT third;
- bool exists();
- void lengths();
- double area();
- };
- double edge(const POINT, const POINT);
- void show(PPOINT, size_t);
- double max_area(TRIANGLE &, PPOINT, size_t);
- int main() {
- wcout.imbue(locale("rus_rus.866"));
- wcout << L"\n Введите количество точек: ";
- size_t size;
- cin >> size;
- cout << endl;
- PPOINT points = new POINT [size];
- for (size_t n = 0; n < size; n++) {
- cout << " x" << n + 1 << " -> ";
- cin >> points[n].x;
- cout << " y" << n + 1 << " -> ";
- cin >> points[n].y;
- cout << endl;
- } system("cls");
- show(points, size);
- TRIANGLE max_triangle;
- double max = max_area(max_triangle, points, size);
- if (max) {
- wcout << L" Наибольшую площадь имеет треугольник образованный точками с координатами:\n\n"
- << L"\t\t\t\tx1 = " << max_triangle.first.x << endl
- << L"\t\t\t\ty1 = " << max_triangle.first.y << endl << endl
- << L"\t\t\t\tx2 = " << max_triangle.second.x << endl
- << L"\t\t\t\ty2 = " << max_triangle.second.y << endl << endl
- << L"\t\t\t\tx3 = " << max_triangle.third.x << endl
- << L"\t\t\t\ty3 = " << max_triangle.third.y << endl << endl
- << L"\t\t\tПлощадь треугольника: " << max << endl;
- } else wcout << L" Недостаточно данных!\a\n";
- delete[] points;
- cin.get(); cin.get();
- return 0;
- }
- double TRIANGLE::area() {
- double p = (a + b + c) / 2;
- return sqrt(p * (p - a) * (p - b) * (p - c));
- }
- bool TRIANGLE::exists() {
- bool x;
- double max = (a > b) ? (a > c) ? a : c : (b > c) ? b : c;
- (a + b + c - max > max) ? x = true : x = false;
- return x;
- }
- void TRIANGLE::lengths() {
- a = edge(first, second);
- b = edge(second, third);
- c = edge(third, first);
- }
- double max_area(TRIANGLE & _tr, PPOINT _points, size_t _size) {
- double max = 0;
- if (_size > 2) {
- double area;
- TRIANGLE temp;
- for (size_t f = 0; f < _size - 2; f++) {
- for (size_t s = f + 1; s < _size - 1; s++) {
- for (size_t t = s + 1; t < _size; t++) {
- _tr.first = _points[f];
- _tr.second = _points[s];
- _tr.third = _points[t];
- _tr.lengths();
- area = _tr.area();
- if (_tr.exists() && area > max) {
- max = area;
- temp = _tr;
- }
- }
- }
- } _tr = temp;
- }
- return max;
- }
- void show(PPOINT _points, size_t _size) {
- streamsize w = 7;
- cout << endl << " X: ";
- for (size_t n = 0; n < _size; n++) cout << setw(w) << _points[n].x;
- cout << endl << " Y: ";
- for (size_t n = 0; n < _size; n++) cout << setw(w) << _points[n].y;
- cout << endl << endl;
- }
- double edge(const POINT _a, const POINT _b) {
- return sqrt(pow(_a.x - _b.x, 2) + pow(_a.y - _b.y, 2));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement