Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 20.04.2025
Сообщений: 19

Ограничивающий прямоугольник

10.05.2025, 14:49. Показов 1756. Ответов 3

Студворк — интернет-сервис помощи студентам
Создайте класс BoundingRectangle, который обрабатывает точки на плоскости и строит по ним прямоугольник минимального размера, в который входят все эти точки. Если точка лежит на границе прямоугольника, считается, что она в него входит.

Нужно определить следующие методы (rect – экземпляр BoundingRectangle):

rect.add_point(x, y) — добавить новую точку.

rect.width() — ширина прямоугольника.

rect.height() — высота прямоугольника.

rect.bottom_y() — Y-координата нижней границы прямоугольника.

rect.top_y() — Y-координата верхней границы прямоугольника.

rect.left_x() — X-координата левой границы прямоугольника.

rect.right_x() — X-координата правой границы прямоугольника.

Гарантируется, что хотя бы одна точка будет добавлена в экземпляр до вызова методов, возвращающих описание прямоугольника.

Формат ввода
Каждый тест представляет собой код, в котором будет использоваться ваш класс. Файл c решением не обязательно называть solution.py, он будет переименован автоматически. Тест запускается с вашим классом, а его вывод сравнивается с правильным решением.

Пример 1
Ввод
Python
1
2
3
4
5
6
7
8
from solution import BoundingRectangle
 
rect = BoundingRectangle()
rect.add_point(-1, -2)
rect.add_point(3, 4)
print(rect.left_x(), rect.right_x())
print(rect.bottom_y(), rect.top_y())
print(rect.width(), rect.height())
Вывод
-1 3
-2 4
4 6
Пример 2
Ввод
Python
1
2
3
4
5
6
7
8
9
from solution import BoundingRectangle
 
rect = BoundingRectangle()
rect.add_point(10, 20)
rect.add_point(5, 7)
rect.add_point(6, 3)
print(rect.left_x(), rect.right_x())
print(rect.bottom_y(), rect.top_y())
print(rect.width(), rect.height())
Вывод
5 10
3 20
5 17
Пример 3
Ввод
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from solution import BoundingRectangle
 
rect = BoundingRectangle()
rect.add_point(-11, -12)
rect.add_point(13, -14)
rect.add_point(-15, 10)
print(rect.left_x(), rect.right_x())
print(rect.bottom_y(), rect.top_y())
print(rect.width(), rect.height())
print()
rect.add_point(-21, -12)
rect.add_point(13, -14)
rect.add_point(-15, 36)
print(rect.width(), rect.height())
print(rect.left_x(), rect.right_x())
print(rect.bottom_y(), rect.top_y())
print()
rect.add_point(-21, 78)
rect.add_point(13, -14)
rect.add_point(-55, 36)
print(rect.bottom_y(), rect.top_y())
print(rect.width(), rect.height())
print(rect.left_x(), rect.right_x())
print()
Вывод
-15 13
-14 10
28 24

34 50
-21 13
-14 36

-14 78
68 92
-55 13
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.05.2025, 14:49
Ответы с готовыми решениями:

Ограничивающий прямоугольник
Нужно написать класс BoundingRectangle, который обрабатывает точки на плоскости и строит по ним...

Дан прямоугольник n× m. Определите, какой прямоугольник
Дан прямоугольник n× m. Определите, какой прямоугольник от него нужно отрезать, чтобы получился...

Проверка на вхождение точки в прямоугольник
Есть координатная плоскость. Заданы 10 координат: x, y -- координаты точки; x1,x2,x3,x4,y1,y2,y3,y4...

3
 Аватар для andrey_f
882 / 535 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
03.10.2025, 12:32
Python
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
class BoundingRectangle:
    def __init__(self):
        self.min_x = None
        self.max_x = None
        self.min_y = None
        self.max_y = None
    
    def add_point(self, x, y):
        if self.min_x is None:
            self.min_x = self.max_x = x
            self.min_y = self.max_y = y
        else:
            self.min_x = min(self.min_x, x)
            self.max_x = max(self.max_x, x)
            self.min_y = min(self.min_y, y)
            self.max_y = max(self.max_y, y)
    
    def width(self):
        return self.max_x - self.min_x
    
    def height(self):
        return self.max_y - self.min_y
    
    def bottom_y(self):
        return self.min_y
    
    def top_y(self):
        return self.max_y
    
    def left_x(self):
        return self.min_x
    
    def right_x(self):
        return self.max_x
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
09.10.2025, 16:02
Python
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
class BoundingRectangle:
    def __init__(self):
        self.min_x = None
        self.max_x = None
        self.min_y = None
        self.max_y = None
 
    def add_point(self, x, y):
        if self.min_x is None:
            self.min_x = self.max_x = x
            self.min_y = self.max_y = y
        else:
            self.min_x = min(self.min_x, x)
            self.max_x = max(self.max_x, x)
            self.min_y = min(self.min_y, y)
            self.max_y = max(self.max_y, y)
 
    def width(self):
        return self.max_x - self.min_x
 
    def height(self):
        return self.max_y - self.min_y
 
    def bottom_y(self):
        return self.min_y
 
    def top_y(self):
        return self.max_y
 
    def left_x(self):
        return self.min_x
 
    def right_x(self):
        return self.max_x
 
 
# --- Использование класса с вводом с клавиатуры ---
print("Программа для определения ограничивающего прямоугольника по введенным точкам.")
 
rect = BoundingRectangle()
 
try:
    num_points = int(input("Сколько точек вы хотите ввести? "))
    if num_points < 0:
        print("Количество точек не может быть отрицательным. Будет использовано 0 точек.")
        num_points = 0
except ValueError:
    print("Некорректный ввод. Будет использовано 0 точек.")
    num_points = 0
 
if num_points == 0:
    print("Точки не введены. Ограничивающий прямоугольник не может быть определен.")
else:
    for i in range(num_points):
        while True: # Цикл для корректного ввода X
            try:
                x = float(input(f"Введите X-координату точки {i+1}: "))
                break
            except ValueError:
                print("Некорректный ввод. Пожалуйста, введите число для X-координаты.")
 
        while True: # Цикл для корректного ввода Y
            try:
                y = float(input(f"Введите Y-координату точки {i+1}: "))
                break
            except ValueError:
                print("Некорректный ввод. Пожалуйста, введите число для Y-координаты.")
 
        rect.add_point(x, y)
 
    print("\n--- Результаты ---")
    if rect.min_x is None: # Проверка, если все же каким-то образом точки не были добавлены
        print("Точки не были добавлены, поэтому размеры и координаты не определены.")
    else:
        print(f"Ширина ограничивающего прямоугольника: {rect.width()}")
        print(f"Высота ограничивающего прямоугольника: {rect.height()}")
        print(f"Левая X-координата (min_x): {rect.left_x()}")
        print(f"Правая X-координата (max_x): {rect.right_x()}")
        print(f"Нижняя Y-координата (min_y): {rect.bottom_y()}")
        print(f"Верхняя Y-координата (max_y): {rect.top_y()}")
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
12.10.2025, 01:00
Вот еще один вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
x1=int(input())
y1=int(input())
x2=int(input())
y2=int(input())
x3=int(input())
y3=int(input())
points = [(x1, y1), (x2, y2), (x3, y3)]
min_x = min(point[0] for point in points)
max_x = max(point[0] for point in points)
min_y = min(point[1] for point in points)
max_y = max(point[1] for point in points)
 
rectangle = ((min_x, min_y), (max_x, max_y))
print(rectangle)
Добавлено через 9 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def bounding_box(points):
 min_x = min(point[0] for point in points)
 max_x = max(point[0] for point in points)
 min_y = min(point[1] for point in points)
 max_y = max(point[1] for point in points)
 return (min_x, min_y), (max_x, max_y)
 
x1=int(input())
y1=int(input())
x2=int(input())
y2=int(input())
x3=int(input())
y3=int(input())
points = [(x1, y1), (x2, y2), (x3, y3)]
print(bounding_box(points))
Добавлено через 11 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
x1=int(input())
y1=int(input())
x2=int(input())
y2=int(input())
x3=int(input())
y3=int(input())
points = [(x1, y1), (x2, y2), (x3,y3)]
x_coords, y_coords = zip(*points)
min_x, max_x = min(x_coords), max(x_coords)
min_y, max_y = min(y_coords), max(y_coords)
rect = ((min_x, min_y), (max_x, max_y))
print(rect)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2025, 01:00
Помогаю со студенческими работами здесь

Выведите на экран прямоугольник из нулей
Помогите решить... Выведите на экран прямоугольник из нулей. Количество строк вводит пользователь,...

Найти прямоугольник, который лежит внутри максимального кол-ва других прямоугольников
Для набора прямоугольников, стороны которых параллельны OX и OY, заданных координатами 2-х...

Рисуем прямоугольник
Вася решил познать азы ASCII-живописи и, как все начинающие художники, начал с рисования простых...

Найти прямоугольник минимальной площади
Для заданного набора N точек на плоскости найти прямоугольник минимальной площади, содержащий все...

Нарисовать прямоугольник из звездочек
Надо нарисовать прямоугольник из *. При указе n рисует столько же количество по каждой стороне. То...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru