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

Составить описание класса прямоугольника со сторонами.Обработка исключений

02.01.2020, 14:12. Показов 795. Ответов 3

Студворк — интернет-сервис помощи студентам
Каждый разрабатываемый класс должен, как правило, содержать следующие элементы: скрытые (private) поля, конструкторы с параметрами и без параметров, методы, свойства. Методы и свойства должны обеспечивать непротиворечивый, полный, минимальный и удобный интерфейс класса. При возникновении ошибок должны выбрасываться исключения.
В программе должна выполняться проверка всех разработанных элементов класса.

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

Может кто то с этим помочь?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2020, 14:12
Ответы с готовыми решениями:

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

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

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

3
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,040
Записей в блоге: 2
02.01.2020, 14:19
Цитата Сообщение от ParzifaL666 Посмотреть сообщение
Может кто то с этим помочь?
Помочь?
Или сделать за вас полностью "под ключ"?
0
0 / 0 / 0
Регистрация: 27.12.2018
Сообщений: 25
02.01.2020, 14:25  [ТС]
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
using System;
 
namespace lab_3
{
 
    public class rectangle
    {
        public static bool brake = false;
        int x, y, shirina, visota;
 
        public rectangle(int x, int y, int shirina, int visota)
        {
            this.x = x;
            this.y = y;
            this.shirina = shirina;
            this.visota = visota;
        }
        public void perem(int l, int h, ref int x, ref int y)
        {
            x -= l;
            y -= h;
        }
 
 
        public void izm(int x, int y, ref int shirina, ref int visota)
        {
            shirina -= x;
            visota -= y;
        }
 
        public void show(int x, int y, int shirina, int visota)
        {
            Console.WriteLine("{0} {1} {2} {3}", x, y, shirina, visota);
        }
 
    }
    //-----------------------------------------------------------------------------------------------------------------------
    class Go
    {
        static void Main(string[] args)
        {
 
            Console.WriteLine("Строим по левой нижней точке, высоте и длине");
            Console.WriteLine("Введите x");
            int x = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите y");
            int y = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите ширину");
            int shirina = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите высоту");
            int visota = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите x 2");
            int x2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите y ");
            int y2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите ширину 2");
            int shirina2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите высоту 2");
            int visota2 = Convert.ToInt32(Console.ReadLine());
 
            rectangle rect1 = new rectangle(x, y, shirina, visota);
            // Здесь менять на сколько перемещать и изменять.
            int izmx = 1, izmy = 1;
            int perx = 1, pery = 1;
            Console.WriteLine("Варианты команд:\n Perem Izm Show Exit");
            do
            {
                switch (Console.ReadLine())
                {
                    case "Perem": rect1.perem(perx, pery, ref x, ref y); break;
                    case "Izm": rect1.izm(izmx, izmy, ref shirina, ref visota); break;
                    case "Show": rect1.show(x, y, shirina, visota); break;
                    case "Exit": rectangle.brake = true; break;
                    default: Console.WriteLine("Не, ну это не серьёзно, вводи!"); break;
                }
            } while (!rectangle.brake);
 
        }
    }
}
Вот что есть у меня
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,040
Записей в блоге: 2
02.01.2020, 17:06
ParzifaL666, для точек надо водить свой тип.
Делал для одной из соседних
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
    /// <summary>Класс для представления точки на плоскости</summary>
    public class Point
    {
        /// <summary>Координата X</summary>
        public double X { get; }
        /// <summary>Координата Y</summary>
        public double Y { get; }
 
        /// <summary>Конструктор задающий значения свойствам</summary>
        /// <param name="x">Координата X</param>
        /// <param name="y">Координата Y</param>
        public Point(double x, double y)
        {
            X = x;
            Y = y;
        }
 
        /// <summary>Статический метод возвращающий расстояние между точками</summary>
        /// <param name="a">Точка на плоскости</param>
        /// <param name="b">Точка на плоскости</param>
        /// <returns>double расстояния</returns>
        public static double Distance(Point a, Point b)
        {
            double deltaX = a.X - b.X;
            double deltaY = a.Y - b.Y;
 
            return Math.Sqrt(deltaX * deltaX + deltaY * deltaY);
        }
 
        /// <summary>Метод возвращающий расстояние до другой точки</summary>
        /// <param name="other">Другая точка</param>
        /// <returns>double расстояния</returns>
        public double Distance(Point other)
            => Distance(other, this);
 
        /// <summary>Возвращает экземпляр Point из строкового представления</summary>
        /// <param name="value">Строка со значениями X и Y через пробел</param>
        /// <returns>Point точки</returns>
        public static Point Parse(string value)
        {
            var nums = value.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(double.Parse);
            return new Point(nums.First(), nums.Last());
        }
        /// <summary>Возвращает <see langword="true"/> если из строкового 
        /// представления можно получить экземпляр Poin</summary>
        /// <param name="value">Строка со значениями X и Y через пробел</param>
        /// <param name="point">Полученный экземпляр Point или null</param>
        /// <returns>bool <see langword="true"/> если успешно</returns>
        public static bool TryParse(string value, out Point point)
        {
            try
            {
                point = Parse(value);
                return true;
            }
            catch
            {
                point = null;
                return false;
            }
        }
 
        /// <summary>Строковое представление точки</summary>
        /// <returns>string со строковым представлением</returns>
        public override string ToString() => $"{X} {Y}";
 
        /// <summary>Возвращаете площадь многоугольника с заданными вершинами</summary>
        /// <param name="polygon">Вершины многоугольника</param>
        /// <returns>double - площадь вершин</returns>
        /// <remarks> Создана по примеру kolorotur https://www.cyberforum.ru/windows-forms/thread1428726.html#post7529234
        /// Worldmen, можно взять за основу теорему Грина, на принципах которой работает планиметр.
        /// Предполагается, конечно, что полигон простой, то есть не самопересекающийся и без "дырок".</remarks>
        public static double Area(IEnumerable<Point> polygon)
        {
            double area = 0;
            Point a = polygon.First();
            foreach (Point b in polygon.Skip(1).Append(a))
            {
                area += a.X * b.Y - a.Y * b.X;
                a = b;
            }
            return Math.Abs(area) / 2;
        }
    }
