Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 16.09.2019
Сообщений: 24

Описать класс прямоугольников

02.10.2019, 22:03. Показов 5656. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Тут задание замечательное по лабе дали: Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность перемещения прямоугольников на плоскости, изменение размеров, построение наименьшего прямоугольника, содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников. Необходимо написать программу с описанием простейшего класса со следующими элементами: полями, конструкторами, свойствами. Обработка информации должна, как и ранее, осуществляться в классе, создаваемом системой по умолчанию в пространстве имен namespace ConsoleApplication1 в методе Main().
Как описать этот класс, не рисуя прямоугольники? У меня есть мысль, что можно просто использовать размеры сторон прям-ков, но вот где вообще хз, как делать - "построение наименьшего прямоугольника, содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников". Помогите, пожалуйста, написать программу, или хотя бы подскажите, как реализовать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2019, 22:03
Ответы с готовыми решениями:

Описать класс прямоугольников
Опишите класс прямоугольников Rect с двумя конструкторами. Задайте функцию проверяющую ,является ли прямоугольник квадратом .Перегрузите...

Описать базовый класс Point. Описать класс Прямоугольник от класса Point
Описать базовый класс Point - точка. Описать класс "прямоугольник". Обязательные поля класса "Прямоугольник": - имя...

Описать базовый класс колоды карт и производный класс пасьянс
Здраствуйте! товарищи-программисты, помогите пожалуйста со следующим заданием: Создать колоду карт. Конструкторы колоды должны...

3
 Аватар для Aferuga
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
03.10.2019, 07:40
Цитата Сообщение от Qaqoyto Посмотреть сообщение
Как описать этот класс, не рисуя прямоугольники?
Нужны всего 2 x и 2 y, а также возможно понадобится ширина и высота.
Цитата Сообщение от Qaqoyto Посмотреть сообщение
построение наименьшего прямоугольника, содержащего два заданных прямоугольника
Найти для двух прямоугольников макс/мин x/y и из получившихся координат составить прямоугольник.
Цитата Сообщение от Qaqoyto Посмотреть сообщение
прямоугольника, являющегося общей частью (пересечением) двух прямоугольников
Тут чуть сложнее потому что сперва нужно определить есть ли вообще пересечение:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
private bool HasIntersect(Rectangle r1, Rectangle r2){
  if(r1.xmin > r2.xmax || r1.xmax < r2.xmin || r1.ymax < r2.ymin || r1.ymin > r2.ymax) return false;
  return true;
}

