quizzes
This commit is contained in:
64
practice/src/bin/c_area.rs
Normal file
64
practice/src/bin/c_area.rs
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user