Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Разработать класс треугольник - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать класс Время http://www.cyberforum.ru/cpp-beginners/thread208351.html
ПОМОООГИТЕ ПЛИИЗ,ПОНЯТИЕ НЕ ИМЕЮ КАК ЭТО ДЕЛАТЬ. ЗАДАЧА- Согласно варианту задания написать программу на языке С++. Класс - Время Члены класса - Часы, минуты,секунды Методы -Конструктор, метод...
C++ Найти множество всех слов, которые встречаются в каждом из двух заданных предложений. Сделать используя текстовые файлы. помогите пожалуйста с решением задачи: Найти множество всех слов, которые встречаются в каждом из двух заданных предложений. Сделать задачу с помощью текстовых файлов. Заранее спасибо. ... http://www.cyberforum.ru/cpp-beginners/thread208341.html
Решить СЛАУ C++
ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ - Решить СЛАУ 2ATX=Y2, где A= ∣2 1 5 6 5 2 2 6 2 2 1 2 1 3 3 1∣ Y= ∣3121∣
C++ [C++] В матрице найти строку с максимальной суммой элементов и поэлементно поменять ее с первой строкой
ПОМОООООГИТЕ !!!!!!!!!Написать программу на языке С++. В программе предусмотреть диалог, откуда будут вводится элементы исходной матрицы – с клавиатуры или из текстового файла. Результаты...
C++ [C++] Вставить в массив число, сохранив упорядоченность массива http://www.cyberforum.ru/cpp-beginners/thread208334.html
ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ - "Задан упорядоченный по убыванию целочисленный массив Х, вставить в массив Х некоторое число Н, сохранив упорядоченность массива. Найти среднее арифметическое простых чисел...
C++ Простые числа ПОМОГИТЕ ПОЖАЛУЙСТА РЕШИТЬ ЗАДАЧУ - "Вводится последовательность из N целых чисел. Сформировать новую последовательность, каждый элемент которой равен 1, если соответствующее число простое, 2 –... подробнее

Показать сообщение отдельно
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
11.12.2010, 19:40
Слегка через одно место, для достоверности. Удачно сдать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
#include <vector>
#include <cmath>
#include <stdexcept>
#include <cstdlib>
#include <ctime>
 
class Triangle
{
protected:
        double _a, _b, _c;
        const static double pi = 3.14159265;
public:
        Triangle() : _a(0), _b(0), _c(0) {}
        Triangle(double a, double b, double c) : _a(a), _b(b), _c(c) {}
        Triangle(const Triangle& other) : _a(other._a), _b(other._b), _c(other._c) {}
        // стороны
        const double a() const { return _a; }
        const double b() const { return _b; }
        const double c() const { return _c; }
 
        const double perimeter() const { return _a+_b+_c; }
        const double area() const
        {
                return (_b*_c*sin(A()))/2.0;
        }
        const bool is_possible() const { return ((_a+_b)>_c) || ((_b+_c)>_a) || ((_a+_c)>_b); }
        const bool is_right() const
        {
                return (((Ad()-90)<0.0001) || ((Bd()-90)<0.0001) || ((Cd()-90)<0.0001));
        }
 
        // углы, противолежащие соответствующим сторонам
        const double A() const
        {
                double p = (_b*_b + _c*_c - _a*_a) / (2.0*_c*_b);
                return acos(p-static_cast<int>(p));
        }
        const double B() const
        {
                double p = (-_b*_b + _c*_c + _a*_a) / (2.0*_a*_c);
                return acos(p-static_cast<int>(p));
        }
        const double C() const
        {
                double p = (_b*_b - _c*_c + _a*_a) / (2.0*_a*_b);
                return acos(p-static_cast<int>(p));
        }
 
        const double Ad() const { return A()/(pi/180.); }
        const double Bd() const { return B()/(pi/180.); }
        const double Cd() const { return C()/(pi/180.); }
 
        friend std::ostream& operator<< (std::ostream& o, const Triangle& T)
        {
                o << "a: " << T.a() << ", b: " << T.b() << ", c: " << T.c() << ". ";
                if (T.is_possible())
                        o << "Area: " << T.area();
                else
                        o << "Impossible triangle.";
                return o;
        }
};
 
class RightTriangle : public Triangle
{
public:
        const double hypotenuse() const { return _c; }
        RightTriangle(void) : Triangle(0, 0, 0) {}
        RightTriangle(double a, double b) : Triangle(a, b, pow(a*a+b*b, .5)){}
        RightTriangle& operator= (const Triangle& other)
        {
                if (this!=&other)
                {
                        if (other.is_right())
                        {
                                if (other.A()-90 < 0.0001)
                                {
                                        _a = other.c();
                                        _b = other.b();
                                        _c = other.a();
                                } else
                                if (other.B()-90 < 0.0001)
                                {
                                        _a = other.a();
                                        _b = other.c();
                                        _c = other.b();
                                } else
                                if (other.C()-90 < 0.0001)
                                {
                                        _a = other.a();
                                        _b = other.b();
                                        _c = other.c();
                                }
                        }
                        else
                                throw (std::runtime_error("Not a right triangle."));
                }
                return *this;
        }
 
        operator Triangle() const { return Triangle(_a, _b, _c); }
};
 
int main()
{
        srand(static_cast<unsigned int>(time(0)));
        int M = 10;
        int N = 10;
        std::vector<Triangle> T(M);
        std::vector<RightTriangle> R(N);
 
        std::cout << "Triangles: " << std::endl;
        double sum_of_areas = 0.;
        for (int i=0; i<T.size(); i++)
        {
                T[i] = Triangle((rand()%1000+500)/10., (rand()%1000+500)/10., (rand()%500+1)/10.);
                std::cout << T[i] << std::endl;
                sum_of_areas += T[i].area();
        }
        std::cout << "Average sum of areas: " << sum_of_areas/M << std::endl;
 
        int index = 0;
        std::cout << std::endl << "Right triangles: " << std::endl;
        for (int i=0; i<R.size(); i++)
        {
                R[i] = RightTriangle((rand()%1000+500)/10., (rand()%1000+500)/10.);
                std::cout << R[i] << std::endl;
                if (R[i].hypotenuse() > R[index].hypotenuse())
                        index = i;
        }
        std::cout << "Maximum hypotenuse has triangle number " << index << ": " << R[index].hypotenuse() << std::endl;
 
        return 0;
}
4
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru