Расписание занятий

Понедельник 19:00 – 21:30
Среда 19:00 – 21:30
Суббота 10:00 – 15:00

Домашнее задание. Площадь региона

15 октября 2018

Вычислить площадь региона, заданного непересекающимися геометрическими фигурами. Необходимо реализовать типы различных фигур в виде пользовательских типов данных (классов).

Задача

Дан список геометрических фигур (исходные данные). Эти фигуры не пересекают друг друга. Требуется ответить на два вопроса:

  1. Какова суммарная площадь этих фигур?
  2. Какие пять фигур имеют наибольшую площадь?

Фигуры, которые нужно реализовать:

  • Круг (класс Circle). Параметр круга — одно число (радиус).
  • Прямоугольник (класс Rect). Параметры прямоугольника — два числа (ширина и высота).
  • Треугольник (класс Triangle). Параметры треугольника — три числа (длины трёх его сторон).

Пожелания по решению

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

Пусть класс, реализующий протокл вычисления площади, содержит следующие методы:

  • area() — возвращает вещественное число (float), равное площади фигуры.

Кроме того, все нужные параметры фигура должна получать при создании, как параметры конструктора класса.

Так же необходимо реализовать метод __str__(), чтобы фигуру можно было вывести на экран при помощи функции print().

Исходные данные

Список фигур, из которых состоит регион, скрипт должен прочитать из текстового файла figures.txt. Скачайте его по ссылке: https://anhel.in/files/figures.txt.

Каждая строка файла описывает одну фигуру и имеет следующий формат:

название-класса-фигуры,параметр1,параметр2

Элементы строки разделены запятыми. Количество параметров в строке зависит от типа фигуры (у круга один, у прямоугольника два, у треугольника три).

Название класса фигуры может быть:

  • Circle — круг
  • Rect — прямоугольник
  • Triangle — треугольник

Результат выводится на экран.

Пример класса Circle

import math

class Circle:
    def __init__(self, r):
        self.r = r

    def area(self):
        return math.pi * (self.r ** 2)

    def __str__(self):
        return "Circle(r={})".format(self.r)

Остальные классы фигур реализуйте аналогично.

Замечания по реализации

  • Формулы вычисления площади соответствующих фигур посмотрите в интернете.
  • Площадь треугольника по трём известным сторонам можно вычислить по формуле Герона
  • Квадратный корень из числа считает функция math.sqrt(x) (нужно импортировать модуль math).
  • Чтобы вывести пять фигур с наибольшей площадью, проще всего отсортировать список фигур по площади и сделать срез первых пяти элементов этого списка.