Решение на упр.02 задача 1 от Ивайло Иванов

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

Към профила на Ивайло Иванов

Резултати

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

Код

const FULL_BAT: u8 = 100;
const LOW_BAT: u8 = 20;
const CRIT_RADIATION: u32 = 100;
const EX_TEMP_HIGH: f64 = 100.0;
const EX_TEMP_LOW: f64 = -100.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(t_celsius: f64, rad_reading: u32) -> SensorData {
SensorData {
temperature: t_celsius,
radiation_level: rad_reading,
}
}
fn create_probe(name: &str, battery_percentage: u8, sensor_data: SensorData) -> Probe {
let bat_level = if battery_percentage > FULL_BAT { FULL_BAT } else {
battery_percentage
};
Probe {
name: name.to_string(),
battery_percentage: bat_level,
last_reading: sensor_data,
status: String::from("Standby"),
}
}
fn diagnostic_check(probe: &Probe) {
if probe.battery_percentage < LOW_BAT {
println!("WARNING! battery on probe {} at {}% ", probe.name, probe.battery_percentage)
} else {
println!("{:?}", probe)
}
}
fn recharge_probe(probe: &mut Probe, amount: u8) {
let remaining_charge = FULL_BAT - probe.battery_percentage;
if remaining_charge < amount {
probe.battery_percentage = FULL_BAT;
} 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 > CRIT_RADIATION
|| sensor.temperature >= EX_TEMP_HIGH || sensor.temperature < EX_TEMP_LOW {
println!("WARNING! Critical readings:
temperature {:.1}°C, radiation {}",
sensor.temperature, sensor.radiation_level);
} else {
println!("normal readings")
}
}
fn main() {
let data = create_sensor_data(43.0, 0);
let mut probe1 = create_probe("Voyager-X", 70, data);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 34);
update_status(&mut probe1, "Exploring");
diagnostic_check(&probe1);
let reading = probe1.last_reading;
// nqmam bulgarska klaviatura v momenta
// reading veche pritejava last_reading. poleto ne se kopira v reading, ami se prisvoqva.
// veche reading pritejava last_reading a probe1 ostanalite poleta.
// zatova pri rabota sus vsichki poleta na probe1 nqma da se kompilira
// aka use of moved value/ borrow of partially moved value.
// no pri rabota s edinichni poleta ot probe1 nqma da ima problem, osven ako ne e last_reading
analyze_critical_sensor(reading);
}

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

Ивайло качи първо решение на 21.10.2026 21:15 (преди 6 дена)