Example #1
0
        public Transicion ObtenerSiguienteTransicion(string estadoActual, char charALeer)
        {
            try
            {
                Transicion transicionDeLaTabla = TablaTransiciones.FirstOrDefault(t => t.Estado == estadoActual && t.Leer == charALeer);

                if (transicionDeLaTabla == null)
                {
                    throw new ArgumentException(string.Format("No se encontró una transición válida para el estado '{0}' leyendo el caracter '{1}'.", estadoActual, charALeer));
                }

                bool puedoMoverme = true;

                if (transicionDeLaTabla.Direccion == Direccion.Derecha)
                {
                    puedoMoverme = Cabezal.PuedoMovermeALaDerecha();

                    if (!puedoMoverme)
                    {
                        throw new ArgumentException(string.Format(
                                                        "No se encontró una transición válida para el estado '{0}' leyendo el caracter '{1}'." +
                                                        " El cabezal no se puede mover más hacia la derecha.", estadoActual, charALeer));
                    }

                    return(transicionDeLaTabla);
                }
                else
                {
                    puedoMoverme = Cabezal.PuedoMovermeALaIzquierda();

                    if (!puedoMoverme)
                    {
                        throw new ArgumentException(string.Format(
                                                        "No se encontró una transición válida para el estado '{0}' leyendo el caracter '{1}'." +
                                                        " El cabezal no se puede mover más hacia la izquierda.", estadoActual, charALeer));
                    }

                    return(transicionDeLaTabla);
                }
            }
            catch (ArgumentException)
            {
                throw;
            }
            catch (Exception)
            {
                throw;
            }
        }