Решение на упр.02 задача 1 от Мартин Алексов

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

Към профила на Мартин Алексов

Резултати

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

Код

#[derive(Debug)]
struct Probe
{
name: String,
battery_percentage: u8,
last_reading: SensorData,
status: String
}
#[derive(Debug)]
struct SensorData
{
temperature: f64,
radiation_level: u32
}
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: name.to_string(),
battery_percentage,
last_reading: sensor_data,
status: "Standby".to_string()
}
}
fn diagnostic_check(probe: &Probe)
{
if probe.battery_percentage >= 20
{
println!("{:?}", probe);
}
else
{
println!("Probe battery is under 20%");
}
}
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)
{
if sensor.radiation_level > 50
{
println!("Warning: radiation is extreme");
}
if sensor.temperature < -30.0 || sensor.temperature > 100.0
{
println!("Warning: temperature is extreme");
}
}
fn main()
{
let sensor = create_sensor_data(20.0,25);
let mut probe1 = create_probe("Voyager", 90, sensor);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 30);
update_status(&mut probe1, "Travelling");
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
/*
reading придобива ownership върху sensor от probe1,
поради което probe1 вече не може да достъпва sensor чрез last_reading.
След това analyze_critical_sensor получава ownership върху reading,
а след приключване на функцията паметта, заета от sensor, се освобождава.
*/
}

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

Мартин качи първо решение на 21.10.2026 22:17 (преди 6 дена)