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

Задача на прямоугольники С++

14.10.2011, 08:49. Показов 6243. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать класс Прямоугольник со стороной на оси ОХ.
Нужно перегрузить бинарные операторы: пересечения прямоугольников(*), объединение двух прямоугольников(+), несимметрическая разность двух прямоугольников(-). Следует учесть все специальные случаи
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
class Point{
      int X,Y;
      public:
             Point(int a=0, int b=0):X(a),Y(b){}
             ~Point(){}
             int getX()const{return X;}
             int  getY()const{return Y;}
             void print()const{cout<<"\n<"<<X<<","<<Y<<")";}
             void setx(int a) {X=a;}
             void sety(int a) {Y=a;}
             };
//объявляем класс прямоугольник
class Rect{
      Point  Left,Right;
      public:
             Rect(Point A, Point C):Left(A),Right(C){}
             Rect(int A_x, int A_y, int C_x, int C_y){
                  Left.setx(A_x); Left.sety(A_y);   
                  Right.setx(A_x);Right.sety(A_y);  
                  };
              void setLeft(Point A){Left=A;}
              void setRight(Point C){Right=C;}
      Point getLeft()const{return Left;}     
      Point getRight()const{return Right;}
      void print()const{Left.print();Right.print();}
      };
int main()
{    
system("PAUSE");
    return 0;
}
Класс я описал, а как описать функции не могу понять, подскажите хоть немного
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2011, 08:49
Ответы с готовыми решениями:

Задача про прямоугольники
Два прямоугольника заданы длинами своих сторон. Определите, можно ли уместить один из них внутри другого. Поместите на форме два...

Красивые прямоугольники
Красивые прямоугольники Урфин Джюс решил построить своих деревянных солдат в виде красивого прямоугольника. Красивым Урфин Джюс считает...

Прямоугольники и гвозди (C++)
Не могу понять суть задачи, помогите пожалуйста) На координатной плоскости задано N прямоугольников – кождый парой противоположных...

4
101 / 101 / 27
Регистрация: 10.09.2010
Сообщений: 267
14.10.2011, 09:52
Операции объединения и пересечения прямоугольников не замкнуты на множестве прямоугольников. То есть например если два прямоугольника не имеют обшей области то их объединение не есть прямоугольником. То же самое и с остальными операциями.

