Maquina De Estados Determinista Finita

Entradas Archivos Wallpaper ASCCI Problemas

Una Mquina de estados finita consiste en un sistema el cual posee una serie de estados determinados y finitos, los cuales segun la entrada que entre al sistema, este tomara una desciocion y cambiara de estado. EL cambio de estado se llama transcicion de estado.

Ejemplo

Para este ejemplo maquina tendra 3 estados, cerrado, abierto y bloqueado,

  %%{
  init: {
  'theme': 'base',
  'themeVariables': {
  'primaryColor': '#BB2528',
  'primaryTextColor': '#fff',
  'primaryBorderColor': '#7C0000',
  'lineColor': '#F8B229',
  'secondaryColor': '#006100',
  'tertiaryColor': '#fff'
  }
  }
  }%%stateDiagram-v2
    cerrado: Estado Cerrado
    abierto: Estado Abierto
    bloqueado: Estado Bloqueado

    cerrado --> abierto: Contraseña Correcta
    cerrado --> bloqueado: 3 Contraseñas Incorrectas

En rust podriamos represnetar cada Estado como un Enum

enum State{
    Cerrado,
    Abierto,
    Bloqueado
}

Y la maquina como una estructura:

struct Maquina{
    estado:State,
    pin:String,
    intentos:u8
}

Y las fucniones asociadas con esta estructura serian:

impl Maquina{
    fn new()->Self{
        Self{
            estado:State::Cerrado,
            pin:"123".to_string(),
            intentos:0
        }
    }
    fn ingresar_pin(&mut self, pin:String){
        match self.estado{
            State::Cerrado=>{
                if pin == self.pin && self.intentos<3{
                    self.estado=abierto;
                }else{
                    self.intentos+=1;
                    if self.intentos>=3{
                        self.state=State::Bloqueado;
                    }
                }
            },
            State::Abierto=>{
                self.estado=State::Cerrado;
            },
            State::Bloqueado=>{}
        }
    }
}