Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Составить описание класса прямоугольников со сторонами, параллельными осям координат. / 13 сообщений из 13, страница 1 из 1
14.11.2018, 17:53
    #39733146
Gomn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Добрый вечер!!! Помогите разобраться с задачей: Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Предусмотреть возможность перемещения прямоугольников на плоскости, изменение размеров, построение наименьшего прямоугольника,
содержащего две заданных прямоугольника и прямоугольника, являющегося общей частью(пересечением) двух прямоугольников.
Написать программу, демонстрирующую работу с этим классом.
Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Я написал код, но выводит ошибки, подскажите, как исправить?
Код: plaintext
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.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
class Rectangle {
    private:
        double x1, x2, y1, y2, dx, dy, r;
    public:
        // Конструктор с 4 параметрами
        Rectangle(double a, double b, double c, double d) : x1(a), x2(b), y1(c), y2(d)  {   }
        // Конструктор по умолчанию
        Rectangle(): x1(2), x2(5), y1(2), y2(0) {   }
        ~Rectangle() { } // Деструктор
 
        void Input(); // метод ввода с клавиатуры
        void Result(); // метод вывода на экран
        void Peremeshenie(); // перемещение
        void Size(); // изменение размера
        void Minimal(); // построение минимального
        void Сross(); // пересечение 2 прямоугольников
};
 
void Rectangle::Input() {
    cout << "Введите координату х левых точек" << endl; cin >> x1;
    cout << "Введите координату y верхних точек" << endl; cin >> y1;
    cout << "Введите координату х правых точек" << endl; cin >> x2;
    cout << "Введите координату y нижних точек" << endl; cin >> y2;
}
 
void Rectangle::Result() {
    cout << "Вы ввели следующие координаты прямоугольника:" << endl;
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2 << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2 << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;
}
 
void Rectangle::Peremeshenie() {
    cout << " На сколько единиц вы хотите переместить прямоугольник по оси X ?" << endl;
    cin >> dx;
    cout << " На сколько единиц вы хотите переместить прямоугольник по оси Y ?" << endl;
    cin >> dy;
    cout << "Получились следующие координаты прямоугольника:" << endl;
    cout << " A:" << "(" << x1+dx << "," << y1+dy << ")" << endl;
    cout << " B:" << "(" << x2+dx << "," << y1+dy << ")" << endl;
    cout << " C:" << "(" << x2+dx << "," << y2+dy << ")" << endl;
    cout << " D:" << "(" << x1+dx << "," << y2+dy << ")" << endl;
}
 
void Rectangle::Size() {
    cout << " Во сколько раз изменяем размер прямоугольника ?" << endl;
    cin >> r;
    cout << "Получились следующие координаты прямоугольника:" << endl;
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2*r << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2*r << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;
 
}
 
void Rectangle::Minimal() {
    double x3 , x4 , y3 , y4 , x_min = x1, x_max = x1, y_min = y1,y_max = y1;
    cout << " 2 прямоугольник:" << endl;
    cout << "Введите координату х левых точек" << endl; cin >> x3;
    cout << "Введите координату y верхних точек" << endl; cin >> y3;
    cout << "Введите координату х правых точек" << endl; cin >> x4;
    cout << "Введите координату y нижних точек" << endl; cin >> y4;
    cout << endl << "Вы ввели следующие координаты 1 прямоугольника:" << endl;
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2 << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2 << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;
    cout << endl;
    cout << "Вы ввели следующие координаты 2 прямоугольника:" << endl;
    cout << " A:" << "(" << x3 << "," << y3 << ")" << endl;
    cout << " B:" << "(" << x4 << "," << y3 << ")" << endl;
    cout << " C:" << "(" << x4 << "," << y4 << ")" << endl;
    cout << " D:" << "(" << x3 << "," << y4 << ")" << endl;
    cout << endl;
    double A[4]= {x1,x2,x3,x4}, B[4]= {y1,y2,y3,y4};
    for(int i = 0; i < 4; i ++)
    {
        if(x_max < A[i])
        {
            x_max = A[i];
        }
        if(y_max < B[i])
        {
            y_max = B[i];
        }
        if(x_min > A[i])
        {
            x_min = A[i];
        }
        if(y_min > B[i])
        {
            y_min = B[i];
        }
    }
    cout <<" Наименьший прямоугольник содержащий оба предыдущих имеет следующие координаты: " << endl;
    cout << " A:" << "(" << x_min << "," << y_max << ")" << endl;
    cout << " B:" << "(" << x_max << "," << y_max << ")" << endl;
    cout << " C:" << "(" << x_max << "," << y_min << ")" << endl;
    cout << " D:" << "(" << x_min << "," << y_min << ")" << endl;
}
 
void Rectangle::Сross() {
    double x3 , x4 , y3 , y4 , x_min = x1, x_max = x1, y_min = y1,y_max = y1, x1_sred,x2_sred,y1_sred,y2_sred;
    cout << " 2 прямоугольник:" << endl;
    cout << "Введите координату х левых точек" << endl; cin >> x3;
    cout << "Введите координату y верхних точек" << endl; cin >> y3;
    cout << "Введите координату х правых точек" << endl;    cin >> x4;
    cout << "Введите координату y нижних точек" << endl;    cin >> y4;
    cout << endl;
    cout << "Вы ввели следующие координаты 1 прямоугольника:" << endl;
    cout << " A:" << "(" << x1 << "," << y1 << ")" << endl;
    cout << " B:" << "(" << x2 << "," << y1 << ")" << endl;
    cout << " C:" << "(" << x2 << "," << y2 << ")" << endl;
    cout << " D:" << "(" << x1 << "," << y2 << ")" << endl;
    cout << endl;
    cout << "Вы ввели следующие координаты 2 прямоугольника:" << endl;
    cout << " A:" << "(" << x3 << "," << y3 << ")" << endl;
    cout << " B:" << "(" << x4 << "," << y3 << ")" << endl;
    cout << " C:" << "(" << x4 << "," << y4 << ")" << endl;
    cout << " D:" << "(" << x3 << "," << y4 << ")" << endl;
    cout << endl;
    double A[4]= {x1,x2,x3,x4}, B[4]= {y1,y2,y3,y4};
    for(int i = 0; i < 4; i ++)
    {
        if(x_max < A[i])
        {
            x_max = A[i];
        }
        if(y_max < B[i])
        {
            y_max = B[i];
        }
        if(x_min > A[i])
        {
            x_min = A[i];
        }
        if(y_min > B[i])
        {
            y_min = B[i];
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((A[i] != x_max) && (A[i] != x_min))
        {
            x1_sred = A[i];
            break;
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((A[i] != x_max) && (A[i] != x_min) && (A[i] != x1_sred))
        {
            x2_sred = A[i];
            break;
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((B[i] != y_max) && (B[i] != y_min))
        {
            y1_sred = B[i];
            break;
        }
    }
    for(int i = 0; i < 4; i ++)
    {
        if((B[i] != y_max) && (B[i] != y_min) && (B[i] != y1_sred))
        {
            y2_sred = B[i];
            break;
        }
    }
        cout <<" Прямоугольник на пересечении двух предыдущих имеет следущие координаты: " << endl;
        cout << " A:" << "(" << x1_sred << "," << y2_sred << ")" << endl;
        cout << " B:" << "(" << x2_sred << "," << y2_sred << ")" << endl;
        cout << " C:" << "(" << x2_sred << "," << y1_sred << ")" << endl;
        cout << " D:" << "(" << x1_sred << "," << y1_sred << ")" << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "1 - Ввод данных \n 2 - Вывод \n 3 - Перемещение \n 4 - Изменение размера\n"
        " 5 - Минимальный прямоугольник содержащий 2 заданных\n 6 - Прямоугольник получившийся на пересечении 2 заданных\n 0 - выход\n" << endl;
    Rectangle ObjectA; // Создаем объект без параметров, то есть будет использован конструктор по умолчанию
    char Control;
        cout << ">";
        cin >> Control;
        switch (Control)
        {
            case '1': 
                ObjectA.Input();
                cout << ">";
                cin >> Control;
            case '2': 
                ObjectA.Result();
                cout << ">";
                cin >> Control;
            case '3': 
                ObjectA.Peremeshenie();
                cout << ">";
                cin >> Control;
            case '4': 
                ObjectA.Size();
                cout << ">";
                cin >> Control;
            case '5': 
                ObjectA.Minimal();
                cout << ">";
                cin >> Control;
            case '6': 
                ObjectA.Сross();
                cout << ">";
                cin >> Control;
            case '0': break;
        }
            system("pause");
            return 0;
}


error C2146: syntax error : missing ';' before identifier 'ObjectA'
warning C4551: function call missing argument list
error C2065: 'ObjectA' : undeclared identifier
error C2065: 'ObjectA' : undeclared identifier
error C2228: left of '.Input' must have class/struct/union
error C2065: 'ObjectA' : undeclared identifier
error C2228: left of '.Result' must have class/struct/union
type is ''unknown-type''
error C2065: 'ObjectA' : undeclared identifier
error C2228: left of '.Peremeshenie' must have class/struct/union
type is ''unknown-type''
error C2065: 'ObjectA' : undeclared identifier
error C2228: left of '.Size' must have class/struct/union
type is ''unknown-type''
error C2065: 'ObjectA' : undeclared identifier
error C2228: left of '.Minimal' must have class/struct/union
type is ''unknown-type''
error C2065: 'ObjectA' : undeclared identifier
error C2228: left of '.Сross' must have class/struct/union
type is ''unknown-type''
...
Рейтинг: 0 / 0
14.11.2018, 18:27
    #39733163
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Gomn,

Видимо, нужно добавить точку с запятой после тела конструкторов:
Код: plaintext
1.
2.
        Rectangle(double a, double b, double c, double d) : x1(a), x2(b), y1(c), y2(d)  {   };
        Rectangle(): x1(2), x2(5), y1(2), y2(0) {   };
...
Рейтинг: 0 / 0
14.11.2018, 18:39
    #39733177
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Не, проблема в использовании идентификатора Rectangle где-то ранее.
...
Рейтинг: 0 / 0
14.11.2018, 18:43
    #39733179
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
В windows.h объявляется функция Rectangle.
Использовать соответственно надо указывая что именно используется - функция или класс:
Код: plaintext
1.
class Rectangle ObjectA;


Ну или использовать свою область имен.
...
Рейтинг: 0 / 0
14.11.2018, 18:46
    #39733183
Gomn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
ну я, а как сделать изменение размера с использованием dx и dy?
...
Рейтинг: 0 / 0
15.11.2018, 00:34
    #39733269
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Gomn,

В этом классе значения dx и dy мусорные, не инициализируются в конструкторах и через параметры новые значения не принимаются.

А если под увеличением размера понимать смещение стороны то нужно смотреть куда смотрят оси. В математике x вправо y вверх, в машграфике x вправо y вниз, в геодезии x вверх y вправо.
Ну и видимо что-то вроде
x2 += dx;
...
Рейтинг: 0 / 0
15.11.2018, 00:42
    #39733271
Gomn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
ну я, понял вас, спасибо за ответ
...
Рейтинг: 0 / 0
18.11.2018, 21:56
    #39734861
Gomn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Gomn, а функцию наименьшего прямоугольника правильно записал?
просто у меня выводит не те координаты:
...
Рейтинг: 0 / 0
30.11.2018, 16:12
    #39741068
Gomn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Gomn, извините не могли бы вы подкорректировать мой код, надо изменить конструктор, так, чтобы я ввел две координаты, а остальные он сам считал
...
Рейтинг: 0 / 0
30.11.2018, 16:36
    #39741107
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
GomnGomn, извините не могли бы вы ...
Забавно читать общение с самим-собою :)

Не надо давить ссылку "Ответить" под постом, это генерит новый пост с обращением к автору того поста.
Если хочешь просто новый пост написать, то кнопка "Ответить" находится справа внизу и вверху.
Ну или просто сотри лишний текст.
...
Рейтинг: 0 / 0
30.11.2018, 16:38
    #39741112
Gomn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
учту
...
Рейтинг: 0 / 0
01.12.2018, 05:44
    #39741349
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
у меня на линухе заработал, только пришлось заменить 3 слова 'Cross', потому что там 'C' русское походу

эту часть надо в .h:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Rectangle {
    private:
        double x1, x2, y1, y2, dx, dy, r;
    public:
        // Конструктор с 4 параметрами
        Rectangle(double a, double b, double c, double d) : x1(a), x2(b), y1(c), y2(d)  {   }
        // Конструктор по умолчанию
        Rectangle(): x1(2), x2(5), y1(2), y2(0) {   }
        ~Rectangle() { } // Деструктор
 
        void Input(); // метод ввода с клавиатуры
        void Result(); // метод вывода на экран
        void Peremeshenie(); // перемещение
        void Size(); // изменение размера
        void Minimal(); // построение минимального
        void Сross(); // пересечение 2 прямоугольников
};



вместо cout лучше printf(), когда столько вставок
читаемость лучше и проще сопровождать.

вместо массивов надо юзать vector.

гору if-ов лучше так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    for(int i = 0; i < 4; i++)
    {
        if (x_max < A[i])  {x_max = A[i];}
        if (y_max < B[i])  {y_max = B[i];}
        if (x_min > A[i])  {x_min = A[i];}
        if (y_min > B[i])  {y_min = B[i];}
    }



а ещё там несколько одинаковых for, за которые снизят оценку.
...
Рейтинг: 0 / 0
01.12.2018, 07:46
    #39741351
Gomn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
полудух, спасибо конечно, но мне нужен изменить конструктор так, чтобы ввести "диагональные" вершины, а дальше - одна получается изменением х, вторая - у.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Составить описание класса прямоугольников со сторонами, параллельными осям координат. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]