Решение на упр.02 задача 1 от Станимир Колев
Резултати
- 4 точки от тестове
- 0 бонус точки
- 4 точки общо
- 0 успешни тест(а)
- 0 неуспешни тест(а)
Код
#[derive(Debug)]
struct SensorData {
temperature: f64,
radiation_level: u32
}
#[derive(Debug)]
struct Probe {
name: String,
battery_percentage: u8,
last_reading: SensorData,
status: String
}
fn create_sensor_data(temperature: f64, radiation_level: u32) -> SensorData {
SensorData {temperature, radiation_level}
}
fn create_probe(name: &str, battery_percentage: u8, sensor_data: SensorData) -> Probe {
Probe {
name: name.to_string(),
battery_percentage,
last_reading: sensor_data,
status: String::from("Active")
}
}
fn diagnostic_check(probe: &Probe) {
if probe.battery_percentage < 20 {
println!("Battery percentage is low");
} else {
println!("{:?}", probe);
}
}
fn recharge_probe(probe: &mut Probe, amount: u8) {
probe.battery_percentage =
probe.battery_percentage.saturating_add(amount).min(100);
}
fn update_status(probe: &mut Probe, new_status: &str) {
probe.status = new_status.to_string();
}
fn analyze_critical_sensor(sensor: SensorData) {
if sensor.radiation_level > 100 || sensor.temperature > 60f64 || sensor.temperature < -60f64 {
println!("ALARM: Radiation level or temperature is extreme {:?}", sensor);
}
}
fn main() {
let mut probe1 = create_probe("probe1", 12,
create_sensor_data(102.0f64, 30));
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 100);
update_status(&mut probe1, "Exploring");
diagnostic_check(&probe1);
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
// SensorData не имплементира Copy, затова присвояването премества ownership-а
// Ownership-ът на probe1.last_reading(само полето last_reading) е преместен в reading (ред 61)
// Ownership-ът на reading е преместен във функцията, която приема парам. по стойност (ред 62)
}
