Решение на упр.02 задача 1 от Боромир Петров

Обратно към всички решения

Към профила на Боромир Петров

Резултати

  • 4 точки от тестове
  • 0 бонус точки
  • 4 точки общо
  • 0 успешни тест(а)
  • 0 неуспешни тест(а)

Код

#[derive(Debug, Clone, PartialEq)]
pub struct SensorData {
pub temperature: f64,
pub radiation_level: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Probe {
pub name: String,
pub battery_percentage: u8,
pub last_reading: SensorData,
pub status: String,
}
pub fn create_sensor_data(temperature: f64, radiation_level: u32) -> SensorData {
SensorData {
temperature,
radiation_level,
}
}
pub fn create_probe(name: &str, battery_percentage: u8, sensor_data: SensorData) -> Probe {
Probe {
name: String::from(name),
battery_percentage: battery_percentage.min(100),
last_reading: sensor_data,
status: String::from("Active"),
}
}
pub fn diagnostic_check(probe: &Probe) {
if probe.battery_percentage < 20 {
println!(
"Внимание! {} е със слаба батерия: {}%",
probe.name, probe.battery_percentage
);
} else {
println!("{:?}", probe);
}
}
pub fn recharge_probe(probe: &mut Probe, amount: u8) {
let new_battery = probe.battery_percentage as u16 + amount as u16;
probe.battery_percentage = new_battery.min(100) as u8;
}
pub fn update_status(probe: &mut Probe, new_status: &str) {
probe.status = String::from(new_status);
}
pub fn analyze_critical_sensor(sensor: SensorData) {
let high_radiation = sensor.radiation_level > 100;
let extreme_temperature = sensor.temperature > 100.0 || sensor.temperature < -100.0;
if high_radiation || extreme_temperature {
println!("Аларма! Критични показания на сензора:");
if high_radiation {
println!("- радиацията е твърде висока: {}", sensor.radiation_level);
}
if extreme_temperature {
println!("- температурата е екстремна: {} °C", sensor.temperature);
}
} else {
println!(
"Показанията са нормални: {} °C, радиация {}",
sensor.temperature, sensor.radiation_level
);
}
}
pub fn main() {
let sensor_data = create_sensor_data(-130.5, 140);
let mut probe1 = create_probe("Voyager-X", 15, sensor_data);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 50);
update_status(&mut probe1, "Exploring");
diagnostic_check(&probe1);
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
// SensorData не е Copy, затова `let reading = probe1.last_reading;` премести полето
// от probe1 в reading, а оттам в analyze_critical_sensor, където то се освобождава.
// Това е частично преместване (partial move): probe1 вече няма last_reading, затова
// не можем да ползваме цялата сонда diagnostic_check(&probe1) или println!("{:?}", probe1)
// няма да се компилират, докато не присвоим нова стойност на probe1.last_reading.
println!(
"{} е със статус {} и {}% батерия",
probe1.name, probe1.status, probe1.battery_percentage
);
}

История (1 версия и 1 коментар)