Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по Rust на Coddy. Урок 18 из 61.

challenge icon

Задание

Легко

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

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

  • shape.rs: Define public enum Shape с двумя variant:
    • Circle: holds single f64, представляющее радиус (tuple syntax)
    • Rectangle: holds named fields: width (f64) и height (f64)
    Implement метод area, который использует pattern matching для calculate правильной площади на основе variant. Для окружностей используйте 3.14159 в качестве π.
  • main.rs: Подключите модуль фигуры, создайте one экземпляр каждой variant фигуры using предоставленные inputs и выведите площадь каждой фигуры.

Ваш метод area должен возвращать f64. При сопоставлении destructure each variant, чтобы извлечь её размеры и применить appropriate формулу:

  • Площадь Circle: π × radius²
  • Площадь Rectangle: width × height

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

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

Например, при радиусе окружности 5.0 и Rectangle с width 4.0 и height 6.0 вывод будет таким:

Circle area: 78.5
Rectangle area: 24.0

Вы получите three inputs: радиус окружности, width Rectangle и height Rectangle.

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

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, используя radius
    
    // TODO: Создать фигуру Rectangle, используя width и height
    
    // TODO: Вывести площадь каждой фигуры с одним десятичным знаком
    // Format: "Circle area: {area}" and "Rectangle area: {area}"
}

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

Потренируйтесь самостоятельно: Онлайн-компилятор Rust