Решение на упр.02 задача 1 от Георги Георгиев

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

Към профила на Георги Георгиев

Резултати

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

Код

const MAX_RADIATION: u32 = 100;
const MAX_TEMP: f64 = 100.00;
const MIN_TEMP: f64 = -100.00;
const DEF_STAT: &str = "Active";
#[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 {
let sd: SensorData = SensorData{temperature,radiation_level};
sd
}
fn create_probe(name: &str, battery_percentage: u8, sensor_data: SensorData) -> Probe {
let battery = if battery_percentage > 100 { 100 } else { battery_percentage };
let probe: Probe = Probe {
name: String::from(name),
battery_percentage: battery,
last_reading: sensor_data,
status: String::from(DEF_STAT),
};
probe
}
fn diagnostic_check(probe: &Probe) {
if probe.battery_percentage < 20 {
println!("Слаба батерия на сондата {:?}%", probe.battery_percentage);
} else {
println!("дебаг запис сонда? : {:?}", probe);
}
}
fn recharge_probe(probe: &mut Probe, amount: u8) {
let batery_lim = 100 - probe.battery_percentage;
if amount >= batery_lim {
probe.battery_percentage = 100;
} else {
probe.battery_percentage += amount;
}
}
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 > MAX_RADIATION || sensor.temperature > MAX_TEMP || sensor.temperature < MIN_TEMP
{
println!(
"Доклад: радиацията е {:?}, температурата е {:?}",
sensor.radiation_level, sensor.temperature
);
}
}
fn main() {
let sensor = create_sensor_data(60.1, 123);
let mut probe1 = create_probe("Сондено-име", 7, sensor);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 60);
update_status(&mut probe1, "Exploring");
diagnostic_check(&probe1);
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
// SensorData типът не имплементира Copy анотацията следователно reading е мястото, където се премества last_reading(вместо да се копира) и следователно probe1 вече не е цяло и last_reading вече не е валидно поле на probe1.
}

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

Георги качи първо решение на 17.10.2026 04:13 (преди 10 дена)