а потом получить координаты которые либо совпадают, либо не попали в максимум и минимум из предыдущего задания.
1
0 / 0 / 0
Регистрация: 16.09.2019
Сообщений: 24
29.10.2019, 21:54  [ТС]
пользуйтесь. Только удалите сначала лишнее.
C#
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
namespace _12_laba
{
    class Prgnk
    {
        private int X1, Y1, X2, Y2, X3, Y3;
        public Prgnk(string a)
        {
            Console.WriteLine(a);
        }
        public Prgnk()
        {
            
        }
        public int X { get; set; }
        public int Y { get; set; }
        public int S { get; set; }
        public int V { get; set; }
        public Prgnk(int x, int y, int s, int v)
        {
            X = x;
            Y = y;
            X1 = x;
            Y1= y + v;
            X2 = x + s;
            Y2 = y+v;
            X3 = x + s;
            Y3 = y;
            S = s;
            V = v;
        }
        public new string ToString()
        {
            return string.Format("A({0},{1}); B({2},{3}); C({4},{5}); D({6},{7}); высота:{8}; ширина:{9}", X, Y, X1, Y1, X2, Y2, X3, Y3, S, V);
        }
        public void Action(int x, int y) 
        {
            Console.WriteLine("Перемещаю...");
            X += x;
            Y += y;
            X1 +=x;
            Y1 += y;
            X2 += x;
            Y2 += y;
            X3 += x;
            Y3 += y;
            Console.WriteLine("Готово! ");
        }
        // тут перегрузка оператора для создания большого пр-ка из двух заданных пр-гов (можно удалить для этой лабы)
        public static Prgnk operator+ (Prgnk p1, Prgnk p2) 
        {
            Console.WriteLine("Леплю большой прямоугольник из двух заданных...");
            int x = p1.X + p2.X;
            int y = p1.Y + p2.Y;
            int s = p1.S + p2.S;
            int v = p1.V + p2.V;
            Prgnk res = new Prgnk (x,y,v,s);
            Console.WriteLine("Готово! " +  res);
            return null;
 
        }
        // объединение пр-ков
        public static void Action(Prgnk a, Prgnk b)
        {
            Console.WriteLine("Объединяю прямоугольники...");
            int Ax = Math.Min(a.X, b.X);
            int Ay = Math.Min(a.Y, b.Y);
            int Bx = Math.Min(a.X1, b.X1);
            int By = Math.Max(a.Y1, b.Y1);
            int Cx = Math.Max(a.X2, b.X2);
            int Cy = Math.Max(a.Y2, b.Y2);
            int Dx = Math.Max(a.X3, b.X3);
            int Dy = Math.Min(a.Y3, b.Y3);
            int Visota = By - Ay;
            int Shirina = Cx - Bx;
            Console.WriteLine("Минимальный прямоугольник, который содержит в себе два заданных пр-ника: A({0}, {1}), B({2}, {3}), C({4}, {5}), D({6}, {7}), Высота = {8}, Ширина = {9};", Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,Visota,Shirina);
        }
 
    }
    class Program
    {
        static void Main(string[] args)
        {
            Prgnk start = new Prgnk("Hello Freundo."); //отсылка к "старикам тут не место"
 
            // первый пр-ник
            Console.WriteLine("Введите точку А (это будет нижняя левая точка, все остальные точки строятся по часовой стрелке), а также высоту и ширину прямоугольника");
            Console.Write("x= ");
            int x1=0;
            try { x1 = Convert.ToInt32(Console.ReadLine());}       
            catch {Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0");}
            int y1 = 0;
            Console.Write("y= ");
            try { y1 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            int s1 = 0;
            Console.Write("ширина= ");
            try { s1 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Console.Write("высота= ");
            int v1 = 0;
            try { v1 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Prgnk p1 = new Prgnk(x1, y1, s1, v1);      
            Console.WriteLine("Предварительный прямоугольник: " + p1);
 
 
            // здесь запрос и вызов метода на перемещение
            Console.WriteLine("Хотите задать перемещение? Если нет, просто введите нули");
            Console.Write("перемещение по оси Ox= ");
            int a = 0;
            try { a = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Console.Write("перемещение по оси Oy= ");
            int b = 0;
            try { b = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            p1.Action(a, b);
            Console.WriteLine("Конечный прямоугольник: " + p1);
            Console.WriteLine();
 
 
            // создаю второй пр-ник
            Console.WriteLine("Строим второй прямоугольник...");
            Console.Write("x= ");
            int x2 = 0;
            try { x2 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Console.Write("y= ");
            int y2 = 0;
            try { y2 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Console.Write("ширина= ");
            int s2 = 0;
            try { s2 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Console.Write("высота= ");
            int v2 = 0;
            try { v2 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Prgnk p2 = new Prgnk(x2, y2, s2, v2);
            Console.WriteLine("Предварительный прямоугольник #2: " + p2);
 
 
            // опять запрос на перемещение
            Console.WriteLine("Сместить прямоугольник? Если нет, введите нули");
            Console.Write("перемещение по оси Ox= ");
            int a1 = 0;
            try { a1 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            Console.Write("перемещение по оси Oy= ");
            int b1 = 0;
            try { b1 = Convert.ToInt32(Console.ReadLine()); }
            catch { Console.WriteLine("Внимание! Нужно вводить ЦЕЛЫЕ числа! Впредь будьте внимательнее. По умолчанию присвоено значение 0"); }
            p2.Action(a1, b1);
            Console.WriteLine("Конечный прямоугольник" + p2);
            Console.WriteLine();
 
 
            // вывод объединенного пр-ника
            Prgnk.Action(p1, p2);
            Console.WriteLine();
 
 
            Prgnk p3 = new Prgnk(); // mega пр-ник (этот блок можно тоже удалить)
            p3 = p1 + p2;
            Console.WriteLine(p3);
            Console.ReadKey();
        }
    }
}
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
30.10.2019, 06:43
C#
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
 
namespace Rextester
{
    class Rect {
        public double XMin { get; set; }
        public double XMax { get; set; }
        public double YMin { get; set; }
        public double YMax { get; set; }
        public bool IsEmpty { 
            get { return XMin > XMax || YMin > YMax; } 
        }       
        public Rect(double xmin, double xmax, double ymin, double ymax) {
            XMin = xmin; 
            XMax = xmax; 
            YMin = ymin; 
            YMax = ymax;         
        }
        public void Move(double dx, double dy) {
            XMin += dx;
            XMax += dx;
            YMin += dy;
            YMax += dy;        
        }
        public Rect Clone() {
            return new Rect(XMin, XMax, YMin, YMax);
        }
        public static Rect Union(Rect lhs, Rect rhs) {
            return new Rect(Math.Min(lhs.XMin, rhs.XMin),
                        Math.Max(lhs.XMax, rhs.XMax),
                        Math.Min(lhs.YMin, rhs.YMin),
                        Math.Max(lhs.YMax, rhs.YMax));
        }
        public static Rect Intersection(Rect lhs, Rect rhs) {
            return new Rect(Math.Max(lhs.XMin, rhs.XMin),
                        Math.Min(lhs.XMax, rhs.XMax),
                        Math.Max(lhs.YMin, rhs.YMin),
                        Math.Min(lhs.YMax, rhs.YMax));
        }
        public override string ToString() {
            return string.Format(System.Globalization.CultureInfo.InvariantCulture, 
                            "XMin={0} XMax={1} YMin={2} YMax={3}",
                            XMin, XMax, YMin, YMax);
        }
    }
 
    
    public class Program
    {
        public static void Main(string[] args)
        {
            Rect a = new Rect(1, 2, 3, 4);
            Rect b = a.Clone();
            b.Move(0.5, 0.5);
            Console.WriteLine("Объединение: {0}", Rect.Union(a, b));
            Console.WriteLine("Пересечение: {0}", Rect.Intersection(a, b));
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2019, 06:43
Помогаю со студенческими работами здесь

Описать класс Car и его наследника, класс Sedan
Описать базовый класс CAR (автомашина) со свойствами: •*Марка машины; На его основе создать класс с именем SEDAN (седан), содержащий...

Описать класс Car и его наследника, класс Avto
Создать класс Автомобиль: Поля: - Марка - приватный - Габариты (А, Б, С) - публичный - Руль (право, лево) -...

Класс прямоугольников
Добрый вечер . столкнулся с проблемой написания класса. необходимо написать класс и програму демонстрирующую его элементы. Класс О...

Описать класс прямоугольников
Ребят, очень нужна помощь... Везде есть по С, а нужно по Delphi Составить описание класса прямоугольников со сторонами, параллельными...

класс прямоугольников
Составить описание класса прямоугольников со сторонами, параллельными осями координат. Предусмотреть возможность перемещения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru