Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / C++ |
![]() ![]() |
Knicks12 Member Откуда: Сообщений: 6 |
Здравствуйте, помогите пожалуйста решить задание. 4 дня потратил, ничего толком не выходит. Составить описание класса прямоугольников со сторонами, параллельными осям координат (должен задаваться координатами центра, длинной ширины и высоты). Предусмотреть методы для создания объекта данного класса, изменения его размеров и отображение координат его вершин на консоли. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. |
8 апр 21, 13:00 [22305921] Ответить | Цитировать Сообщить модератору |
Aklin Member Откуда: Прямо сейчас меня здесь нет Сообщений: 61625 |
А что именно не получается? Продемонстрируйте исходный код с вашими попытками. |
8 апр 21, 13:11 [22305927] Ответить | Цитировать Сообщить модератору |
Knicks12 Member Откуда: Сообщений: 6 |
Aklin, вот код. Выводит 3 ошибки#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; } Сообщение было отредактировано: 8 апр 21, 15:04 |
8 апр 21, 13:52 [22305954] Ответить | Цитировать Сообщить модератору |
Siemargl Member Откуда: 010100 Сообщений: 6422 |
Knicks12, Там откуда ты копировал код посмеялись, заменили английскую С на русскую С. А так все компилируется Сообщение было отредактировано: 8 апр 21, 15:58 |
8 апр 21, 16:05 [22306044] Ответить | Цитировать Сообщить модератору |
Пётр Седов Member Откуда: Санкт-Петербург Сообщений: 700 |
int main() { ... Rectangle ObjectA; for (;;) { // цикл cout << ">"; char Control; cin >> Control; switch (Control) { case '1': ObjectA.Input(); break; // выход из switch-а case '2': ObjectA.Result(); break; case '3': ObjectA.Peremeshenie(); break; case '4': ObjectA.Size(); break; case '5': ObjectA.Minimal(); break; case '6': ObjectA.Cross(); break; default: goto out_of_loop; // выход из цикла for } } out_of_loop: system("pause"); return 0; } |
||||||||
9 апр 21, 04:38 [22306248] Ответить | Цитировать Сообщить модератору |
xerxf Member Откуда: Сообщений: 211 |
мне одному кажется, что в программе прямоугольник задаётся координатами вершин, а не тем, что просят в задание? |
||||
9 апр 21, 11:48 [22306364] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51016 |
Этого будет достаточно для описания данных о прямоугольнике на плоскости.class Rectangle { private: double x, y; // Center double w; // Width double h; // Height .... |
9 апр 21, 11:53 [22306366] Ответить | Цитировать Сообщить модератору |
xerxf Member Откуда: Сообщений: 211 |
ну и перемещение и изменение размеров ничего никуда не перемещает и не изменяет. просто выодит координаты, которые могли бы быть, если бы переместили и изменили. И нафига dx, dy, r вынесено на уровень класса? В общем - гуглом тоже нужно уметь пользоатья и списывая программу хотя бы понимать, что она делает и насколько соответствует тому, что нужно |
9 апр 21, 11:54 [22306367] Ответить | Цитировать Сообщить модератору |
Все форумы / C++ | ![]() |