Решение на упр.02 задача 1 от Петър Жеков

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

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

Резултати

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

Код

#[derive(Debug)]
struct SensorData {
temperature: f64,
radiation_level: u32,
}
#[derive(Debug)]
struct Probe {
name: String,
battery_percentage: u8,
lastReading: 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: String::from(name),
battery_percentage: battery_percentage,
lastReading: sensor_data,
status: String::from("unknown"),
}
}
fn diagnostic_check(probe: &Probe) {
if probe.battery_percentage < 20 {
println!("low battery")
} else {
println!("{:?}", probe)
}
}
fn recharge_probe(probe: &mut Probe, amount: u8) {
if amount < 100 {
probe.battery_percentage = amount
} else {
probe.battery_percentage = 100
}
}
fn update_status(probe: &mut Probe, new_status: &str) {
probe.status = String::from(new_status)
}
fn analyze_critical_sensor(sensor: SensorData) {
if sensor.radiation_level > 100 || sensor.temperature > 100_f64 {
println!("alarm")
}
println!("{:?}", sensor)
}
fn main() {
let sensor1 = create_sensor_data(50_f64, 50_u32);
let mut probe1 = create_probe("probe1", 50_u8, sensor1);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 60_u8);
update_status(&mut probe1, "Exploring");
let reading = probe1.lastReading;
analyze_critical_sensor(reading);
// println!("{:?}", probe1.name); // компилира и работи
// println!("{:?}", probe1.battery_percentage); // компилира
// println!("{:?}", reading); // компилатора дава грешка: value borrowed here afrer move
// println!("{:?}", probe1.lastReading); // borrowed after move
// println!("{:?}", probe1.status); // компилира
// diagnostic_check(&probe1); // borrowed after move
/*
* След подаването на reading към функцията analyze_critical_sensor
* probe 1 вече няма валидни данни в полето probe1.lastReading
* Компилаторът няма да ни позовли да правим кавкото и да е
* с данните в probe1.lastReading или като цяло със probe1
* защото се считат за невалидни
*/
}

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

Петър качи първо решение на 23.10.2026 22:25 (преди 4 дена)

Има две несъответствия с условието: полето last_reading е именувано lastReading, а recharge_probe задава батерията директно на amount, вместо да добавя стойността към текущия заряд и да ограничава резултата до 100%