Guest User

Untitled

a guest
Nov 19th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.79 KB | None | 0 0
  1. #pragma once
  2. class Triangle
  3. {
  4. protected:
  5.     int _firstSide;
  6.     int _secondSide;
  7.     int _angle;
  8. public:
  9.     Triangle();
  10.     Triangle(int first, int second, int ang);
  11.     virtual double  countPerimetr();
  12.     virtual double countArea();
  13. };
  14. class Equilateral : public Triangle
  15. {
  16. public:
  17.     Equilateral(int first, int second, int ang);
  18.     double countPerimetr() override;
  19.     double countArea() override;
  20. };
  21. class Isosceles : public Triangle
  22. {
  23. public:
  24.     Isosceles(int first, int second, int ang);
  25.     double countPerimetr() override;
  26.     double countArea() override;
  27. };
  28. class Rectangular : public Triangle
  29. {
  30. public:
  31.     Rectangular(int first, int second, int ang);
  32.     double countPerimetr() override;
  33.     double countArea() override;
  34. };
  35. void setParameters(Triangle *&T);
  36. ============================
  37. #include "Triangle.h"
  38. #include <iostream>
  39. #include <cmath>
  40. using namespace std;
  41.  
  42.  
  43. //произвольный треугольник
  44. Triangle::Triangle()
  45. {
  46. }
  47. Triangle::Triangle(int first, int second, int ang)
  48. {
  49.     _firstSide = first;
  50.     _secondSide = second;
  51.     _angle = ang;
  52. }
  53. double Triangle::countPerimetr()
  54. {
  55.     return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2) - 2 * _firstSide * _secondSide * cos(_angle)) + _firstSide + _secondSide;
  56. }
  57. double Triangle::countArea()
  58. {
  59.     return (_firstSide * _secondSide * sin(_angle)) / 2;
  60. }
  61. //равносторонний треугольник
  62. Equilateral::Equilateral(int first, int second, int ang)
  63. {
  64.     _firstSide = first;
  65.     _secondSide = second;
  66.     _angle = ang;
  67. }
  68. double Equilateral::countPerimetr()
  69. {
  70.     return _firstSide * 3;
  71. }
  72. double Equilateral::countArea()
  73. {
  74.     return (pow(_firstSide, 2) * sqrt(3)) / 4;
  75. }
  76. //равнобедренный треугольник
  77. Isosceles::Isosceles(int first, int second, int ang)
  78. {
  79.     _firstSide = first;
  80.     _secondSide = second;
  81.     _angle = ang;
  82. }
  83. double Isosceles::countPerimetr()  
  84. {
  85.     return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2) - 2 * _firstSide * _secondSide * cos(_angle)) + _firstSide + _secondSide;
  86. }
  87. double Isosceles::countArea()
  88. {
  89.     return  (_firstSide * _secondSide * sin(_angle)) / 2;
  90. }
  91. //равносторонний треугольник
  92. Rectangular::Rectangular(int first, int second, int ang)
  93. {
  94.     _firstSide = first;
  95.     _secondSide = second;
  96.     _angle = ang;
  97. }
  98. double Rectangular::countPerimetr()
  99. {
  100.     return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2) - 2 * _firstSide * _secondSide * cos(_angle)) + _firstSide + _secondSide;
  101. }
  102. double Rectangular::countArea()
  103. {
  104.     return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2)) + _firstSide + _secondSide;
  105. }
  106. void setParameters(Triangle *&T)
  107. {
  108.     int first, second, ang;
  109.     cout << "Введите 1 сторону треугольника: \n";
  110.     cin >> first;
  111.     cout << "Введите 2 сторону треугольника: \n";
  112.     cin >> second;
  113.     cout << "Введите угол между сторонами треугольника: \n";
  114.     cin >> ang;
  115.     if (first <= 0 || second <= 0 || ang <= 0)
  116.     {
  117.         throw exception("Значения не могут быть меньше или равными 0!");
  118.         exit(1);
  119.     }
  120.     if (T != NULL)
  121.     {
  122.         delete T;
  123.     }
  124.     if (first == second && ang == 60)
  125.     {
  126.         T = new Equilateral(first, second, ang);
  127.     }
  128.     else if (first == second && ang != 60)
  129.     {
  130.         T = new Isosceles(first, second, ang);
  131.     }
  132.     else if (ang == 90)
  133.     {
  134.         T = new Rectangular(first, second, ang);
  135.     }
  136.     else
  137.         T = new Triangle(first, second, ang);
  138. }
  139. =========================
  140. v#include <iostream>
  141. #include "Triangle.h"
  142. using namespace std;
  143.  
  144. int main()
  145. {
  146.     setlocale(0, "Rus");
  147.     try
  148.     {
  149.         Triangle *T = NULL;
  150.         setParameters(T);
  151.         cout << "Площадь треугольника: " << T->countArea() << endl;
  152.         cout << "Периметр треугольника: " << T->countPerimetr() << endl;
  153.     }
  154.     catch (const exception& ex)
  155.     {
  156.         cout << ex.what() << endl;
  157.     }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment