aLT22

4semlab3 (C++)

Mar 23rd, 2015
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.28 KB | None | 0 0
  1. /*
  2.     Создать класс Триад (тройка чисел); определить методы изменения полей и вычисления суммы чисел.
  3.     Определить производный класс Триангл с полями-сторонами.
  4.     Определить методы вычисления углов и площади треугольника.
  5. */
  6. #include <iostream>
  7. #include <cmath>
  8.  
  9. using namespace std;
  10.  
  11. const double PI = 3.1415;
  12.  
  13. // класс тройки чисел
  14. class Triad {
  15. public:
  16.         Triad(double x, double y, double z) {
  17.             X = x;
  18.             Y = y;
  19.             Z = z;
  20.         }
  21.         Triad() {
  22.             X = 0;
  23.             Y = 0;
  24.             Z = 0;
  25.         }
  26.         double change_x(double delta_x = 0) {
  27.             return X + delta_x;
  28.         }
  29.         double change_y(double delta_y = 0) {
  30.             return Y + delta_y;
  31.         }
  32.         double change_z(double delta_z = 0) {
  33.             return Z + delta_z;
  34.         }
  35.         double sumOfNumbers() {
  36.             return X + Y + Z;
  37.         }
  38.     protected:
  39.         double X, Y, Z; // triad of numbers
  40. };
  41.  
  42. // класс треугольника
  43. class Triangle : public Triad {
  44.     public:
  45.         Triangle(double x, double y, double z) {
  46.             X = x;
  47.             Y = y;
  48.             Z = z;
  49.         }
  50.         double calculation_corner_XandY() {
  51.             return (acos((X*X + Y*Y - Z*Z) / (2*X*Y)) * 180 / PI);
  52.         }
  53.         bool debug() {
  54.             if ((X >= Y + Z) || (Y >= X + Z) || (Z >= X + Y)) {
  55.                 return false;
  56.             } else {
  57.                 return true;
  58.             }
  59.         }
  60.         double calculation_corner_YandZ() {
  61.             return (acos((Y*Y + Z*Z - X*X) / (2*Y*Z)) * 180 / PI);
  62.         }
  63.         double calculation_corner_XandZ() {
  64.             return (acos((X*X + Z*Z - Y*Y) / (2*X*Z)) * 180 / PI);
  65.         }
  66.         double calculation_area() {
  67.             double h_perimeter = sumOfNumbers() / 2.0;
  68.             return sqrt(h_perimeter * (h_perimeter - X) * (h_perimeter - Y) * (h_perimeter - Z));
  69.         }
  70. };
  71.  
  72. int main() {
  73.     setlocale(LC_ALL, "Russian");
  74.     double x = 0, y = 0, z = 0;
  75.     cout << "Введите тройку вещественных чисел: "; cin >> x >> y >> z;
  76.     Triad count_one(x, y, z);
  77.     Triangle triangle(x, y, z);
  78.     bool choice = false;
  79.     if (x <= 0 || y <= 0 || z <= 0) {
  80.         cout << "Вы можете действовать с такими числами только как с вектором!" << endl;
  81.         char choice_two;
  82.         double delta_x = 0, delta_y = 0, delta_z = 0;
  83.         cout << "Выберите, что хотите сделать с триадой:\n*****Посчитать сумму чисел --- +\n*****Увеличить x --- x\n*****Увеличить y --- y\n*****Увеличить z --- z\n**********Ваш ввод: ";
  84.         cin >> choice_two;
  85.         cout << endl;
  86.         switch (choice_two) {
  87.             case ('+'):
  88.                 cout << "Сумма чисел равна: " << count_one.sumOfNumbers() << endl;
  89.                 break;
  90.             case ('x'):
  91.                 cout << "Введите число, которое следует прибавить: "; cin >> delta_x;
  92.                 cout << "Измененная триада: " << count_one.change_x(delta_x) << ' ' << count_one.change_y() << ' ' << count_one.change_z() << endl;
  93.                 break;
  94.             case ('y'):
  95.                 cout << "Введите число, которое следует прибавить: "; cin >> delta_y;
  96.                 cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y(delta_y) << ' ' << count_one.change_z() << endl;
  97.                 break;
  98.             case ('z'):
  99.                 cout << "Введите число, которое следует прибавить: "; cin >> delta_z;
  100.                 cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y() << ' ' << count_one.change_z(delta_z) << endl;
  101.                 break;
  102.         }
  103.     } else {
  104.         cout << "Выберите, как действовать с числами (как с вектором - 0, или как со сторонами треугольника - 1) : "; cin >> choice;
  105.         cout << endl;
  106.         if (!choice) {
  107.             char choice_two;
  108.             double delta_x = 0, delta_y = 0, delta_z = 0;
  109.             cout << "Выберите, что хотите сделать с триадой:\n*****Посчитать сумму чисел --- +\n*****Увеличить x --- x\n*****Увеличить y --- y\n*****Увеличить z --- z\n**********Ваш ввод: ";
  110.             cin >> choice_two;
  111.             cout << endl;
  112.             switch (choice_two) {
  113.                 case ('+'):
  114.                     cout << "Сумма чисел равна: " << count_one.sumOfNumbers() << endl;
  115.                     break;
  116.                 case ('x'):
  117.                     cout << "Введите число, которое следует прибавить: "; cin >> delta_x;
  118.                     cout << "Измененная триада: " << count_one.change_x(delta_x) << ' ' << count_one.change_y() << ' ' << count_one.change_z() << endl;
  119.                     break;
  120.                 case ('y'):
  121.                     cout << "Введите число, которое следует прибавить: "; cin >> delta_y;
  122.                     cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y(delta_y) << ' ' << count_one.change_z() << endl;
  123.                     break;
  124.                 case ('z'):
  125.                     cout << "Введите число, которое следует прибавить: "; cin >> delta_z;
  126.                     cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y() << ' ' << count_one.change_z(delta_z) << endl;
  127.                     break;
  128.             }
  129.         } else {
  130.             char choice_three;
  131.             cout << "Выберите, что хотите найти:\n*****Посчитать площадь треугольника --- s\n******Посчитать углы --- с\n**********Ваш ввод: ";
  132.             cin >> choice_three;
  133.             cout << endl;
  134.             switch (choice_three) {
  135.                 case ('s'):
  136.                     cout << "Площадь равна: " << triangle.calculation_area() << endl;
  137.                     break;
  138.                 case ('c'):
  139.                     if (!triangle.debug()) {
  140.                         cout  << "Недопустимые значения сторон! " << endl;
  141.                         break;
  142.                     } else {
  143.                         cout << "Угол альфа равен: " << triangle.calculation_corner_XandY() << endl << "Угол бетта равен: " << triangle.calculation_corner_YandZ() << endl << "Угол гамма равен: " << triangle.calculation_corner_XandZ() << endl;
  144.                         break;
  145.                     }
  146.             }
  147.         }
  148.     }
  149.     char choice_continue;
  150.     cout << "Введите то, что хотите сделать (\"C\" - продолжить работу) : ";
  151.     cin >> choice_continue;
  152.     if (choice_continue == 'c') {
  153.         main();
  154.     } else {
  155.         system("pause");
  156.         return 0;
  157.     }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment