Example #1
0
        public MaquinaDeTuring(string estadoActual, Cabezal cabezal, DataGridView dataGridView, int intervaloDeTiempo)
        {
            try
            {
                TablaTransiciones = Utilidades.Utilidades.GenerarTablaDeTransiciones(dataGridView);

                Transicion transicionInicial = TablaTransiciones.FirstOrDefault(t => t.Estado == estadoActual && t.Leer == cabezal.Leer());

                if (transicionInicial == null)
                {
                    throw new ArgumentException(string.Format("Por favor, verifique el estado inicial y/o la tabla de transiciones. No se encontró transición para el estado {0} leyendo el caracter {1}.", estadoActual, cabezal.Leer()));
                }

                if (!TablaTransiciones.Any(x => x.Estado.Contains("accept")) && !TablaTransiciones.Any(x => x.EstadoSiguiente.Contains("accept")))
                {
                    throw new ArgumentException(string.Format("Por favor, verifique la tabla de transiciones. No se encontro ningún estado 'accept'.", estadoActual, cabezal.Leer()));
                }

                EstadoActual = estadoActual;
                Cabezal      = cabezal;

                IntervaloDeTiempo = intervaloDeTiempo;
                Estado            = Estado.Pausada;

                IndiceEnLaTabla         = transicionInicial.RowIndex;
                IndiceEnLaTablaAnterior = IndiceEnLaTabla;

                Pasos = 0;
            }
            catch (ArgumentException)
            {
                throw;
            }
            catch (Exception)
            {
                throw;
            }
        }
Example #2
0
        public MaquinaDeTuring Step()
        {
            try
            {
                Transicion transicionDeLaTabla = ObtenerSiguienteTransicion(EstadoActual, Cabezal.Leer());

                IndiceEnLaTablaAnterior = IndiceEnLaTabla;
                IndiceEnLaTabla         = transicionDeLaTabla.RowIndex;

                Cabezal.Escribir(transicionDeLaTabla.Escribir);
                Cabezal.Moverse(transicionDeLaTabla.Direccion);

                EstadoActual    = transicionDeLaTabla.EstadoSiguiente;
                IndiceEnLaTabla = transicionDeLaTabla.RowIndex;

                Pasos++;

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