упр.02 задача 1

Краен срок:
23.10.2026 23:59
Точки:
4

Ще модерирате състоянието на космически апарат, който изследва отдалечена планета.

Изисквания към кода:

  1. Дефиниция на структури

    Структура SensorData:

    • temperature: f64 (температура в целзий)
    • radiation_level: u32 (ниво на радиация)

    Структура Probe:

    • name: String (име на сондата, напр. "Voyager-X")
    • battery_percentage: u8 (оставаща батерия от 0 до 100)
    • last_reading: SensorData
    • status: String (текущ статус, напр. "Active", "Standby", "Error")
  2. Функции

    • fn create_sensor_data(temperature: f64, radiation_level: u32) -> SensorData
    • fn create_probe(name: &str, battery_percentage: u8, sensor_data: SensorData) -> Probe
    • fn diagnostic_check(probe: &Probe):

      • Приема имутабилна референция към сондата.
      • Ако battery_percentage е под 20%, принтира предупреждение за слаба батерия, а в противен случай извежда пълния дебаг запис на сондата ({:?}).
    • fn recharge_probe(probe: &mut Probe, amount: u8):

      • Приема мутабилна референция към сондата и увеличава battery_percentage с даденото количество (внимание: батерията не трябва да надвишава 100%).
    • fn update_status(probe: &mut Probe, new_status: &str):

      • Променя полето status на сондата с новото подадено текстово съобщение (преобразувано до String).
    • fn analyze_critical_sensor(sensor: SensorData):

      • Тази функция приема SensorData по стойност (прехвърля се собствеността само на вътрешния сензор).
      • Вътре в нея проверява дали радиацията надвишава 100 или температурата е екстремна, след което извежда алармен доклад
  3. В main трябва да симулирате следната последователност:

    • Създайте сензорни данни и инициализирайте поне една сонда (probe1).
    • Извикайте диагностична проверка (diagnostic_check).
    • Използвайте мутабилна референция, за да презаредите батерията и да промените статуса на сондата на "Exploring".
    • Демонстрирайте концепцията за частично преместване (partial move) или преместване на цял обект:
      • Извлечете полето last_reading от probe1 (чрез let reading = probe1.last_reading;) и го подайте на функцията analyze_critical_sensor(reading).
      • Коментирайте защо след това опитът да използвате цялата сонда probe1 за нови неща може да е ограничен или защо полето ѝ last_reading вече липсва .

Задължително прочетете (или си припомнете): Указания за предаване на домашни