Advertisement
Guest User

Lab06-09

a guest
Dec 15th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <string>
  4.  
  5. #define PI 3.14159
  6.  
  7. using namespace std;
  8.  
  9. class Triangle {
  10.     public:
  11.     unsigned sideA;
  12.     unsigned sideB;
  13.     unsigned angle;
  14.     Triangle() {
  15.     }
  16.     Triangle(unsigned sideA, unsigned sideB, unsigned angle) {
  17.         this->sideA = sideA;
  18.         this->sideB = sideB;
  19.         this->angle = angle;
  20.     }
  21.     double calculateSquare() {
  22.         return sideA * sideB * sin(angle * PI / 180) / 2;
  23.     }
  24.     double calculatePerimeter() {
  25.         return sideA + sideB + sqrt(pow(sideA, 2) + pow(sideB, 2) - 2 * sideA * sideB * cos(angle * PI / 180));
  26.     }
  27. };
  28.  
  29.  
  30. class IsoscelesTriangle : public Triangle {
  31.     public:
  32.     IsoscelesTriangle(unsigned sideA, unsigned sideB, unsigned angle) : Triangle(sideA, sideB, angle) {
  33.     }
  34. };
  35.  
  36. class EquilateralTriangle : public Triangle {
  37.     public:
  38.     EquilateralTriangle() {
  39.     }
  40.     EquilateralTriangle(unsigned side) : Triangle(side, side, 60) {
  41.     }
  42.     double calculateSquare() {
  43.         return sqrt(3) / 4 * pow(sideA, 2);
  44.     }
  45.     double calculatePerimeter() {
  46.         return 3 * sideA;
  47.     }
  48. };
  49.  
  50. class RightTriangle : public Triangle {
  51.     public:
  52.     RightTriangle(unsigned sideA, unsigned sideB, unsigned angle) : Triangle(sideA, sideB, angle) {
  53.     }
  54. };
  55.  
  56. unsigned promtForSide(string sideName) {
  57.     if (sideName.empty()) {
  58.         cout << "Enter side: ";
  59.     } else {
  60.         cout << "Enter side " << sideName << ": ";
  61.     }
  62.     unsigned side;
  63.     cin >> side;
  64.     return side;
  65. }
  66.  
  67. unsigned promtForAngle() {
  68.     cout << "Enter angle: ";
  69.     unsigned angle;
  70.     cin >> angle;
  71.     return angle;
  72. }
  73.  
  74. int main() {
  75.     cout << "Написать программу, в которой описана иерархия классов: треугольник (равнобедренный, равносторонний, прямоугольный)." << endl;
  76.     cout << "Базовый класс должен иметь поля для хранения длины двух сторон и угла между ними. Реализовать методы вычисления площади и периметра фигуры." << endl;
  77.     cout << "Продемонстрировать работу всех методов классов, предоставив пользователю выбор типа треугольника для демонстрации." << endl;
  78.     Triangle *triangle;
  79.     cout << "1) Triangle" << endl;
  80.     cout << "2) Isosceles triangle" << endl;
  81.     cout << "3) Equilateral triangle" << endl;
  82.     cout << "4) Right triangle" << endl;
  83.     unsigned choice;
  84.     do {
  85.         cin >> choice;
  86.     } while(choice < 1 || choice > 4);
  87.     switch (choice) {
  88.         case 1:
  89.         triangle = new Triangle(promtForSide("A"), promtForSide("B"), promtForAngle());
  90.         break;
  91.         case 2:
  92.         triangle = new IsoscelesTriangle(promtForSide("A"), promtForSide("B"), promtForAngle());
  93.         break;
  94.         case 3:
  95.         triangle = new EquilateralTriangle(promtForSide(""));
  96.         break;
  97.         case 4:
  98.         triangle = new RightTriangle(promtForSide("A"), promtForSide("B"), promtForAngle());
  99.         break;
  100.     }
  101.     cout << "Square of triangle: " << triangle->calculateSquare() << endl;
  102.     cout << "Perimeter of triangle: " << triangle->calculatePerimeter() << endl;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement