С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89

Создать иерархию классов Figure, Rectangle (прямоугольник), Circle (круг), Trapezium (трапеция)

15.11.2021, 19:32. Показов 1367. Ответов 3

Студворк — интернет-сервис помощи студентам
Не могу до конца понять смысл задания по ООП

Дано задание: Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Создать производные классы: Rectangle (прямоугольник), Circle (круг), Trapezium (трапеция) со своими функциями площади и периметра. Самостоятельно определить, какие поля необходимы, какие из них можно создать в базовом классе, а какие – в производных. Площадь трапеции: S = (а+b)*h/2.
Всё было хорошо, до того, как прочёл эту строчку в конце: Для хранения вершин фигур использовать класс Pair с двумя элементами.
Я написал сначала программу, где пользователь вводит длины сторон фигур(для круга- радиус) и оно считало прекрасно.
Но я так понял что нужно по координатам. Есть идеи что это должно значить? Вот моя программа:
Файл "Figur.h"
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
#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <math.h>
#include <iomanip>
#include <sstream>
 
using namespace std;
 
class Figure
{
public:
    virtual double Area() = 0; //площа
    virtual double Perimeter() = 0; //периметр
    virtual string Info() = 0; //інформація про фігуру
};
//........................................................
class Circle : public Figure
{
private:
    double r; //радіус
public:
    //конструктор ініціалізації
    Circle(double r_t = 0.) : r(r_t) {}
    double Area();
    double Perimeter();
    string Info();
};
//........................................................
class Rectangle : public Figure
{
private:
    double height, weight; //Висота та ширина прямокутника
public:
    Rectangle(double height_t = 0., double weight_t = 0.) : height(height_t), weight(weight_t) {}
    double Area();
    double Perimeter();
    string Info();
};
//........................................................
class Trapezium : public Figure
{
private:
    double a, b, c, d; //Стороны трапеции. Стороны a и b параллельны.
    double h; //Высота трапеции 
 
public:
    //Конструктор ініціалізації
    Trapezium(double a_t = 0., double b_t = 0., double c_t = 0., double d_t = 0.) : a(a_t), b(b_t), c(c_t), d(d_t)
    {
        double ab = a - b;
        h = sqrt(c * c - 0.25 * pow((ab * ab + c * c - d * d) / ab, 2));
    }
 
    double Area();
    double Perimeter();
    string Info();
};
Файл "Figur.cpp"
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
#include "Figur.h"
 
double Circle:: Area()      {return M_PI * r * r;}
double Circle:: Perimeter() {return 2. * M_PI * r;}
string Circle:: Info()
{   
    ostringstream _s;
    _s << fixed;    _s << setprecision(1);
    _s << r;        string _r = _s.str();
 
    return string( "..................................................\nКоло(" ) + _r + string( "):" );
}
 
//........................................................
 
double Rectangle::Area()
{
    return height * weight;
}
double Rectangle::Perimeter()
{
    return 2. * (height + weight);
}
string Rectangle::Info()
{
    ostringstream _s,_s2;
    _s,_s2 << fixed;    _s,_s2 << setprecision(1);
    _s << height;       _s2 << weight;
    string _h = _s.str();   string _w = _s2.str();
 
    return string("..................................................\nПрямокутник(") + _w + string(" x " + _h + string(")"));
}
 
//........................................................
 
double Trapezium::Area()
{
        return ((a + b) * h) / 2;
}
 
double Trapezium::Perimeter()
{
    return a + b + c + d;
}
 
string Trapezium::Info()
{
    ostringstream _s, _s2, _s3, _s4;
    _s, _s2, _s3, _s4 << fixed; _s, _s2, _s3, _s4 << setprecision(1);
 
    _s << a;        _s2 << b;
    _s3 << c;       _s4 << d;
 
    string _a = _s.str();   string _b = _s2.str();
    string _c = _s3.str();  string _d = _s4.str();
 
    return 
        string("..................................................\nТрапецiя(") + _a +
        string(", ") + _b +
        string(", ") + _c +
        string(", ") + _d + string(")");
}
 
//........................................................
 
void PrintFigure(Figure* fig)
 
{
    cout << fixed;
    cout.precision(1);
    if (isnan(fig->Area()) || fig->Area() <= 0 || fig->Perimeter() <= 0)
        cout << fig->Info() << "\n\tФiгури не iснує\n.................................................." << endl;
    else
        cout << fig->Info() << "\n\tПлоща= " << fig->Area() << ", Периметр= " << fig->Perimeter() << "\n.................................................." << endl;
}
 
//........................................................
Main Файл:
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
#include "Figur.cpp"
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int _c1, _ra, _rb, ta, tb, tc, td;
 
    cout << "Введiть радiус кола:";
    cin >> _c1;
    cout << endl;
    Figure* c1 = new Circle(_c1);
    PrintFigure(c1);
 
    cout << "\nВведiть сторони прямокутника:" << endl;
    cout << "Сторона а: ";
    cin >> _ra;
    cout << "Сторона b: ";
    cin >> _rb;
    cout << endl;
    Figure* r1 = new Rectangle(_ra, _rb);
    PrintFigure(r1);
 
    cout << "\nВведiть сторони трапецiї(сторони а та b паралельні):" << endl;
    cout << "Сторона а: ";
    cin >> ta;
    cout << "Сторона b: ";
    cin >> tb;
    cout << "Сторона c: ";
    cin >> tc;
    cout << "Сторона d: ";
    cin >> td;
    cout << endl;
    Figure* t1 = new Trapezium(ta, tb, tc, td);
    PrintFigure(t1);
 
 
    delete c1;
    delete r1;
    delete t1;
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2021, 19:32
Ответы с готовыми решениями:

Не могу понять смысл задания.
День (утро, вечер, ночь - нужное подчеркнуть)) добрый! Взялся помочь человеку с контрольной по C и столкнулся с проблемой - не могу понять...

Не могу понять смысл задания
Определить тип заданных выражений и найти их значения. Составить систему тестов и вычислить полученное выражение для нескольких значений n...

Не могу понять смысл задания на C#/Unity
На олимпиаде по VR задали задание на языке C# (который я не знаю). Вот ссылка на само задание. Нужно написать класс, который будет...

3
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
15.11.2021, 19:40  [ТС]
Результат роботы программы прикрепил.
Миниатюры
Создать иерархию классов Figure, Rectangle (прямоугольник), Circle (круг), Trapezium (трапеция)  
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
15.11.2021, 20:36
Цитата Сообщение от McVilka Посмотреть сообщение
Для хранения вершин фигур использовать класс Pair с двумя элементами.
Цитата Сообщение от McVilka Посмотреть сообщение
Есть идеи что это должно значить?
C++
1
2
3
4
5
struct Pair
{
    double x;
    double y;
};
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
17.11.2021, 22:53  [ТС]
Это понятно.. Меня интересуют идеи реализации. Как переделать мою программу так, чтобы пользователь вводил координаты, а не сразу стороны?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2021, 22:53
Помогаю со студенческими работами здесь

Не могу понять смысл задания, что должно быть реализовано
Всем привет, задали вот такую задачу: Разработать архитектуру классов иерархии товаров при разработке системы управления потоками...

Не могу понять смысл данного задания, и написание его кода
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные — в конец с сохранением порядка следования....

помогите понять смысл задания
(*3.5) Реализуйте версии istream и ostream для чтения и записи чисел в двоич- двоичном виде без преобразования их в символы. Рассмотрите...

Не могу понять понять смысл резидентной программы
Суть препод кинул резидент, сказал чтобы сами разбирались. Увидел что ее выкладывали уже, но в ветке этой темы, там тоже не объяснили, как...

Не могу сделать полиморфизм. Не могу до конца понять пример по этому поводу
Есть такая задача: Класс Animal должен быть абстрактным, имеет имя и вес. Класс Reptile имеет habitate, который держит в себе среду...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru