Beispiel #1
0
        //HABILITA LA EJECUCIÓN SELECCIONADA
        private void BtnHabilitar_Click(object sender, EventArgs e)
        {
            if (cBoxOpcion1.Checked == true && cBoxOpcion2.Checked == true)
            {
                MessageBox.Show("Debe marcar solo una opción...");
            }
            else if (cBoxOpcion1.Checked == true && cBoxOpcion2.Checked == false)
            {
                MessageBox.Show("¡A elegido la ejecución automática!");
                BtnAutomatico.Enabled = true;
                cBoxOpcion1.Enabled   = false;
                cBoxOpcion2.Enabled   = false;
                BtnHabilitar.Enabled  = false;
                estadoActual          = CargarTXT.mt.S;
            }
            else if (cBoxOpcion1.Checked == false && cBoxOpcion2.Checked == true)
            {
                MessageBox.Show("¡A elegido la ejecución paso a paso!");
                BtnPasoAPaso.Enabled  = true;
                cBoxOpcion1.Enabled   = false;
                cBoxOpcion2.Enabled   = false;
                BtnHabilitar.Enabled  = false;
                BtnCambioAuto.Enabled = true;

                txtCintaActual.Text  = Cinta_Actual();
                txtPosCabezal.Text   = posicionLista.ToString();
                estadoActual         = CargarTXT.mt.S;
                txtEstadoActual.Text = estadoActual.ToString();
                Transicion transicionActual = CargarTXT.mt.Buscar_Transicion(estadoActual, CargarTXT.mt.Palabra[posicionLista]);
                txtUltimaTrans.Text = transicionActual.F + "," + transicionActual.Escribir + "," + transicionActual.Mov.ToString();
            }
        }
Beispiel #2
0
        //CAMBIA PROCESO DE EJECUCIÓN "AUTOMÁTICA" A "PASO A PASO"
        private void BtnCambioPaso_Click(object sender, EventArgs e)
        {
            BtnAutomatico.Enabled = false;
            BtnCambioPaso.Enabled = false;
            BtnPasoAPaso.Enabled  = true;
            BtnCambioAuto.Enabled = true;

            if (Cinta_Actual().Length < txtCintaActual.MaxLength)
            {
                txtCintaActual.Text = Cinta_Actual();
            }
            else
            {
                txtCintaActual.Text = "La cinta es demasiado grande para ser mostrada...";
            }

            txtPosCabezal.Text   = posicionLista.ToString();
            txtEstadoActual.Text = estadoActual.ToString();

            if (CargarTXT.mt.Palabra.Count - (posicionLista + 1) < 0)
            {
                CargarTXT.mt.Palabra.Add('_');
            }

            Transicion transicionActualAux = CargarTXT.mt.Buscar_Transicion(estadoActual, CargarTXT.mt.Palabra[posicionLista]);

            txtUltimaTrans.Text = transicionActualAux.F + "," + transicionActualAux.Escribir + "," + transicionActualAux.Mov.ToString();
        }
Beispiel #3
0
        public bool LlenarMT(string[] lineas, MT mt)
        {
            try
            {
                List <string> lineasAux = lineas.OfType <string>().ToList();

                mt.CantEstados = Int32.Parse(lineasAux[0]);
                lineasAux.RemoveAt(0);

                mt.S = Int32.Parse(lineasAux[0]);
                lineasAux.RemoveAt(0);

                //validar que no ingrese comas
                mt.Alfabeto = new List <char>();
                foreach (char item in lineasAux[0])
                {
                    if (item == ',')
                    {
                        lineasAux[-1] = "";
                    }
                    mt.Alfabeto.Add(item);
                }
                lineasAux.RemoveAt(0);

                List <Transicion> transiciones = new List <Transicion>();
                for (int i = 0; i < lineasAux.Count; i++)
                {
                    string[] transicion = lineasAux[i].Split(',');

                    char[] leidoAux    = transicion[1].ToCharArray();
                    char[] escribirAux = transicion[3].ToCharArray();
                    char[] movAux      = transicion[4].ToUpper().ToCharArray();

                    Transicion aux = new Transicion
                    {
                        S        = Int32.Parse(transicion[0]),
                        Leido    = leidoAux[0],
                        F        = Int32.Parse(transicion[2]),
                        Escribir = escribirAux[0],
                        Mov      = movAux[0]
                    };
                    transiciones.Add(aux);
                }
                mt.Transiciones = transiciones;
                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
Beispiel #4
0
        public Transicion Buscar_Transicion(int estadoActual, char simbolo)
        {
            Transicion transicion = new Transicion
            {
                Encontrada = false
            };

            for (int i = 0; i < Transiciones.Count; i++)
            {
                if ((Transiciones[i].S == estadoActual) && (Transiciones[i].Leido == simbolo))
                {
                    transicion.S          = Transiciones[i].S;
                    transicion.Leido      = Transiciones[i].Leido;
                    transicion.F          = Transiciones[i].F;
                    transicion.Escribir   = Transiciones[i].Escribir;
                    transicion.Mov        = Transiciones[i].Mov;
                    transicion.Encontrada = true;
                    break;
                }
            }
            return(transicion);
        }
Beispiel #5
0
        //EJECUCIÓN AUTOMÁTICA
        private void BtnAutomatico_Click(object sender, EventArgs e)
        {
            while (!terminado)
            {
                if (CargarTXT.mt.Palabra.Count - (posicionLista + 1) < 0)
                {
                    CargarTXT.mt.Palabra.Add('_');
                }

                Transicion transicionActual = CargarTXT.mt.Buscar_Transicion(estadoActual, CargarTXT.mt.Palabra[posicionLista]);

                if (transicionActual.Encontrada)
                {
                    CargarTXT.mt.Palabra[posicionLista] = transicionActual.Escribir;
                    estadoActual = transicionActual.F;

                    switch (transicionActual.Mov)
                    {
                    case 'D':
                        if (CargarTXT.mt.Palabra.Count - (posicionLista + 1) < 0)
                        {
                            CargarTXT.mt.Palabra.Add('_');
                        }
                        posicionLista += 1;
                        break;

                    case 'I':
                        posicionLista -= 1;
                        break;

                    case '0':
                        break;

                    case 'P':
                        terminado = true;
                        break;

                    default:
                        error     = true;
                        terminado = true;
                        break;
                    }
                }
                else
                {
                    error     = true;
                    terminado = true;
                }

                contadorEjAuto += 1;

                if (contadorEjAuto == 60000000)
                {
                    terminado = true;
                }
            }
            if (contadorEjAuto == 60000000)
            {
                MessageBox.Show(mensajeLoop);
                BtnCambioPaso.Enabled = true;
            }
            else if (error)
            {
                BtnAutomatico.Enabled = false;
                BtnPasoAPaso.Enabled  = false;
                MessageBox.Show("Parece que un movimiento de la cinta es incorrecto...");
                Comenzar_Denuevo();
            }
            else
            {
                txtResultado.Text = Cinta_Actual();
            }
        }
Beispiel #6
0
        //EJECUCIÓN PASO A PASO
        private void BtnPasoAPaso_Click(object sender, EventArgs e)
        {
            Transicion transicionActual = CargarTXT.mt.Buscar_Transicion(estadoActual, CargarTXT.mt.Palabra[posicionLista]);

            if (transicionActual.Encontrada)
            {
                CargarTXT.mt.Palabra[posicionLista] = transicionActual.Escribir;
                estadoActual = transicionActual.F;

                switch (transicionActual.Mov)
                {
                case 'D':
                    if (CargarTXT.mt.Palabra.Count - (posicionLista + 1) < 0)
                    {
                        CargarTXT.mt.Palabra.Add('_');
                    }
                    posicionLista += 1;
                    break;

                case 'I':
                    posicionLista -= 1;
                    break;

                case '0':
                    break;

                case 'P':
                    BtnPasoAPaso.Enabled = false;
                    break;

                default:
                    error     = true;
                    terminado = true;
                    break;
                }
                if (error)
                {
                    BtnAutomatico.Enabled = false;
                    BtnPasoAPaso.Enabled  = false;
                    MessageBox.Show("Parece que un movimiento de la cinta es incorrecto...");
                    Comenzar_Denuevo();
                }
                else
                {
                    if (Cinta_Actual().Length < txtCintaActual.MaxLength)
                    {
                        txtCintaActual.Text = Cinta_Actual();
                    }
                    else
                    {
                        txtCintaActual.Text = "La cinta es demasiado grande para ser mostrada...";
                    }

                    txtPosCabezal.Text   = posicionLista.ToString();
                    txtEstadoActual.Text = estadoActual.ToString();

                    if (CargarTXT.mt.Palabra.Count - (posicionLista + 1) < 0)
                    {
                        CargarTXT.mt.Palabra.Add('_');
                    }

                    Transicion transicionActualAux = CargarTXT.mt.Buscar_Transicion(estadoActual, CargarTXT.mt.Palabra[posicionLista]);
                    txtUltimaTrans.Text = transicionActualAux.F + "," + transicionActualAux.Escribir + "," + transicionActualAux.Mov.ToString();
                }
            }
            else
            {
                txtCintaActual.Text   = txtCintaActual.Text;
                txtPosCabezal.Text    = txtPosCabezal.Text;
                txtEstadoActual.Text  = txtEstadoActual.Text;
                txtUltimaTrans.Text   = txtUltimaTrans.Text;
                BtnPasoAPaso.Enabled  = false;
                BtnCambioAuto.Enabled = false;
                MessageBox.Show("No existe ninguna transición para este caso...");
            }
        }