// 1. Определите типаж Area с методом area(&self) -> f64. // 2. Реализуйте его длā структур Circle (с полем radius: f64) и Square (с полем side: f64). // 3. Напишите обобщенную функцию print_area(shape: T), которая печатает площадь фигуру. // Определяем типаж Area trait Area { fn area(&self) -> f64; } // Структура Circle struct Circle { radius: f64, } // Реализация Area для Circle impl Area for Circle { fn area(&self) -> f64 { std::f64::consts::PI * self.radius * self.radius } } // Структура Square struct Square { side: f64, } // Реализация Area для Square impl Area for Square { fn area(&self) -> f64 { self.side * self.side } } // Обобщённая функция для вывода площади fn print_area(area: impl Area) { println!("Area: {}", area.area()) } fn main() { let circle = Circle { radius: 5.0 }; let square = Square { side: 10.0 }; print_area(circle); // Area: 78.53981633974483 print_area(square); // Area: 100 // Можно добавить больше фигур, реализующих Area let rectangle = Rectangle { width: 4.0, height: 6.0, }; print_area(rectangle); // Area: 24 } // Дополнительная структура для демонстрации расширяемости struct Rectangle { width: f64, height: f64, } impl Area for Rectangle { fn area(&self) -> f64 { self.width * self.height } }