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

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

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

А так все компилируется
...
Рейтинг: 0 / 0
с++ Не могу решить задание
    #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
с++ Не могу решить задание
    #40060963
xerxf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Knicks12

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

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


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


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