NickAndNick

Класс Треугольник

Jan 17th, 2013
703
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3.  
  4. #define RAD 57.295779513082320876798
  5.  
  6. using namespace std;
  7.  
  8. class Triangle {
  9. public:    
  10.     Triangle(double, double, double);
  11.     ~Triangle() { a = b = c = p = 0; };
  12.  
  13.     double get_area()const;
  14.     double get_perimetre()const;
  15.     void show_parties()const;
  16.     void show_perimetre()const;
  17.     void show_area()const;
  18.     void show_corners()const;
  19. private:
  20.     Triangle();
  21.  
  22.     void calc_area();
  23.     void calc_corners();
  24.     void exists();
  25.  
  26.     bool is; // существование
  27.     // стороны
  28.     double a;
  29.     double b;
  30.     double c;
  31.    
  32.     double p; // периметр
  33.  
  34.     double area; // площадь
  35.     // углы
  36.     double alpha;
  37.     double betta;
  38.     double gamma;    
  39. };
  40.  
  41. void ru();
  42.  
  43. int main() {
  44.     ru();
  45.     Triangle tr(3, 4, 5);
  46.     tr.show_perimetre();
  47.     tr.show_area();
  48.     tr.show_corners();
  49.     tr.show_parties();
  50.  
  51.     double area = tr.get_area();
  52.     double perimetre = tr.get_perimetre();
  53.     wcout << endl << L" Площадь: " << area << endl
  54.           << L" Периметр: " << perimetre << endl;
  55.     cin.get(); cin.get();
  56.     return 0;
  57. }
  58.  
  59. void ru() {
  60.     wcout.imbue(locale("rus_rus.866"));
  61.     wcin.imbue(locale("rus_rus.866"));
  62. }
  63.  
  64. void Triangle::exists() {
  65.     double max = (a > b) ? (a > c) ? a : c : (b > c) ? b : c;
  66.     if (max >= p - max) is = false;
  67.     else is = true;
  68. }
  69.  
  70. Triangle::Triangle(double _a, double _b, double _c)
  71.     : a(_a), b(_b), c(_c), p(_a + _b + _c)
  72. {
  73.     exists();
  74.     if (!is) {
  75.         wcout << L" Треугольник не существует!\a\n";
  76.         Triangle::~Triangle();
  77.     } else {
  78.         calc_area();
  79.         calc_corners();
  80.     }
  81. }
  82.  
  83. void Triangle::calc_area() {
  84.     double pp = p / 2;
  85.     area = sqrt(pp * (pp - a) * (pp - b) * (pp - c));
  86. }
  87. void Triangle::calc_corners() {
  88.     alpha = RAD * acos((b * b + c * c - a * a) / (2 * b * c));
  89.     betta = RAD * acos((a * a + c * c - b * b) / (2 * a * c));
  90.     gamma = RAD * acos((a * a + b * b - c * c) / (2 * a * b));
  91. }
  92.  
  93. void Triangle::show_parties()const {
  94.     if (is)
  95.         wcout << L" Длина стороны а = " << a << endl
  96.               << L" Длина стороны b = " << b << endl
  97.               << L" Длина стороны c = " << c << endl;
  98. }
  99.  
  100. void Triangle::show_corners()const {
  101.     if (is) {
  102.         unsigned char sign = 248;
  103.         wcout << L" Угол между сторонами а и b = " << gamma << sign << endl
  104.               << L" Угол между сторонами b и c = " << alpha << sign << endl
  105.               << L" Угол между сторонами a и c = " << betta << sign << endl;
  106.     }
  107. }
  108.  
  109. void Triangle::show_perimetre()const { if (is) wcout << L" Периметр треугольника = " << p << endl; }
  110. void Triangle::show_area()const { if (is) wcout << L" Площадь треугольника = " << area << endl; }
  111. double Triangle::get_area()const {
  112.     if (is) return area;
  113.     else return 0;
  114. }
  115. double Triangle::get_perimetre()const { return p; }
RAW Paste Data