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

Описать класс "Треугольник" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
denstr3
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 31
19.03.2013, 14:41     Описать класс "Треугольник" #1
Описать класс "Треугольник", который определяет эту геометрическую фигуру посредством задания длин трех его сторон. Класс должен содержать конструктор с параметрами по умолчанию, а также следующие методы: вывод информации о длинах сторон треугольника; изменение длин сторон; определение углов, высот и площади треугольника. Предусмотреть проверку существования треугольника с заданными сторонами (при задании в конструкторе и при изменении сторон посредством соответствующего метода).
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
19.03.2013, 16:11     Описать класс "Треугольник" #2
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
#include <stdexcept>
#include <iostream>
#include <cmath>
 
const double PI = 3.1415926535897932384626433832795;
 
class Triangle {
 public:
  Triangle() : a(0), b(0), c(0) {}
  Triangle(const double &a, const double &b, const double &c)
    : a(a), b(b), c(c) {
    assertExists(a, b, c);
  }
  const double &getA() const { return a; }
  const double &getB() const { return b; }
  const double &getC() const { return c; }
  void setA(const double &a) {
    assertExists(a, b, c);
    this->a = a;
  }
  void setB(const double &b) {
    assertExists(a, b, c);
    this->b = b;
  }
  void setC(const double &c) {
    assertExists(a, b, c);
    this->c = c;
  }
  double getAngleA() const {
    return acos((pow(b, 2.0) + pow(c, 2.0) - pow(a, 2.0)) /
      (2.0 * c * b)) * 180 / PI;
  }
  double getAngleB() const {
    return acos((pow(a, 2.0) + pow(c, 2.0) - pow(b, 2.0)) /
      (2.0 * a * c)) * 180 / PI;
  }
  double getAngleC() const {
    return acos((pow(a, 2.0) + pow(b, 2.0) - pow(c, 2.0)) /
      (2.0 * a * b)) * 180 / PI;
  }
  double getHeightA() const {
    return (2 * getArea()) / a;
  }
  double getHeightB() const {
    return (2 * getArea()) / b;
  }
  double getHeightC() const {
    return (2 * getArea()) / c;
  }
  double getPerimeter() const {
    return a + b + c;
  }
  double getArea() const {
    double p = getPerimeter() / 2.0;
    return sqrt(p * (p - a) * (p - b) * (p - c));
  }
  bool isPossible() const { return isPossible(a, b, c); }
  static bool isPossible(const double &a, const double &b,
    const double &c) {
    return (a < b + c) && (b < a + c) && (c < a + b);
  }
 private:
  void assertExists(const double &a, const double &b, const double &c) {
    if (!isPossible(a, b, c)) {
      throw std::runtime_error("triangle is not possible");
    }
  }
  double a, b, c;
};
 
std::ostream &operator<<(std::ostream &stream, const Triangle &t) {
  return stream << "Triangle{" <<
    "a=" << t.getA() << ",b=" << t.getB() << ",c=" << t.getC() <<
    ((t.isPossible()) ? ",possible" : ",not_possible") <<
    ",angleA=" << t.getAngleA() << ",angleB=" << t.getAngleB() <<
    ",angleC=" << t.getAngleC() << ",heightA=" << t.getHeightA() <<
    ",heightB=" << t.getHeightB() << ",heightC=" << t.getHeightC() <<
    ",area=" << t.getArea() << "}";
};
 
 
int main(int argc,char **argv) {
  try {
    std::cout << Triangle(2, 2, 7);
  } catch (std::exception &e) {
    std::cout << e.what() << std::endl;
  }
 
  try {
    std::cout << Triangle(2, 2, 2);
  } catch (std::exception &e) {
    std::cout << e.what() << std::endl;
  }
 
  std::cin.get();
  return 0;
}
fjay69
 Аватар для fjay69
85 / 85 / 1
Регистрация: 26.10.2012
Сообщений: 248
19.03.2013, 16:18     Описать класс "Треугольник" #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
От себя добавлю: чтобы не запоминать число Пи, его можно вычислить:
C++
1
const double PI=asin(1)*2;
denstr3
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 31
19.03.2013, 16:59  [ТС]     Описать класс "Треугольник" #4
охохо , спасибо, ещё бы теперь разобраться что к чему
Fraunsa
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 7
18.12.2013, 20:46     Описать класс "Треугольник" #5
У меня то же, что и предыдущая задача, но треугольник задается указанием длины одной из его сторон и прилежащими к ней углами (углы задаются в градусах).
Помогите пожалуйста)

Добавлено через 22 часа 12 минут
пожалуйста
Yandex
Объявления
18.12.2013, 20:46     Описать класс "Треугольник"
Ответ Создать тему
Опции темы

Текущее время: 12:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru