Решение на упр.02 задача 1 от Петър Самичков

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

Към профила на Петър Самичков

Резултати

  • 4 точки от тестове
  • 0 бонус точки
  • 4 точки общо
  • 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!("battery warning : low battery")
}
else {
println!("{:?}" , probe)
}
}
fn recharge_probe(probe: &mut Probe, amount: u8){
if amount + probe.battery_percentage > 100 {
probe.battery_percentage = 100;
}
else {
probe.battery_percentage = probe.battery_percentage + amount;
}
}
fn update_status(probe: &mut Probe, new_status: &str){
let str = new_status.to_string();
probe.status = str;
}
fn analyze_critical_sensor(sensor: SensorData){
if sensor.radiation_level > 100 {
println!("warning rediation level is {} \n should be bellow 100 " , sensor.radiation_level)
}
if sensor.temperature < -15.0 || sensor.temperature > 38.0{
println!("warning temperature is {} \n should be between -15 and 38 C" , sensor.temperature)
}
}
fn main(){
let sensor1 :SensorData = create_sensor_data(20.0, 7);
let sensor2 :SensorData = create_sensor_data(40.0, 10);
let sensor3 :SensorData = create_sensor_data(19.0, 120);
let mut probe1 =create_probe("apolo", 9, sensor1);
diagnostic_check(&probe1);
update_status( &mut probe1, "Exploring");
recharge_probe(&mut probe1 , 80);
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
probe1.last_reading = sensor2;
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
probe1.last_reading = sensor3;
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
//причината полето last_reading да липсва от probe1 e
//че в rust всяка данна има само един собственик а когато
//reading я вземе то полето на probe1 я губи и за това не може да
//се ползва цялата структора като едно цяло
}

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

Петър качи първо решение на 20.10.2026 23:33 (преди 7 дена)

Петър качи решение на 23.10.2026 15:45 (преди 4 дена)

#[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!("battery warning : low battery")
}
else {
println!("{:?}" , probe)
}
}
fn recharge_probe(probe: &mut Probe, amount: u8){
if amount + probe.battery_percentage > 100 {
probe.battery_percentage = 100;
}
else {
probe.battery_percentage = probe.battery_percentage + amount;
}
}
fn update_status(probe: &mut Probe, new_status: &str){
let str = new_status.to_string();
probe.status = str;
}
fn analyze_critical_sensor(sensor: SensorData){
if sensor.radiation_level > 100 {
println!("warning rediation level is {} \n should be bellow 100 " , sensor.radiation_level)
}
if sensor.temperature < -15.0 || sensor.temperature > 38.0{
println!("warning temperature is {} \n should be between -15 and 38 C" , sensor.temperature)
}
}
-pub fn main(){
+fn main(){
let sensor1 :SensorData = create_sensor_data(20.0, 7);
let sensor2 :SensorData = create_sensor_data(40.0, 10);
let sensor3 :SensorData = create_sensor_data(19.0, 120);
let mut probe1 =create_probe("apolo", 9, sensor1);
diagnostic_check(&probe1);
update_status( &mut probe1, "Exploring");
recharge_probe(&mut probe1 , 80);
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
probe1.last_reading = sensor2;
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
probe1.last_reading = sensor3;
let reading = probe1.last_reading;
analyze_critical_sensor(reading);
//причината полето last_reading да липсва от probe1 e
//че в rust всяка данна има само един собственик а когато
//reading я вземе то полето на probe1 я губи и за това не може да
//се ползва цялата структора като едно цяло
}