Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / с++ Не могу решить задание / 8 сообщений из 8, страница 1 из 1
08.04.2021, 13:00
    #40060666
Knicks12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
Здравствуйте, помогите пожалуйста решить задание. 4 дня потратил, ничего толком не выходит.

Составить описание класса прямоугольников со сторонами, параллельными осям координат (должен задаваться координатами центра, длинной ширины и высоты). Предусмотреть методы для создания объекта данного класса, изменения его размеров и отображение координат его вершин на консоли. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
...
Рейтинг: 0 / 0
08.04.2021, 13:11
    #40060672
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
А что именно не получается? Продемонстрируйте исходный код с вашими попытками.
...
Рейтинг: 0 / 0
08.04.2021, 13:52
    #40060688
Knicks12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
Aklin, вот код. Выводит 3 ошибки
Код: 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;
}
...
Рейтинг: 0 / 0
08.04.2021, 16:05
    #40060760
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
Knicks12,

Там откуда ты копировал код посмеялись, заменили английскую С на русскую С.

А так все компилируется
...
Рейтинг: 0 / 0
09.04.2021, 04:38
    #40060872
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
Knicks12
Код: plaintext
1.
#include <Windows.h>

Это не нужно, потому что вы не используете WinAPI.

Knicks12
Код: 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.
    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;
    }

В switch-е надо break-и писать, иначе будет «проваливание» (fall through) в следующий case. И тут скорее цикл надо делать:
Код: 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.
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;
}
...
Рейтинг: 0 / 0
09.04.2021, 11:48
    #40060963
xerxf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
Knicks12

Составить описание класса прямоугольников со сторонами, параллельными осям координат (должен задаваться координатами центра, длинной ширины и высоты).

мне одному кажется, что в программе прямоугольник задаётся координатами вершин, а не тем, что просят в задание?
...
Рейтинг: 0 / 0
09.04.2021, 11:53
    #40060964
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
Этого будет достаточно для описания данных о прямоугольнике на плоскости.


Код: plaintext
1.
2.
3.
4.
5.
6.
class Rectangle {
private:
    double x, y; // Center
    double w; // Width
    double h; // Height
    ....
...
Рейтинг: 0 / 0
09.04.2021, 11:54
    #40060965
xerxf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++ Не могу решить задание
ну и перемещение и изменение размеров ничего никуда не перемещает и не изменяет. просто выодит координаты, которые могли бы быть, если бы переместили и изменили.
И нафига dx, dy, r вынесено на уровень класса?
В общем - гуглом тоже нужно уметь пользоатья и списывая программу хотя бы понимать, что она делает и насколько соответствует тому, что нужно
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / с++ Не могу решить задание / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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