И для описания такого прямоугольника достаточно трех переметных, а не четырех как у вас.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2011, 09:58
Цитата Сообщение от Overmind024 Посмотреть сообщение
Операции объединения и пересечения прямоугольников не замкнуты на множестве прямоугольников
это смотря как задать эти операции
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.10.2011, 14:09
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/////////////////////////////////////////////////////////////////////////////////////////
//Нужно создать класс Прямоугольник со стороной на оси ОХ.
//Нужно перегрузить бинарные операторы: пересечения прямоугольников(*), 
//объединение двух прямоугольников(+), несимметрическая разность двух прямоугольников(-). 
//Следует учесть все специальные случаи.
/////////////////////////////////////////////////////////////////////////////////////////
#include <complex>
#include <ctime>
#include <cstdlib>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::complex<int>  T_point;
/////////////////////////////////////////////////////////////////////////////////////////
class  T_rect
{
    int  x_;
    int  Ax_;
    int  Ay_;
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    T_rect
        (
            int  x,
            int  Ax,
            int  Ay
        )
        :
        x_   (x),
        Ax_  (Ax),
        Ay_  (Ay)
    {}
    //-----------------------------------------------------------------------------------
    bool  empty() const
    {
        return      Ax_ <= 0
                ||  Ay_ <= 0;
    }
    //-----------------------------------------------------------------------------------
    void  print() const
    {
        if( empty() )
        {
            std::cout << "<empty rect>";
        }
        else
        {
            std::cout << "<"
                      << x_
                      << ","
                      << T_point(Ax_, Ay_)
                      << ">";
        }
    }
    //-----------------------------------------------------------------------------------
    T_rect  operator*(const T_rect&  r)
    {
        if( r.empty () )    return  r;
        if( empty   () )    return  *this;
        int  x_left_res   = std::max( x_left (),  r.x_left () );
        int  x_right_res  = std::min( x_right(),  r.x_right() );
        int  Ay_res       = std::min( Ay_      ,  r.Ay_       );
 
        return  T_rect
                    ( 
                        x_left_res,
                        x_right_res - x_left_res,
                        Ay_res
                    );
    }
    //-----------------------------------------------------------------------------------
    T_rect  operator+(const T_rect&  r)
    {
        if( empty   () )    return  r;
        if( r.empty () )    return  *this;        
        int  x_left_res   = std::min( x_left (),  r.x_left () );
        int  x_right_res  = std::max( x_right(),  r.x_right() );
        int  Ay_res       = std::max( Ay_      ,  r.Ay_       );
 
        return  T_rect
                    ( 
                        x_left_res,
                        x_right_res - x_left_res,
                        Ay_res
                    );
    }
    //-----------------------------------------------------------------------------------
    T_rect  operator-(const T_rect&  r)
    {
        if( (*this * r).empty() )
        {
            return  *this;
        }
        
        int     x_left_res    = x_left(); 
        int     x_right_res   = x_right();
        T_rect  intersection  = *this * r;        
 
        if( x_left_res == intersection.x_left() )
        {
            x_left_res = intersection.x_right();
        }
        
        if( x_right_res == intersection.x_right() )
        {
            x_right_res = intersection.x_left();
        }       
 
        return  T_rect
                    ( 
                        x_left_res,
                        x_right_res - x_left_res,
                        Ay_
                    );
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    int  x_left() const
    {
        return  x_;
    }
    //-----------------------------------------------------------------------------------
    int  x_right() const
    {
        return  x_ + Ax_;
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
int  get_plus_minus_from_1_to(int  a)
{
    return  ( rand() % a + 1 ) * ( rand() % 10 ? 1 : -1 );
}
/////////////////////////////////////////////////////////////////////////////////////////
T_rect  get_rand_rect(int  a)
{
    return  T_rect
                ( 
                    get_plus_minus_from_1_to(a), 
                    get_plus_minus_from_1_to(a), 
                    get_plus_minus_from_1_to(a) 
                );
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    srand(unsigned(time(0)));
    T_rect  A = get_rand_rect(5);
    std::cout << "A: ";
    A.print();
    std::cout << std::endl;
 
    T_rect  B = get_rand_rect(5);
    std::cout << "B: ";
    B.print();
    std::cout << std::endl;
 
    T_rect  C = A * B;
    std::cout << "A * B: ";
    C.print();
    std::cout << std::endl;
 
    T_rect  CC = A + B;
    std::cout << "A + B: ";
    CC.print();
    std::cout << std::endl;
 
    T_rect  CCC = A - B;
    std::cout << "A - B: ";
    CCC.print();
    std::cout << std::endl;
}
0
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 16
18.10.2011, 09:47  [ТС]
можно написать комментарии к функциям когда мы перегружаем операторы, а то не понятно многое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2011, 09:47
Помогаю со студенческими работами здесь

Нарисовать прямоугольники
Помогите пожалуйста!!! есть 10 точек , координаты и радиус каждой( x y radius) которые заданы в двумерном массиве; 12 43 54 34 34...

Отрезаем прямоугольники
Нужно реализовать в Pascal. Что бы были входные(1.in) и выходные(1.out) данные. ) создать .ехе файл Отрезаем прямоугольники ...

Вписанные прямоугольники
Даны 2 прямоугольника. Определить можно ли вписать один в другой. Пример 1 10 вписать в 9 9 возможно. Делал так: надо их диагонали...

Прямоугольники на плоскости
Объединил аттачи и текст сообщения во втором посте

Подобные прямоугольники
Прежде чем задать вопрос, я опишу решение для частного случая многоугольника. А именно для квадрата. 1. Задан квадрат со стороной...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
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