Решение на упр.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. */
}

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

Савелий качи първо решение на 21.10.2026 12:05 (преди 6 дена)