Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 20:49   #1
Meloiso
Новичок
Джуниор
 
Регистрация: 17.12.2013
Сообщений: 4
По умолчанию Описать класс "Треугольник" (Изменить готовую задачу))

Описать класс "Треугольник", который определяет эту геометрическую фигуру посредством указанием длины одной из его сторон и прилежащими к ней углами (углы задаются в градусах).
Класс должен содержать конструктор с параметрами по умолчанию, а также следующие методы: вывод информации о длинах сторон треугольника; изменение длин сторон; определение углов, высот и площади треугольника. Предусмотреть проверку существования треугольника с заданными сторонами (при задании в конструкторе и при изменении сторон посредством соответствующего метода).

Есть готовая программа, но там такое условие:
"геометрическая фигура определяется посредством ввода длин трех его сторон"
а,мне нужно
" посредством указанием длины одной из его сторон и прилежащими к ней углами (углы задаются в градусах)."
Код:
#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;
}

Последний раз редактировалось Meloiso; 17.12.2013 в 22:28.
Meloiso вне форума Ответить с цитированием
Старый 17.12.2013, 23:02   #2
Meloiso
Новичок
Джуниор
 
Регистрация: 17.12.2013
Сообщений: 4
По умолчанию

Пожалуйста помогите исправить условие
Meloiso вне форума Ответить с цитированием
Старый 18.12.2013, 20:58   #3
Meloiso
Новичок
Джуниор
 
Регистрация: 17.12.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Meloiso Посмотреть сообщение
Пожалуйста помогите исправить условие
Пожалуйста помогите исправить условие
Meloiso вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать класс, реализующий тип данных "вещественная матрица" и работу с ними (С#) V i b e Помощь студентам 3 02.04.2013 21:47
Русские буквы "o", "e", "c", "a" изменить на соответствующие английские буквы ramm159 Общие вопросы Delphi 3 25.12.2012 20:29
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Описать класс "Студенческая группа". Megapol Общие вопросы C/C++ 3 24.04.2012 00:22
Описать класс, реализующий тип данных "вещественная матрица" PROkaZZZniK Помощь студентам 1 12.04.2012 13:11