This commit is contained in:
10 changed files with 257 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
// 1. Определите типаж Area с методом area(&self) -> f64.
// 2. Реализуйте его длā структур Circle (с полем radius: f64) и Square (с полем side: f64).
// 3. Напишите обобщенную функцию print_area<T: 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
}
}