Решение на упр.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, last_reading: SensorData) -> Probe {
Probe {
name: name.to_string(),
battery_percentage,
last_reading,
status: "Inactive".to_string()
}
}
fn diagnostic_check(probe: &Probe) {
if probe.battery_percentage < 20 {
println!("Warning: {} has low battery!", probe.name);
} else {
println!("Probe {:?}", probe);
}
}
fn recharge_probe(probe: &mut Probe, amount: u8) {
if (probe.battery_percentage + amount) > 100 {
probe.battery_percentage = 100;
} else {
probe.battery_percentage += amount;
}
}
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 > 100.0 {
println!("Critical sensor reading detected: {:?}", sensor);
}
}
fn main() {
let sensor_data = create_sensor_data(25.0, 100);
let mut probe1 = create_probe("Probe 1", 0, sensor_data);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 100);
update_status(&mut probe1, "Exploring");
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
/*update_status(&mut probe1, "Critical"); ----> Това има грешка
Понеже структурата SensorData не имплементира Copy trait,
при присвояването на поле от структурата Probe от тип SensorData на нова променлива,
то собственността над памета за това специфично поле се прехвърля към новата променлива.
Това означава, че след присвояването, оригиналната променлива probe1 вече няма достъп до полето last_reading,
тъй като собствеността е преместена към променливата reading. Ако се опитаме да използваме probe1.last_reading след това присвояване,
ще получим компилационна грешка, защото собствеността вече не принадлежи на probe1. */
}
