//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(); } }
//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(); }
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); } }
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); }
//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(); } }
//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..."); } }