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

Задача 3. Моделирование

04.11.2022, 09:49. Показов 4348. Ответов 9

Студворк — интернет-сервис помощи студентам
В проекте по 3D-моделированию используются две фигуры — куб и пирамида. Для моделирования этих фигур используются соответствующие 2D-фигуры, а именно квадрат и треугольник. Вся поверхность 3D-фигуры может храниться в виде списка. Например, для куба это будет [Square, Square, Square, Square, Square, Square].


Квадрат инициализируется длинами сторон, а треугольник — основанием и высотой. Каждая из 2D-фигур умеет находить свои периметр и площадь, а 3D-фигуры, в свою очередь, могут находить площадь своей поверхности.

Используя входные данные о фигурах и знания математики, реализуйте соответствующие классы и методы. Для базовых классов также реализуйте геттеры и сеттеры.



Что оценивается

Результат вычислений корректен.
Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры с соответствующими декораторами.
Для создания нового класса на основе уже существующего используется наследование.
Для статических и классовых методов используется декоратор classmethod.
Сообщения о процессе получения результата осмысленны и понятны для пользователя.
Переменные, функции и собственные методы классов имеют значащие имена, не a, b, c, d.
Классы и методы/функции имеют прописанную документацию.
Есть аннотация типов для методов/функций и их аргументов (кроме args и kwargs). Если функция/метод ничего не возвращают, то используется None.

код

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
import math
 
 
class Square:
    def __init__(self, a):
        self.figure_name = "Квадрат"
        self.a = a
 
    @property
    def square(self):
        return self.a ** 2
 
    @property
    def perimeter(self):
        return 4 * self.a
 
 
class Triangle:
    def __init__(self, a, h):
        self.figure_name = "Треугольник"
        self.a = a
        self.h = h
 
    @property
    def square(self):
        return 0.5 * self.a * self.h
 
    @property
    def perimeter(self):
        return 2 * math.sqrt(self.h**2 + (self.a / 2)**2) + self.a
 
 
class Cube(Square):
    def __init__(self, a):
        super().__init__(a)
        self.figure_name = 'Куб'
 
    @property
    def square(self):
        return 6 * super().square
 
    @property
    def perimeter(self):
        return 3 * super().perimeter
 
 
class Pyramid(Triangle, Square):
    def __init__(self, a, h):
        super().__init__(a, h)
        self.figure_name = 'Пирамида'
 
    @property
    def square(self):
        side_square = 4 * super().square
        base_square = self.a ** 2
        return side_square + base_square
 
    @property
    def perimeter(self):
        return 2 * super().perimeter + 2 * self.a
 
 
p = Pyramid(6, 4)
print(p.square)
print(p.perimeter)
 
p = Cube(5)
print(p.square)
print(p.perimeter)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2022, 09:49
Ответы с готовыми решениями:

Задача на моделирование
Форумчане, помогите решить задачу, пожалуйста, рисунок прикреплен: В одном районе расположено несколько населенных пунктов. По территории...

Задача на моделирование
Здравствуйте! Нужна помощь с несложной, на первый взгляд, задачей по моделированию. Вот и она: Смоделировать процесс производства 1000 м...

Задача на лямбда-моделирование!
Уважаемые программисты!!! Пожалуйста, помогите разобраться с задачей.Сама суть мне ясна...Есть массив, нужно найти количество максимальных...

9
Йуный плагиат-падаван)
176 / 119 / 45
Регистрация: 17.10.2022
Сообщений: 566
04.11.2022, 10:16
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
class Figure:
    figure_name = 'Фигура'
    
    def __init__(self, figure_name):
        self.figure_name = figure_name
    
    def show_name(self):
        print(self.figure_name)
 
class Circle(Figure):
    def __init__(self, radius):
        super().__init__('Круг')
        self.radius = radius
 
    def get_square(self):
        return(3.14 * self.radius**2)
    
    def get_perimeter(self):
        return(2 * 3.14 * self.radius)
 
class Quad(Figure):
    def __init__(self, a, b):
        super().__init__('Четырехугольник')
        self.a = a
        self.b = b
        
    def get_square(self):
        return(self.a * self.b)
    
    def get_perimeter(self):
        return(2 * (self.a + self.b))
 
class Square(Figure):
    def __init__(self, a):
        super().__init__('Квадрат')
        self.a = a
        
    def get_square(self):
        return(self.a**2)
    
    def get_perimeter(self):
        return(4 * self.a)
 
class Triangle(Figure):
    def __init__(self, a, b, c):
        super().__init__('Треугольник')
        self.a = a
        self.b = b
        self.c = c
        
    def get_square(self):
        return(self.a * self.b * self.c)
    
    def get_perimeter(self):
        return(self.a + self.b + self.c)
Добавлено через 9 минут
Или вот еще начало более оптимального кода
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 abc import ABC, abstractmethod
 
 
class Figure(ABC):
 
    def __init__(self, _length, _base, _height) -> None:
        self._length = _length
        self._base = _base
        self._height = _height
 
    @abstractmethod
    def __str__(self) -> str:
        """
        Абстрактный метод возвращает строку сведений о фигуре
 
        :return:  str
        """
        return f'Фигура: "{Figure.__name__}" Периметр = {self.perimeter()} \tПлощадь = {self.square()}'
За 300 рублей на банковскую карту кину продолжение
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
04.11.2022, 10:55
Лучший ответ Сообщение было отмечено turking как решение

Решение

Когда сдавал это задание, приняли такое. Помню, что вопросы по нему были, исправлял, делал, как куратор сказал.
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
81
82
83
84
85
86
87
88
89
90
91
92
import math
 
 
class Vmixin:
    def get_area(self):
        result = 0
        for side in self.figure:
            result += side.get_area(self)
        return result
 
 
class Square:
    def __init__(self, length):
        self.side_length = length
 
    @property
    def side_length(self):
        return self._side_length
 
    @side_length.setter
    def side_length(self, length):
        self._side_length = length
 
    def get_perimeter(self):
        return self.side_length * 4
 
    def get_area(self):
        return self._side_length ** 2
 
 
class Cube(Square, Vmixin):
    def __init__(self, length):
        super().__init__(length)
        self.square = Square
        self.figure = [self.square for _ in range(6)]
 
 
class Triangle:
    def __init__(self, length, height):
        self.side_length = length
        self.height = height
 
    @property
    def side_length(self):
        return self._side_length
 
    @side_length.setter
    def side_length(self, length):
        self._side_length = length
 
    @property
    def height(self):
        return self._height
 
    @height.setter
    def height(self, height):
        self._height = height
 
    def get_area(self):
        return self.side_length / 2 * self.height
 
    def get_perimeter(self):
        edge_triangle = math.sqrt(self.height ** 2 + (self.side_length / 2) ** 2)
        return round(self.side_length + 2 * edge_triangle, 3)
 
 
class Pyramid(Triangle, Square, Vmixin):
    def __init__(self, length, height):
        super().__init__(length, height)
        self.square = Square
        self.triangle = Triangle
        self.figure = [self.square]
        self.figure.extend([self.triangle for _ in range(4)])
 
 
print(f'---Квадрат')
a = Square(10)
print(f'Периметр квадрата со стороной {a.side_length}: {a.get_perimeter()}')
print(f'Площадь квадрата со стороной {a.side_length}: {a.get_area()}')
print(f'---Куб')
c = Cube(8)
print(f'Площадь граней куба с длиной стороны {c.side_length}: {c.get_area()}')
 
print(f'---Треугольник')
t = Triangle(10, 10)
print(f'Периметр треугольника с основанием {t.side_length} и высотой {t.height}: {t.get_perimeter()}')
print(f'Площадь треугольника со стороной {t.side_length}: {t.get_area()}')
 
 
print('---Пирамида')
p = Pyramid(5, 7)
print(f'Площадь ганей пирамиды с длиной основания {p.side_length} и высотой грани {p.height}: {p.get_area()}')
1
0 / 0 / 0
Регистрация: 13.10.2022
Сообщений: 34
27.11.2022, 21:21
Откуда формула?

Python
1
2 * math.sqrt(self.h**2 + (self.a / 2)**2) + self.a
Как раз это задание делаю, не могу найти нужные формулы, чтобы вывести периметр треугольника через основание и высоту.
Какие формулы использовал?
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
27.11.2022, 21:51
BBKay, боковая сторона в равнобедренном треугольнике есть гипотенуза из треугольника образованого высотой и половиной основания.
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.11.2022, 21:56

Не по теме:

Цитата Сообщение от BBKay Посмотреть сообщение
не могу найти нужные формулы
теорема Пифагора - это исключительно секретная информация, ее невозможно нигде найти. И формула там страшная, на страницу А4 восьмым кеглем не влезет.


0
0 / 0 / 0
Регистрация: 13.10.2022
Сообщений: 34
27.11.2022, 22:30
u235
Цитата Сообщение от u235 Посмотреть сообщение
боковая сторона в равнобедренном треугольнике
А кто сказал, что треугольник равнобедренный?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.11.2022, 22:33
BBKay, а не равнобедренный не рассчитаешь
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
27.11.2022, 22:34
Цитата Сообщение от turking Посмотреть сообщение
а треугольник — основанием и высотой
Какие еще варианты при такой инициализации? Основание ведь только в равнобедренном треугольники бывает..
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.11.2022, 22:37
u235, основанием может считаться сторона, на которую опустили высоту. Но тогда нужен как минимум угол, только по высоте и основанию не рассчитаешь.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2022, 22:37
Помогаю со студенческими работами здесь

Имитационное моделирование задача
На вход шифратора поступает случайный поток данных с интенсивностью 10^5 бит/с. Ключ – это гамма, которая с вероятностью 0,3 берется с...

Задача на моделирование по физике
Глубинная бомба, установленная на взрыв через заданное время, сбрасывается со стоящего неподвижно противолодочного корабля. Исследовать...

Задача. Моделирование стека
Здравствуйте! Столкнулся со следующей задачей: Напишите программу, которая моделирует работу стека целых чисел, управляемого...

Задача GPSS моделирование минимаркета
Помогите, пожалуйста решить задачку на GPSS. Я в нем вообще не разбираюсь... Если есть на свете добрые и хорошие люди, которым не все равно...

Задача на моделирование работы МГТС
С целью экономии расходов на междугородные телефонные переговоры одна фирма решила арендовать три линии междугородной телефонной связи...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru