Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Фигуры и их характеристики Разработайте иерархию классов для расчета периметров и площадей геометрических фигур.

Дмитрий Кульков Ученик (179), на голосовании 1 год назад
Фигуры и их характеристики
Разработайте иерархию классов для расчета периметров и площадей
геометрических фигур.

1. Создайте базовый класс Shape.
Определите в нём методы calculate_perimeter() и calculate_area(), которые будут
возвращать периметр и площадь фигуры соответственно (сейчас возвращают 0).
2. Создайте классы-потомки Shape, описывающие следующие геометрические
фигуры:

2.1. Circle (Круг):
Определите метод __init__(self, radius), который принимает радиус круга и
сохраняет его как атрибут.
Переопределите методы calculate_perimeter() и calculate_area() для вычисления
периметра и площади круга.

2.2. Rectangle (Прямоугольник):
Определите метод __init__(self, width, height), который принимает ширину и
высоту прямоугольника и сохраняет их как атрибуты.
Переопределите методы calculate_perimeter() и calculate_area() для
вычисления периметра и площади прямоугольника.

2.3. Triangle (Треугольник):
Определите метод __init__(self, side1, side2, side3), который принимает длины
трех сторон треугольника и сохраняет их как атрибуты.
Переопределите методы calculate_perimeter() и calculate_area() для
вычисления периметра и площади треугольника.

3. Создайте класс Square (Квадрат), наследующий от Rectangle.
Переопределите его конструктор и методы calculate_perimeter() и
calculate_area(), чтобы они работали только с одной стороной (так как у квадрата
все стороны равны).

4. Создайте класс RightTriangle (прямоугольный треугольник), наследующий
от Triangle.
Переопределите его конструктор и методы calculate_perimeter() и
calculate_area(), чтобы они работали только с длинами катетов.

5. Создайте класс ShapeList, хранящий список фигур.
Определите метод __init__(self), создающий атрибут shape_list, содержащий
пустой список.
Определите метод add_shape(self, shape), добавляющий в список shape_list
фигуру shape.
Определите методы calculate_perimeters() и calculate_areas() возвращающие
кортежи периметров и площадей всех фигур, хранящихся в списке shape_list.

Тесты:
1. Создайте объект класса ShapeList
2. Заполните его случайным количеством (от 2 до 10) произвольных фигур.
3. Выведите результаты работы методов calculate_perimeters() и
calculate_areas() для этого объекта
Голосование за лучший ответ
Татьяна Просветленный (36498) 1 год назад
код на Python, реализующий эту иерархию классов:
 import math 

class Shape:
def calculate_area(self):
return 0

def calculate_perimeter(self):
return 0

class Circle(Shape):
def __init__(self, radius):
self.radius = radius

def calculate_area(self):
return math.pi * self.radius ** 2

def calculate_perimeter(self):
return 2 * math.pi * self.radius

class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height

def calculate_area(self):
return self.width * self.height

def calculate_perimeter(self):
return 2 * (self.width + self.height)

class Triangle(Shape):
def __init__(self, side1, side2, side3):
self.side1 = side1
self.side2 = side2
self.side3 = side3

def calculate_area(self):
s = (self.side1 + self.side2 + self.side3) / 2
return math.sqrt(s * (s - self.side1) * (s - self.side2) * (s - self.side3))

def calculate_perimeter(self):
return self.side1 + self.side2 + self.side3

class Square(Rectangle):
def __init__(self, side):
super().__init__(side, side)

class RightTriangle(Triangle):
def __init__(self, leg1, leg2):
super().__init__(leg1, leg2, math.sqrt(leg1 ** 2 + leg2 ** 2))

class ShapeList:
def __init__(self):
self.shape_list = []

def add_shape(self, shape):
self.shape_list.append(shape)

def calculate_perimeters(self):
perimeters = []
for shape in self.shape_list:
perimeters.append(shape.calculate_perimeter())
return tuple(perimeters)

def calculate_areas(self):
areas = []
for shape in self.shape_list:
areas.append(shape.calculate_area())
return tuple(areas)
Приведенный выше код реализует иерархию классов:
  1. Создайте объект класса ShapeList.
  2. Заполните его случайным количеством (от 2 до 10) произвольных фигур.
  3. Выведите результаты работы методов calculate_perimeters() и calculate_areas() для этого объекта.
Кода на Python, который выполняет эти шаги:
 import random 

# Создаем объект класса ShapeList
shape_list = ShapeList()

# Заполняем его случайным количеством (от 2 до 10) произвольных фигур
for i in range(random.randint(2, 10)):
shape_type = random.choice(['circle', 'rectangle', 'triangle', 'square', 'right_triangle'])
if shape_type == 'circle':
radius = random.randint(1, 10)
shape = Circle(radius)
elif shape_type == 'rectangle':
width = random.randint(1, 10)
height = random.randint(1, 10)
shape = Rectangle(width, height)
elif shape_type == 'triangle':
side1 = random.randint(1, 10)
side2 = random.randint(1, 10)
side3 = random.randint(1, 10)
shape = Triangle(side1, side2, side3)
elif shape_type == 'square':
side = random.randint(1, 10)
shape = Square(side)
else:
leg1 = random.randint(1, 10)
leg2 = random.randint(1, 10)
shape = RightTriangle(leg1, leg2)
shape_list.add_shape(shape)

# Выводим результаты работы методов calculate_perimeters() и calculate_areas() для этого объекта
print("Периметры фигур:", shape_list.calculate_perimeters())
print("Площади фигур:", shape_list.calculate_areas())
ТатьянаПросветленный (36498) 1 год назад
Результат выполнения программы:
 Периметры фигур: (31.41592653589793, 32) 
Площади фигур: (78.53981633974483, 64)
Похожие вопросы