Сейчас дальше вышлю.

Добавлено через 2 часа 11 минут
ParzifaL666, класс для размера
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
using System;
using System.Linq;
 
namespace ConsoleApp1908
{
    /// <summary>Класс для представления размера на плоскости</summary>
    public class Size
    {
        /// <summary>Ширина</summary>
        public double Width { get; }
        /// <summary>Высота</summary>
        public double Height { get; }
        /// <summary>Площадь</summary>
        public double Area { get; }
 
        /// <summary>Конструктор задающий значения свойствам</summary>
        /// <param name="width">Ширина</param>
        /// <param name="height">Высота</param>
        public Size(double width, double height)
        {
            Width = width;
            Height = height;
            Area = Width * Height;
        }
 
        /// <summary>Возвращает экземпляр Size из строкового представления</summary>
        /// <param name="value">Строка со значениями Width и Height через пробел</param>
        /// <returns>Size с размером</returns>
        public static Size Parse(string value)
        {
            var nums = value.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(double.Parse);
            return new Size(nums.First(), nums.Last());
        }
        /// <summary>Возвращает <see langword="true"/> если из строкового 
        /// представления можно получить экземпляр Size</summary>
        /// <param name="value">Строка со значениями Width и Height через пробел</param>
        /// <param name="size">Полученный экземпляр Size или null</param>
        /// <returns>bool <see langword="true"/> если успешно</returns>
        public static bool TryParse(string value, out Size size)
        {
            try
            {
                size = Parse(value);
                return true;
            }
            catch
            {
                size = null;
                return false;
            }
        }
 
        /// <summary>Строковое представление точки</summary>
        /// <returns>string со строковым представлением</returns>
        public override string ToString() => $"{Width} {Height} {Area}";
    }
}
Добавлено через 2 минуты
И класс прямоугольника в двух файлах
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
using System;
 
namespace ConsoleApp1908
{
    /// <summary>Класс прямоугольника со сторонами параллельными осям</summary>
    /// <remarks>Предполагается что начало координат находится слева вверху.
    /// Ось X идёт слева направо, ось Y - сверху вниз</remarks>
    public partial class Rectangle
    {
        /// <summary>Верхняя левая точка</summary>
        public Point TopLeft { get; }
        /// <summary>Нижняя правая точка</summary>
        public Point BottomRight { get; }
        /// <summary>Размер и площадь</summary>
        public Size Size { get; }
 
        /// <summary>Конструктор с заданием угловых точек</summary>
        /// <param name="topLeft">Верхняя левая точка</param>
        /// <param name="bottomRight">Нижняя правая точка</param>
        public Rectangle(Point topLeft, Point bottomRight)
            : this(
                    topLeft?.X ?? throw new ArgumentNullException(nameof(topLeft)),
                    bottomRight?.X ?? throw new ArgumentNullException(nameof(bottomRight)),
                    topLeft.Y,
                    bottomRight.Y
                  )
        { }
 
        /// <summary>Конструктор с заданием угловых точки и размера</summary>
        /// <param name="topLeft">Верхняя левая точка</param>
        /// <param name="size">Нижняя правая точка</param>
        public Rectangle(Point point, Size size)
            : this(
                    point?.X ?? throw new ArgumentNullException(nameof(point)),
                    point.X + size?.Width ?? throw new ArgumentNullException(nameof(size)),
                    point.Y, 
                    point.Y + size.Height
                  )
        { }
 
 
        /// <summary>Конструктор с заданием отдельных координат</summary>
        /// <param name="left">Левая координата</param>
        /// <param name="right">Правая координата</param>
        /// <param name="top">Верхняя координата</param>
        /// <param name="bottom">Нижняя координата</param>
        public Rectangle(double left, double right, double top, double bottom)
        {
            TopLeft = new Point(Math.Min(left, right), Math.Min(top, bottom));
            BottomRight = new Point(Math.Max(left, right), Math.Max(top, bottom));
 
            Size = new Size(BottomRight.X - TopLeft.X, BottomRight.Y - TopLeft.Y);
        }
 
        /// <summary>Конструктор (статическая фабрика) с заданием координат и размеров</summary>
        /// <param name="left">Левая координата</param>
        /// <param name="top">Верхняя координата</param>
        /// <param name="width">Ширина</param>
        /// <param name="height">Высота</param>
        public static Rectangle CreateFromSize(double left, double top, double width, double height)
            => new Rectangle(left, left + width, top, top + height);
 
        public override string ToString()
            => $"TopLeft : {{{TopLeft}}}, BottomRight : {{{BottomRight}}}, Size : {{{Size}}}";
    }
}
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
using System;
 
namespace ConsoleApp1908
{
    /// <summary>Класс прямоугольника со сторонами параллельными осям</summary>
    /// <remarks>Предполагается что начало координат находится слева вверху.
    /// Ось X идёт слева направо, ось Y - сверху вниз</remarks>
    public partial class Rectangle
    {
        /// <summary>Метод возвращающий смещённый прямоугольник</summary>
        /// <param name="rectangle">Смещаемый прямоугольник</param>
        /// <param name="point">Конец вектора смещения начинающегося в начале координат</param>
        /// <returns>Новый Rectangle</returns>
        public static Rectangle Move(Rectangle rectangle, Point point)
            => CreateFromSize
            (
                (rectangle?.TopLeft.X ?? throw new ArgumentNullException(nameof(rectangle)))
                      + (point?.X ?? throw new ArgumentNullException(nameof(point))),
                rectangle.TopLeft.Y + point.Y,
                rectangle.Size.Width,
                rectangle.Size.Height);
 
        /// <summary>Метод возвращающий смещённый прямоугольник</summary>
        /// <param name="point">Конец вектора смещения начинающегося в начале координат</param>
        /// <returns>Новый Rectangle</returns>
        public Rectangle Move(Point point) => Move(this, point ?? throw new ArgumentNullException(nameof(point)));
 
        /// <summary>Метод возвращающий наименьший прямоугольник включающий заданные</summary>
        /// <param name="a">Первый прямоугольник</param>
        /// <param name="b">Второй прямоугольник</param>
        /// <returns>Новый Rectangle</returns>
        public static Rectangle Union(Rectangle a, Rectangle b)
            => new Rectangle
            (
                Math.Min(a?.TopLeft.X ?? throw new ArgumentNullException(nameof(a)), b?.TopLeft.X ?? throw new ArgumentNullException(nameof(b))),
                Math.Max(a.BottomRight.X, b.BottomRight.X),
                Math.Min(a.TopLeft.Y, b.TopLeft.Y),
                Math.Max(a.BottomRight.Y, b.BottomRight.Y)
            );
 
        /// <summary>Метод возвращающий наименьший прямоугольник включающий текущий и заданный</summary>
        /// <param name="a">Прямоугольник</param>
        /// <returns>Новый Rectangle</returns>
        public Rectangle Union(Rectangle a) => Union(this, a ?? throw new ArgumentNullException(nameof(a)));
 
 
        /// <summary>Метод возвращающий пересечение прямоугольников</summary>
        /// <param name="a">Первый прямоугольник</param>
        /// <param name="b">Второй прямоугольник</param>
        /// <returns>Новый Rectangle или <see langword="null"/> если нет пересечения</returns>
        public static Rectangle Intersection(Rectangle a, Rectangle b)
        {
            if (a == null) throw new ArgumentNullException(nameof(a));
            if (b == null) throw new ArgumentNullException(nameof(b));
 
            if
            (
                a.TopLeft.X > b.BottomRight.X
                || a.TopLeft.Y > b.BottomRight.Y
                || b.TopLeft.X > a.BottomRight.X
                || b.TopLeft.Y > a.BottomRight.Y
            )
                return null;
 
 
            return new Rectangle
                       (
                           Math.Max(a.TopLeft.X, b.TopLeft.X),
                           Math.Min(a.BottomRight.X, b.BottomRight.X),
                           Math.Max(a.TopLeft.Y, b.TopLeft.Y),
                           Math.Min(a.BottomRight.Y, b.BottomRight.Y)
                       );
        }
 
        /// <summary>Метод возвращающий пересечение прямоугольника с текущим</summary>
        /// <param name="a">Прямоугольник</param>
        /// <returns>Новый Rectangle</returns>
        public Rectangle Intersection(Rectangle a) => Intersection(this, a ?? throw new ArgumentNullException(nameof(a)));
    }
}
Добавлено через 1 минуту
Цитата Сообщение от ParzifaL666 Посмотреть сообщение
Предусмотреть возможность .... изменение размеров
Вот это не понял что такое.
Может масштабирование?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2020, 17:06
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru