Menu
Coddy logo textTech

Итоги — перечисление Shape

Часть раздела Object Oriented Programming путешествия по Rust на Coddy — урок 18 из 61.

challenge icon

Задание

Легко

Давайте создадим геометрический калькулятор, который использует перечисление (enum) для представления различных фигур, каждая из которых хранит свои собственные размеры. Ваше перечисление Shape продемонстрирует, как один тип может содержать различные структуры данных и обеспечивать унифицированное поведение с помощью методов.

Вы создадите два файла для организации вашего кода:

  • shape.rs: Определите публичное перечисление Shape с двумя вариантами:
    • Circle — содержит одно значение f64, представляющее радиус (синтаксис кортежа)
    • Rectangle — содержит именованные поля: width (f64) и height (f64)
    Реализуйте метод area, который использует сопоставление с образцом (pattern matching) для вычисления правильной площади в зависимости от варианта. Для кругов используйте 3.14159 в качестве π.
  • main.rs: Подключите ваш модуль shape, создайте по одному экземпляру каждого варианта фигуры, используя предоставленные входные данные, и выведите площадь каждой фигуры.

Ваш метод area должен возвращать f64. При сопоставлении деструктурируйте каждый вариант, чтобы извлечь его размеры, и примените соответствующую формулу:

  • Площадь круга: π × radius²
  • Площадь прямоугольника: width × height

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

Circle area: {area}
Rectangle area: {area}

Например, при радиусе круга 5.0 и прямоугольнике с шириной 4.0 и высотой 6.0 вывод будет следующим:

Circle area: 78.5
Rectangle area: 24.0

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

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

mod shape;

use shape::Shape;

fn main() {
    // Чтение входных данных
    let mut radius_input = String::new();
    std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
    let radius: f64 = radius_input.trim().parse().expect("Invalid number");

    let mut width_input = String::new();
    std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: f64 = width_input.trim().parse().expect("Invalid number");

    let mut height_input = String::new();
    std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: f64 = height_input.trim().parse().expect("Invalid number");

    // TODO: Создайте фигуру Circle (круг), используя радиус
    
    // TODO: Создайте фигуру Rectangle (прямоугольник), используя ширину и высоту
    
    // TODO: Выведите площадь каждой фигуры с одним знаком после запятой
    // Формат: "Circle area: {area}" и "Rectangle area: {area}"
}

Все уроки раздела Object Oriented Programming