Решение на упр.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: temperature,
radiation_level: radiation_level}
}
fn create_probe(name: &str, battery_percentage: u8, sensor_data: SensorData) -> Probe {
Probe {name: name.to_string(),
battery_percentage: battery_percentage,
last_reading: sensor_data,
status: "Active".to_string()}
}
fn diagnostic_check(probe: &Probe) {
if probe.battery_percentage < 20 {
println!("Low battery!");
}
else {
println!("{:?}", probe);
}
}
fn recharge_probe(probe: &mut Probe, amount: u8) {
probe.battery_percentage += amount;
if probe.battery_percentage > 100 {
probe.battery_percentage = 100;
}
}
fn update_status(probe: &mut Probe, new_status: &str) {
probe.status = new_status.to_string();
}
fn analyze_critical_sensor(sensor: SensorData) {
// Предполагам че над 100 градуса е екстремна температура примерно
if sensor.radiation_level > 100 || sensor.temperature > 100.0 {
println!("Dangerous radiation_level or temperature!");
}
else {
println!("All good!");
}
}
fn main() {
let sensor1: SensorData = create_sensor_data(67.67, 67);
let mut probe1: Probe = create_probe("Voyager-X", 19, sensor1);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 48);
update_status(&mut probe1, "Exploring");
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
/*След като създадох променливата reading = probe1.last_reading съм заел член данната last_reading на сондата probe1, тоест probe1 е в частично преместване.
След което това reading го подавам на функцията analyze_critical_sensor, която го използва в скоупа си, но след затварящата скоба на функцията на ред 55 стойността изчезва.
Затова примерно това принтене на конзолата няма да бачка:
println!("{:?}", probe1); Казва че стойността е била частитчно преместена при let reading = probe1.last_reading
Като цяло след като сме използвали стойността във функцията analyze_critical_sensor на ред 67, тя се използва в скоупа на функцията и после изчезава и не може да се ползва.
Другите член данни на probe1 може да си ги ползваме обаче.
*/
println!("{:?}", probe1.name);
}

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

Лъчезар качи първо решение на 20.10.2026 23:41 (преди 7 дена)