Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Создать класс Триад (тройка чисел); определить методы изменения полей и вычисления суммы чисел.
- Определить производный класс Триангл с полями-сторонами.
- Определить методы вычисления углов и площади треугольника.
- */
- #include <iostream>
- #include <cmath>
- using namespace std;
- const double PI = 3.1415;
- // класс тройки чисел
- class Triad {
- public:
- Triad(double x, double y, double z) {
- X = x;
- Y = y;
- Z = z;
- }
- Triad() {
- X = 0;
- Y = 0;
- Z = 0;
- }
- double change_x(double delta_x = 0) {
- return X + delta_x;
- }
- double change_y(double delta_y = 0) {
- return Y + delta_y;
- }
- double change_z(double delta_z = 0) {
- return Z + delta_z;
- }
- double sumOfNumbers() {
- return X + Y + Z;
- }
- protected:
- double X, Y, Z; // triad of numbers
- };
- // класс треугольника
- class Triangle : public Triad {
- public:
- Triangle(double x, double y, double z) {
- X = x;
- Y = y;
- Z = z;
- }
- double calculation_corner_XandY() {
- return (acos((X*X + Y*Y - Z*Z) / (2*X*Y)) * 180 / PI);
- }
- bool debug() {
- if ((X >= Y + Z) || (Y >= X + Z) || (Z >= X + Y)) {
- return false;
- } else {
- return true;
- }
- }
- double calculation_corner_YandZ() {
- return (acos((Y*Y + Z*Z - X*X) / (2*Y*Z)) * 180 / PI);
- }
- double calculation_corner_XandZ() {
- return (acos((X*X + Z*Z - Y*Y) / (2*X*Z)) * 180 / PI);
- }
- double calculation_area() {
- double h_perimeter = sumOfNumbers() / 2.0;
- return sqrt(h_perimeter * (h_perimeter - X) * (h_perimeter - Y) * (h_perimeter - Z));
- }
- };
- int main() {
- setlocale(LC_ALL, "Russian");
- double x = 0, y = 0, z = 0;
- cout << "Введите тройку вещественных чисел: "; cin >> x >> y >> z;
- Triad count_one(x, y, z);
- Triangle triangle(x, y, z);
- bool choice = false;
- if (x <= 0 || y <= 0 || z <= 0) {
- cout << "Вы можете действовать с такими числами только как с вектором!" << endl;
- char choice_two;
- double delta_x = 0, delta_y = 0, delta_z = 0;
- cout << "Выберите, что хотите сделать с триадой:\n*****Посчитать сумму чисел --- +\n*****Увеличить x --- x\n*****Увеличить y --- y\n*****Увеличить z --- z\n**********Ваш ввод: ";
- cin >> choice_two;
- cout << endl;
- switch (choice_two) {
- case ('+'):
- cout << "Сумма чисел равна: " << count_one.sumOfNumbers() << endl;
- break;
- case ('x'):
- cout << "Введите число, которое следует прибавить: "; cin >> delta_x;
- cout << "Измененная триада: " << count_one.change_x(delta_x) << ' ' << count_one.change_y() << ' ' << count_one.change_z() << endl;
- break;
- case ('y'):
- cout << "Введите число, которое следует прибавить: "; cin >> delta_y;
- cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y(delta_y) << ' ' << count_one.change_z() << endl;
- break;
- case ('z'):
- cout << "Введите число, которое следует прибавить: "; cin >> delta_z;
- cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y() << ' ' << count_one.change_z(delta_z) << endl;
- break;
- }
- } else {
- cout << "Выберите, как действовать с числами (как с вектором - 0, или как со сторонами треугольника - 1) : "; cin >> choice;
- cout << endl;
- if (!choice) {
- char choice_two;
- double delta_x = 0, delta_y = 0, delta_z = 0;
- cout << "Выберите, что хотите сделать с триадой:\n*****Посчитать сумму чисел --- +\n*****Увеличить x --- x\n*****Увеличить y --- y\n*****Увеличить z --- z\n**********Ваш ввод: ";
- cin >> choice_two;
- cout << endl;
- switch (choice_two) {
- case ('+'):
- cout << "Сумма чисел равна: " << count_one.sumOfNumbers() << endl;
- break;
- case ('x'):
- cout << "Введите число, которое следует прибавить: "; cin >> delta_x;
- cout << "Измененная триада: " << count_one.change_x(delta_x) << ' ' << count_one.change_y() << ' ' << count_one.change_z() << endl;
- break;
- case ('y'):
- cout << "Введите число, которое следует прибавить: "; cin >> delta_y;
- cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y(delta_y) << ' ' << count_one.change_z() << endl;
- break;
- case ('z'):
- cout << "Введите число, которое следует прибавить: "; cin >> delta_z;
- cout << "Измененная триада: " << count_one.change_x() << ' ' << count_one.change_y() << ' ' << count_one.change_z(delta_z) << endl;
- break;
- }
- } else {
- char choice_three;
- cout << "Выберите, что хотите найти:\n*****Посчитать площадь треугольника --- s\n******Посчитать углы --- с\n**********Ваш ввод: ";
- cin >> choice_three;
- cout << endl;
- switch (choice_three) {
- case ('s'):
- cout << "Площадь равна: " << triangle.calculation_area() << endl;
- break;
- case ('c'):
- if (!triangle.debug()) {
- cout << "Недопустимые значения сторон! " << endl;
- break;
- } else {
- cout << "Угол альфа равен: " << triangle.calculation_corner_XandY() << endl << "Угол бетта равен: " << triangle.calculation_corner_YandZ() << endl << "Угол гамма равен: " << triangle.calculation_corner_XandZ() << endl;
- break;
- }
- }
- }
- }
- char choice_continue;
- cout << "Введите то, что хотите сделать (\"C\" - продолжить работу) : ";
- cin >> choice_continue;
- if (choice_continue == 'c') {
- main();
- } else {
- system("pause");
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment