Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <string>
- #define PI 3.14159
- using namespace std;
- class Triangle {
- public:
- unsigned sideA;
- unsigned sideB;
- unsigned angle;
- Triangle() {
- }
- Triangle(unsigned sideA, unsigned sideB, unsigned angle) {
- this->sideA = sideA;
- this->sideB = sideB;
- this->angle = angle;
- }
- double calculateSquare() {
- return sideA * sideB * sin(angle * PI / 180) / 2;
- }
- double calculatePerimeter() {
- return sideA + sideB + sqrt(pow(sideA, 2) + pow(sideB, 2) - 2 * sideA * sideB * cos(angle * PI / 180));
- }
- };
- class IsoscelesTriangle : public Triangle {
- public:
- IsoscelesTriangle(unsigned sideA, unsigned sideB, unsigned angle) : Triangle(sideA, sideB, angle) {
- }
- };
- class EquilateralTriangle : public Triangle {
- public:
- EquilateralTriangle() {
- }
- EquilateralTriangle(unsigned side) : Triangle(side, side, 60) {
- }
- double calculateSquare() {
- return sqrt(3) / 4 * pow(sideA, 2);
- }
- double calculatePerimeter() {
- return 3 * sideA;
- }
- };
- class RightTriangle : public Triangle {
- public:
- RightTriangle(unsigned sideA, unsigned sideB, unsigned angle) : Triangle(sideA, sideB, angle) {
- }
- };
- unsigned promtForSide(string sideName) {
- if (sideName.empty()) {
- cout << "Enter side: ";
- } else {
- cout << "Enter side " << sideName << ": ";
- }
- unsigned side;
- cin >> side;
- return side;
- }
- unsigned promtForAngle() {
- cout << "Enter angle: ";
- unsigned angle;
- cin >> angle;
- return angle;
- }
- int main() {
- cout << "Написать программу, в которой описана иерархия классов: треугольник (равнобедренный, равносторонний, прямоугольный)." << endl;
- cout << "Базовый класс должен иметь поля для хранения длины двух сторон и угла между ними. Реализовать методы вычисления площади и периметра фигуры." << endl;
- cout << "Продемонстрировать работу всех методов классов, предоставив пользователю выбор типа треугольника для демонстрации." << endl;
- Triangle *triangle;
- cout << "1) Triangle" << endl;
- cout << "2) Isosceles triangle" << endl;
- cout << "3) Equilateral triangle" << endl;
- cout << "4) Right triangle" << endl;
- unsigned choice;
- do {
- cin >> choice;
- } while(choice < 1 || choice > 4);
- switch (choice) {
- case 1:
- triangle = new Triangle(promtForSide("A"), promtForSide("B"), promtForAngle());
- break;
- case 2:
- triangle = new IsoscelesTriangle(promtForSide("A"), promtForSide("B"), promtForAngle());
- break;
- case 3:
- triangle = new EquilateralTriangle(promtForSide(""));
- break;
- case 4:
- triangle = new RightTriangle(promtForSide("A"), promtForSide("B"), promtForAngle());
- break;
- }
- cout << "Square of triangle: " << triangle->calculateSquare() << endl;
- cout << "Perimeter of triangle: " << triangle->calculatePerimeter() << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement