Menu
Coddy logo textTech

Итоги: Калькулятор фигур

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 30 из 70.

challenge icon

Задание

Легко

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

Вы организуете свой код в четырех файлах:

  • IShape.cs: Определите интерфейс с именем IShape в пространстве имен Shapes. Каждая фигура должна уметь вычислять свою площадь и описывать себя. Объявите два метода: CalculateArea(), возвращающий double, и GetDescription(), возвращающий string.
  • Circle.cs: Создайте класс Circle в пространстве имен Shapes, который реализует IShape. У круга есть свойство Radius (double), устанавливаемое через конструктор. Формула площади — Math.PI * Radius * Radius. Описание должно возвращать "Circle with radius {Radius}".
  • Rectangle.cs: Создайте класс Rectangle в пространстве имен Shapes, который реализует IShape. У прямоугольника есть свойства Width и Height (оба double), устанавливаемые через конструктор. Площадь — это просто ширина, умноженная на высоту. Описание должно возвращать "Rectangle {Width}x{Height}".
  • Program.cs: В основном файле создайте круг и прямоугольник, используя входные значения, а затем сохраните их в массиве ссылок IShape. Пройдите циклом по массиву и для каждой фигуры выведите ее описание, а затем ее площадь, округленную до двух знаков после запятой. Это демонстрирует, как можно обрабатывать совершенно разные фигуры через один и тот же интерфейс!

Вы получите три входных значения:

  • Радиус круга (double)
  • Ширина прямоугольника (double)
  • Высота прямоугольника (double)

Выводите результат в следующем формате для каждой фигуры:

{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}

Например, если входные данные 5, 4 и 6, вывод должен быть таким:

Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00

Обратите внимание, что вашему циклу не нужно знать, имеет ли он дело с кругом или прямоугольником — он просто вызывает методы интерфейса и позволяет полиморфизму сделать все остальное. В этом и заключается элегантность программирования через интерфейсы!

Попробуйте сами

using System;
using Shapes;

class Program
{
    public static void Main(string[] args)
    {
        // Чтение входных значений
        double circleRadius = Convert.ToDouble(Console.ReadLine());
        double rectWidth = Convert.ToDouble(Console.ReadLine());
        double rectHeight = Convert.ToDouble(Console.ReadLine());
        
        // TODO: Создайте объект Circle с заданным радиусом
        
        // TODO: Создайте объект Rectangle с заданными шириной и высотой
        
        // TODO: Создайте массив IShape, содержащий обе фигуры
        
        // TODO: Пройдите циклом по массиву и для каждой фигуры:
        // - Выведите описание, используя GetDescription()
        // - Выведите "Area: ", а затем результат CalculateArea(), округленный до 2 знаков после запятой
    }
}

Все уроки раздела Объектно-ориентированное программирование