Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
3 / 3 / 0
Регистрация: 02.04.2017
Сообщений: 273

Класс-контейнер на основе бинарного дерева, содержащий квадраты,

17.09.2017, 17:47. Показов 3035. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо спроектировать и запрограммировать на языке C++ класс-контейнер (бинарное дерево),
содержащее квадрат.
Класс-контейнер должен соджержать объекты фигур “по значению”(не по ссылке).
Класс-контейнер должен иметь метод по добавлению/получению/удалению фигуры из контейнера,
должен иметь перегруженный оператор по выводу контейнера в поток std::ostream (<<) и деструктор.


Не буду прикреплять сами функции. Важно узнать как доделать дерево, чего не хватает?
Квадрат
Bash
1
square.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
#ifndef SQUARE_H
#define SQUARE_H
 
#include <iostream>
#include "figure.h"
 
class Square : public Figure
{
public:
    Square();                      
    Square(std::istream& is);
    Square(size_t i);
 
    void print() const override;
    double area() const override;
 
    Square& operator = (const Square& other); //оператор копирования для классов фигур
    bool operator == (const Square& other) const; //оператор сравнения для классов фигур
 
    friend std::ostream& operator << (std::ostream& os, const Square& square); //переопределенный оператор вывода в поток   
    friend std::istream& operator >> (std::istream& is, Square& square); //ввода
private:
    double m_side;
};
 
#endif
Элемент дерева
Bash
1
btree_item.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
#ifndef BTREE_ITEM_H
#define BTREE_ITEM_H
 
#include "square.h"
 
class BTreeItem
{
public:
BTreeItem(const Square& square);
friend std::ostream& operator<<(std::ostream& os, const Square& obj); 
 
 
void setLeft(BTreeItem* left); //добавить в левое поддерево
void setRight(BTreeItem* right);
BTreeItem* getLeft();
BTreeItem* getRight();
Square getSquare() const;
virtual ~BtreeIteml();
virtual ~BtreeItemr();
 
 
 
private:
Square m_square;
QueueItem* m_left;
QueueItem* m_right;
};
 
#endif
И дерево
Bash
1
Btree.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
#ifndef BTREE_H
#define BTREE_H
 
#include "btree_item.h"
class Btree
{
public:
    Btree();
    ~Btree();
    
    void push(const Square& square);
    void pop();
    unsigned int size() const;
    
 
    friend std::ostream& operator << (std::ostream& os, const Btree& Btree);
 
    
private:
//?
}
 
#endif
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2017, 17:47
Ответы с готовыми решениями:

Реализация многочлена (класс на основе списка, бинарного или сбалансированного дерева)
Здравствуйте! Скоро сдавать зачет и препод скорее всего попросит написать на листочке реализацию многочлена с помощью класса на основе...

Построение бинарного дерева на основе не бинарного
В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще...

Словарь на основе бинарного дерева
Объясните, пожалуйста, что делает программа в функциях push и как осуществляется поиск, не совсем понимаю, для чего нужны l,r. Получается ,...

6
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
17.09.2017, 18:33
Цитата Сообщение от Key27 Посмотреть сообщение
чего не хватает
Не хватает смысла. Зачем хранить в дереве квадрат?
Дерево обычно хранит иерархически организованные данные. Пока не понятно, что это за квадрат и как его иерархически организовать.
Имеет смысл например взять прямоугольник, потом разбивать его на меньшие прямоугольники, чередуя координаты. Например в задаче поиска на плоскости такая структура часто применяется. Тогда у узла должен быть метод для его разбиения.
0
3 / 3 / 0
Регистрация: 02.04.2017
Сообщений: 273
17.09.2017, 19:01  [ТС]
woldemas, вопрос, к сожалению, не в этом. Выше я привел точную формулировку задания. Скорее всего смысл в том, чтобы научиться создавать динамические структуры и работать с объектами, передаваемыми по значению. Ничего больше.
0
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
17.09.2017, 19:39
Лучший ответ Сообщение было отмечено Key27 как решение

Решение

C++
1
2
virtual ~BtreeIteml();
virtual ~BtreeItemr();
это что такое? вы же пробовали это компилировать и запускать, да?
в остальном выглядит ок на первый взгляд.
хотя нет. неясно кто за жизнь создаваемых итемов отвечает. кто их удалять будет.
если внутри btree это будет происходить, то в него надо втыкать конструктор копирования и operator =. или запрещять их явно.

Добавлено через 6 минут
вместо вопросика нужен BTreeItem. По значению или ссылке. Как хотите. Для втыкания квадрата в дерево, нужно определится с признаком, куда втыкать этот квадрат. Если абы куда - то признак не нужен. Если это сбалансированное дерево, или как там они называются, то в качестве этого признака обычно выступает operartor <, который надо реализовать у квадрата.
1
3 / 3 / 0
Регистрация: 02.04.2017
Сообщений: 273
17.09.2017, 21:12  [ТС]
Цитата Сообщение от DU3 Посмотреть сообщение
это что такое? вы же пробовали это компилировать и запускать, да?
в остальном выглядит ок на первый взгляд.
хотя нет. неясно кто за жизнь создаваемых итемов отвечает. кто их удалять будет.
если внутри btree это будет происходить, то в него надо втыкать конструктор копирования и operator =. или запрещять их явно.
Да, как раз этим сейчас и занимаюсь.

Цитата Сообщение от DU3 Посмотреть сообщение
вместо вопросика нужен BTreeItem. По значению или ссылке. Как хотите.
Спасибо большое!!!

Добавлено через 55 минут
Цитата Сообщение от DU3 Посмотреть сообщение
вместо вопросика нужен BTreeItem.
И все-таки не совсем понял. Нужно
C++
1
2
BTreeItem* m_left;
BTreeItem* m_right;
?
Как и в самих item'ах?

Добавлено через 27 минут
А может даже и корень еще нужно. Не могу разобраться в этом моменте. Не подскажете?
0
3 / 3 / 0
Регистрация: 02.04.2017
Сообщений: 273
18.09.2017, 21:38  [ТС]
DU3, очень нужна ваша подсказка. Как я понимаю,на месте строки 20 должно быть?
C++
1
2
3
BTreeItem* m_left;
BTreeItem* m_right;
BTreeItem* root;
0
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
19.09.2017, 18:36
Лучший ответ Сообщение было отмечено Key27 как решение

Решение

root внутри себя имеет указатели на лево и на право. поэтому достаточно только рута.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2017, 18:36
Помогаю со студенческими работами здесь

Максимальный элемент на основе бинарного дерева
вопрос жизни и смерти нужно найти максимальный элемент на основе(или основании) бинарного дерева

Хранение и распознавание слов на основе бинарного дерева
Здравствуйте. Помогите решить задачи. На языке C ++ с использованием ООП реализовать задачи: 1) Динамический контейнер, позволяющий...

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

Однонаправленный линейный список. Формирование на его основе бинарного дерева
Нужно создать однонаправленный линейный список(элементы списка вводятся с клавиатуры и имеют свои ключи(целое без знака с произвольным...

QT. Реализовать программу, которая будет хранить и распознавать слова на основе бинарного дерева
Интерфейс основного класса должен содержать методы для добавления и распознавание указанных слов. Каждый узел дерева представляет собой...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru