0 / 0 / 0
Регистрация: 17.05.2020
Сообщений: 15
1

Задачи по наследованию C++

28.11.2020, 23:46. Показов 6525. Ответов 10

Author24 — интернет-сервис помощи студентам
1)Создать класс треугольник, члены класса – длины 3-х сторон.
Предусмотреть в классе методы проверки существования треугольника, вычисления и
вывода сведений о фигуре – длины сторон, углы, периметр, площадь. Создать
производный класс – равносторонний треугольник, перегрузить в классе проверку,
является ли треугольник равносторонним и метод вывода сведений о фигуре. Написать
программу, демонстрирующую работу с классом: дано K треугольников и L
равносторонних треугольников, найти среднюю площадь для K треугольников и
наибольший равносторонний треугольник.

2)Используя родительский класс «СЛУЖАЩИЙ» породить производный класс
«ДИРЕКТОР». Используя классы «ФИРМА» и «ДИРЕКТОР», описать класс
«РУКОВОДИТЕЛЬ ФИРМЫ». Расширить класс «РУКОВОДИТЕЛЬ ФИРМЫ» создав два
производных класса «РУКОВОДИТЕЛЬ ГОС.УЧ.» и «РУКОВОДИТЕЛЬ ООО».
Продумать для данной иерархии классов поля и методы (обязательно: вывод информации
о фирме и руководителе)

 Комментарий модератора 
П.5.16.Правил
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2020, 23:46
Ответы с готовыми решениями:

По наследованию
Решил заняться паттернами проектирования и возник вопрос. Допустим есть абстрактный класс public...

Вопрос по наследованию
Вывод Hello СHild Hello Base Что сделать чтобы Base не выводило при подобном...

Вопрос по наследованию в COM
Наследование в COM Можно ли в COM объектах реализовать следующую конструкцию: Имеем базовый COM...

вопрос по наследованию
начал изучать ООП в РНР. нужно уточнение. имеется класс статей Aticle и дочерний класс...

