65 lines
1.6 KiB
Rust
65 lines
1.6 KiB
Rust
// 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
|
||
}
|
||
}
|