Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- class Triangle
- {
- protected:
- int _firstSide;
- int _secondSide;
- int _angle;
- public:
- Triangle();
- Triangle(int first, int second, int ang);
- virtual double countPerimetr();
- virtual double countArea();
- };
- class Equilateral : public Triangle
- {
- public:
- Equilateral(int first, int second, int ang);
- double countPerimetr() override;
- double countArea() override;
- };
- class Isosceles : public Triangle
- {
- public:
- Isosceles(int first, int second, int ang);
- double countPerimetr() override;
- double countArea() override;
- };
- class Rectangular : public Triangle
- {
- public:
- Rectangular(int first, int second, int ang);
- double countPerimetr() override;
- double countArea() override;
- };
- void setParameters(Trian
- ||||||||||||||||||||||||||||||||||||
- #include "Triangle.h"
- #include <iostream>
- #include <cmath>
- using namespace std;
- //произвольный треугольник
- Triangle::Triangle()
- {
- }
- Triangle::Triangle(int first, int second, int ang)
- {
- _firstSide = first;
- _secondSide = second;
- _angle = ang;
- }
- double Triangle::countPerimetr()
- {
- return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2) - 2 * _firstSide * _secondSide * cos(_angle)) + _firstSide + _secondSide;
- }
- double Triangle::countArea()
- {
- return (_firstSide * _secondSide * sin(_angle)) / 2;
- }
- //равносторонний треугольник
- Equilateral::Equilateral(int first, int second, int ang)
- {
- _firstSide = first;
- _secondSide = second;
- _angle = ang;
- }
- double Equilateral::countPerimetr()
- {
- return _firstSide * 3;
- }
- double Equilateral::countArea()
- {
- return (pow(_firstSide, 2) * sqrt(3)) / 4;
- }
- //равнобедренный треугольник
- Isosceles::Isosceles(int first, int second, int ang)
- {
- _firstSide = first;
- _secondSide = second;
- _angle = ang;
- }
- double Isosceles::countPerimetr()
- {
- return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2) - 2 * _firstSide * _secondSide * cos(_angle)) + _firstSide + _secondSide;
- }
- double Isosceles::countArea()
- {
- return (_firstSide * _secondSide * sin(_angle)) / 2;
- }
- //равносторонний треугольник
- Rectangular::Rectangular(int first, int second, int ang)
- {
- _firstSide = first;
- _secondSide = second;
- _angle = ang;
- }
- double Rectangular::countPerimetr()
- {
- return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2) - 2 * _firstSide * _secondSide * cos(_angle)) + _firstSide + _secondSide;
- }
- double Rectangular::countArea()
- {
- return sqrt(pow(_firstSide, 2) + pow(_secondSide, 2)) + _firstSide + _secondSide;
- }
- void setParameters(Triangle *&T)
- {
- int first, second, ang;
- cout << "Введите 1 сторону треугольника: \n";
- cin >> first;
- cout << "Введите 2 сторону треугольника: \n";
- cin >> second;
- cout << "Введите угол между сторонами треугольника: \n";
- cin >> ang;
- if (first <= 0 || second <= 0 || ang <= 0)
- {
- throw exception("Значения не могут быть меньше или равными 0!");
- exit(1);
- }
- if (T != NULL)
- {
- delete T;
- }
- if (first == second && ang == 60)
- {
- T = new Equilateral(first, second, ang);
- }
- else if (first == second && ang != 60)
- {
- T = new Isosceles(first, second, ang);
- }
- else if (ang == 90)
- {
- T = new Rectangular(first, second, ang);
- }
- else
- T = new Triangle(first, second, ang);
- }
- ||||||||||||||||||
- #include <iostream>
- #include "Triangle.h"
- using namespace std;
- int main()
- {
- setlocale(0, "Rus");
- try
- {
- Triangle *T = NULL;
- setParameters(T);
- cout << "Площадь треугольника: " << T->countArea() << endl;
- cout << "Периметр треугольника: " << T->countPerimetr() << endl;
- }
- catch (const exception& ex)
- {
- cout << ex.what() << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement