powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Составить описание класса прямоугольников со сторонами, параллельными осям координат.
13 сообщений из 13, страница 1 из 1
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
    #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
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
    #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
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
    #39733177
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, проблема в использовании идентификатора Rectangle где-то ранее.
...
Рейтинг: 0 / 0
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
    #39733179
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В windows.h объявляется функция Rectangle.
Использовать соответственно надо указывая что именно используется - функция или класс:
Код: plaintext
1.
class Rectangle ObjectA;


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

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

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

Не надо давить ссылку "Ответить" под постом, это генерит новый пост с обращением к автору того поста.
Если хочешь просто новый пост написать, то кнопка "Ответить" находится справа внизу и вверху.
Ну или просто сотри лишний текст.
...
Рейтинг: 0 / 0
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
    #39741112
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
учту
...
Рейтинг: 0 / 0
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
    #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
Составить описание класса прямоугольников со сторонами, параллельными осям координат.
    #39741351
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудух, спасибо конечно, но мне нужен изменить конструктор так, чтобы ввести "диагональные" вершины, а дальше - одна получается изменением х, вторая - у.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Составить описание класса прямоугольников со сторонами, параллельными осям координат.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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