10
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
28.11.2020, 23:57 2
В классе "равносторонний треугольник" проверять треугольник на равносторонний... это сильно! Кто формулировал-то такую жуть?
0
0 / 0 / 0
Регистрация: 17.05.2020
Сообщений: 15
28.11.2020, 23:59  [ТС] 3
преподаватель) понятия не имею вообще как делать(
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
29.11.2020, 00:07 4
Цитата Сообщение от pOWER1223 Посмотреть сообщение
понятия не имею вообще как делать
Ну хоть из ООП что-то знаешь?
0
0 / 0 / 0
Регистрация: 17.05.2020
Сообщений: 15
29.11.2020, 00:25  [ТС] 5
только начинаю изучать.с Реализацией классов более менее разобрался

Добавлено через 10 минут
jugu, вот 1 часть программы сделал, а другую не понимаю

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Triangle
{
private:
    Triangle();
    void calc_P();
    void calc_S();
    void calc_angles();
    void exist();
    bool is;
    double a, b, c;
    double P, S;
    double alpha, betta, gamma;
public:
    Triangle(double, double, double);
    ~Triangle() {};
    double get_P()const;
    double get_S()const;
    void show();
};
 
//Проверка существования треугольника. Если он существует, то расчитываем периметр, площадь и углы. Иначе выводим сообщение и загружаем деструктор.
void Triangle::exist() 
{
    if ((a < b + c) && (b < a + c) && (c < a + b)) is = true;
    else is = false;
}
Triangle::Triangle(double _a, double _b, double _c) : a(_a), b(_b), c(_c)
{
    exist();
    if (!is) 
    {
        cout << " Треугольник не существует!\a\n";
        Triangle::~Triangle();
    } 
    else 
    {
        calc_P();
        calc_S();
        calc_angles();
    }
}
 
//Расчёт периметра P, площади S и углов
void Triangle::calc_P() 
{
    P = a + b + c;
}
 
void Triangle::calc_S() 
{
    double pp = P / 2;
    S = sqrt(pp * (pp - a) * (pp - b) * (pp - c));
}
void Triangle::calc_angles() 
{
    double RAD = 57.296;
    alpha = RAD * acos((b * b + c * c - a * a) / (2 * b * c));
    betta = RAD * acos((a * a + c * c - b * b) / (2 * a * c));
    gamma = RAD * acos((a * a + b * b - c * c) / (2 * a * b));
}
 
//Вывод на экран 
void Triangle::show()
{
    if (is)
    {
        cout << " Длина стороны а = " << a << endl;
        cout << " Длина стороны b = " << b << endl;
        cout << " Длина стороны c = " << c << endl << endl;
        cout << " Угол между сторонами а и b = " << gamma << endl;
        cout << " Угол между сторонами b и c = " << alpha << endl;
        cout << " Угол между сторонами a и c = " << betta << endl;
    }
}
 
//Если треугольник существует, то присваиваем к get_S() и get_P() площадь S и периметр P соответственно, чтобы их вывести на экран. Иначе присваиваем значение 0.
double Triangle::get_S()const 
{
    if (is) return S;
    else return 0;
}
double Triangle::get_P()const 
{ 
    if (is) return P;
    else return 0;
}
 
int main() 
{
    setlocale(LC_ALL, "Russian");
    Triangle tr(2, 3, 4);//задаём значения a, b, c
    tr.show();
    double S = tr.get_S();
    double P = tr.get_P();
    cout << endl << " Площадь: " << S << endl;
    cout << " Периметр: " << P << endl;
    system("pause");
    return 0;
}
Добавлено через 1 минуту
jugu, перегрузить в классе проверку,
является ли треугольник равносторонним и метод вывода сведений о фигуре. Написать
программу, демонстрирующую работу с классом: дано K треугольников и L
равносторонних треугольников, найти среднюю площадь для K треугольников и
наибольший равносторонний треугольник. Эту часть не пойму
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
29.11.2020, 10:17 6
Цитата Сообщение от pOWER1223 Посмотреть сообщение
вот 1 часть программы сделал, а другую не понимаю
Ну вот, что-то понимаешь. Это хорошо. Сразу вижу косяк - деструктор базового класса у тебя не виртуальный.
0
0 / 0 / 0
Регистрация: 17.05.2020
Сообщений: 15
04.12.2020, 13:36  [ТС] 7
jugu, не знаешь как посчитать количество сравнений и перестановок?
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
04.12.2020, 13:39 8
Цитата Сообщение от pOWER1223 Посмотреть сообщение
как посчитать количество сравнений и перестановок?
Количество сравнений, если только на равенство, то равно числу всевозможных парных сочетаний, а число перестановок = n! (n - мощность множества).
0
0 / 0 / 0
Регистрация: 17.05.2020
Сообщений: 15
04.12.2020, 13:42  [ТС] 9
jugu, вот как в это коде посчитать количество сравнений и перестановок при N=10;100;1000;10000


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <ctime>
#include <chrono>
#include <thread>
 
using namespace std;
 
 
void input_array(short* A, unsigned short n);
void output_array(short* A, unsigned short n);
void sort_array(short* A, unsigned short n);
 
 
void main()
{
    unsigned short n;
    n = 10;
    short* A = new short[n];
    input_array(A, n);
    output_array(A, n);
    sort_array(A, n);
    output_array(A, n);
}
auto start = chrono::high_resolution_clock::now();
 
void input_array(short* A, unsigned short n)
{
    srand((unsigned)time(NULL));
    for (unsigned short i = 0; i < n; i++)
        A[i] = rand() % 200 - 100;
}
 
void output_array(short* A, unsigned short n)
{
    for (unsigned short i = 0; i < n; i++)
        cout << A[i] << " ";
    cout << "\n";
}
 
void sort_array(short* A, unsigned short n)
{
    short x;
    short left;
    short right;
    short sred;
    for (short i = 1; i < n; i++)
        if (A[i - 1] > A[i]) {
            x = A[i];
            left = 0;
            right = i - 1;
            do {
                sred = (left + right) / 2;
                if (A[sred] < x) left = sred + 1;
                else  right = sred - 1;
            } while (left <= right);
            for (short j = i - 1; j >= left; j--)
                A[j + 1] = A[j];
            A[left] = x;
        }
    auto end = chrono::high_resolution_clock::now();
    chrono::duration<float> duration = end - start;
    cout << " Duration " << duration.count() << endl;
}
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
04.12.2020, 14:59 10
Цитата Сообщение от pOWER1223 Посмотреть сообщение
посчитать количество сравнений и перестановок при N=10;100;1000;10000
А, ты о таких перестановках...
0
0 / 0 / 0
Регистрация: 07.02.2022
Сообщений: 1
07.02.2022, 11:39 11
Увидел вашу задачу и в качестве тренировки сделал представленное ниже решение. Как я понял, это просили сделать в задаче.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
#include "math.h"
#include <vector>
using namespace std;
class Triangle {
 
public:
    int first_length = 0;
    int second_length = 0;
    int third_length = 0;
 
 
    bool IsTriangle(){
        if((first_length + second_length > third_length)&&(first_length + third_length > second_length)&&(third_length + second_length > first_length)){
            return true;
        }
        else return false;
    }
    int Triangle_perimeter(){
        int res = first_length + second_length + third_length;
        return res;
    }
    double Triangle_Square(){
        double p = Triangle_perimeter()*1.0/2.0;
        double S = sqrt(p*(p-first_length)*(p-second_length)*(p-third_length));
        return S;
    }
    double Triangle_Angle(int a, int b, int c){ // угол между сторонами a и b
        double angle = acos((a*a+b*b-c*c)*1.0/(2.0*a*b));
        double res = angle*180.0/M_PI;
        return res;
    }
    void Triangle_Out(){
        cout << "length 1: " << first_length << endl <<  " length 2:" << second_length << endl << " length 3:" << third_length;
        cout << endl;
        cout << "Perimeter: " << Triangle_perimeter();
        cout << endl;
        cout << "Square: " << Triangle_Square();
        cout << endl;
        cout << "Angle first & second sides: " << Triangle_Angle(first_length,second_length,third_length);
        cout << endl;
        cout << "Angle first & third sides: " << Triangle_Angle(first_length,third_length,second_length);
        cout << endl;
        cout << " Angle second & third sides: " << Triangle_Angle(second_length,third_length,first_length);
        cout << endl;
 
    }
    Triangle(){
    }
    ~Triangle(){}
};
 
class Equilateral_Triangle : public Triangle{ //открытое наследование
public:
    bool IsEqTriangle(){
        if((first_length == second_length == third_length)&&(first_length!=0)) return true;
        return false;
    }
    Equilateral_Triangle(){
        if(IsEqTriangle()){
            cout << "This triangle is a equilateral triangle. " << endl;
            Triangle_Out();
        }
    }
    ~Equilateral_Triangle(){}
};
 
int main() {
    int* a = new int[5];//поменять на необходимое количество
    int* b = new int[5];
    int* c = new int[5];
    int* eq_a = new int[5];
    int* eq_b = new int[5];
    int* eq_c = new int[5];
    vector<Triangle> triangles;
    vector<Equilateral_Triangle> eq_triangles;
    for(int i=0;i<5;i++){
        cout << "a: " << endl;
        cin >> a[i];
        cout << endl;
        cout << "b: " << endl;
        cin >> b[i];
        cout << endl;
        cout << "c: " << endl;
        cin >> c[i];
        cout << endl;
        cout << "Equilateral Triangle a: ";
        cin>>eq_a[i];
        cout << endl;
        cout << "Equilateral Triangle b: ";
        cin>>eq_b[i];
        cout << endl;
        cout << "Equilateral Triangle c: ";
        cin>>eq_c[i];
        cout << endl;
        cout << "i number: " << i;
        Triangle triangle;
        triangle.first_length = a[i];
        triangle.second_length = b[i];
        triangle.third_length = c[i];
        if(triangle.IsTriangle()){
            triangles.push_back(triangle);
        }
        Equilateral_Triangle eq_triangle;
        eq_triangle.first_length = eq_a[i];
        eq_triangle.second_length = eq_b[i];
        eq_triangle.third_length = eq_c[i];
        if(eq_triangle.IsEqTriangle()){
            eq_triangles.push_back(eq_triangle);
        }
        else {
            if(eq_triangle.IsTriangle()){
                triangles.push_back(eq_triangle);
            }
        }
    }
    double S =0.0; //средняя площадь треугольников
    Equilateral_Triangle the_biggest_triangle;
    bool flag = false; //чтобы 1е пустое значение the_biggest_triangle не сравнивать с eq_triangle[0]
    for(int i=0;i<triangles.size();i++){
        triangles[i].Triangle_Out();
        S +=triangles[i].Triangle_Square();
    }
    S = S/(triangles.size()*1.0);
    for(int i=0;i<eq_triangles.size();i++){
        if(flag){
            if(the_biggest_triangle.Triangle_perimeter()<eq_triangles[i].Triangle_perimeter()){
                the_biggest_triangle = eq_triangles[i];
            }
 
            }
        else {
            the_biggest_triangle = eq_triangles[i];
            flag = true;
        }
        cout << "Equilateral triangle: " << endl;
        eq_triangles[i].Triangle_Out();
    }
    cout << " Square S: " << S;
    cout << " The biggest equilateral triangle is: " << the_biggest_triangle.Triangle_perimeter();
    cout<<endl;
    cout<<acos(1/2);
    return 0;
}
0
07.02.2022, 11:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2022, 11:39
Помогаю со студенческими работами здесь

Задача по наследованию C++
Используя родительский класс «СЛУЖАЩИЙ» породить производный класс «ДИРЕКТОР». Используя классы...

Вопрос по наследованию
Уже неоднократно перечитывал главы про наследования и все равно до конца не разобрался. Вот...

Вопрос по наследованию
Вопрос насчёт передачи аргументов в конструктор базового класса(создания временного объекта), а...

Вопросы по наследованию
Вопрос ещё по конструкторам Допустим есть система классов class A { public: ...

Непонятка по наследованию
Объясните пожалуйста такой момент. Ниже приведу код программы результат ее работы два сообщения:...

Проверка задания по наследованию
Ребят посмотрите пожалуйста: Задание: При выполнении этих заданий требуется написать законченную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru