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

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

Към профила на Цветелина Владева

Резултати

  • 3 точки от тестове
  • 0 бонус точки
  • 3 точки общо
  • 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){
if probe.battery_percentage + amount > 100 {
println!("{}", "Battery percentage cannot be over 100%!");
}
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 >100 || sensor.temperature>100 as f64 || sensor.temperature<(-100) as f64{
println!("Alarm report:");
if sensor.radiation_level >100 {
println!("Radiation level critical: {}", sensor.radiation_level);
}
if sensor.temperature<(-100.0) || sensor.temperature>100.0 {
println!("Extreme temperature: {:.1} C", sensor.temperature);
}
}else{
println!("Sensor readings within normal range: {:?}", sensor);
}
}
fn main() {
let sd= create_sensor_data(101.5, 145);
let mut probe1=create_probe("Voyager-X", 15, sd);
diagnostic_check(&probe1);
recharge_probe(&mut probe1, 50);
update_status(&mut probe1, "Exploring");
diagnostic_check(&probe1);
/*собствеността върху полето last_reading се прехвърля от probe1 към reading. SensorData не имплементира Copy, затова това е преместване, а не копиране.*/
let reading=probe1.last_reading;
analyze_critical_sensor(reading);
/*probe1 вече е частично преместена, Rust следи преместванията по полета, затова полетата, които не са преместени, остават използваеми*/
println!("{} is still {} with {}% battery!", probe1.name, probe1.status, probe1.battery_percentage);
/*probe1 като цяло вече не може да се използва, защото last_reading липсва.
diagnostic_check(&probe1);*/
}

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