public Inicial() { InitializeComponent(); //this.cARGARToolStripMenuItem.Click += new System.EventHandler(this.button6_Click); pincel = new SolidBrush(Color.Red); panel_quintupla.Visible = false; panel_tabla.Visible = false; <<<<<<< HEAD automata = new Clases.Automata(); prueba = new Clases.Estado(); timer1.Enabled = true; p = new Rectangle(50, 50, 50, 50); b1 = false; ======= panel_diagrama.Visible = false; >>>>>>> origin/master crearAutomata(); }
public void crearAutomata() { Clases.Automata automata; LinkedList <String> oelista= new LinkedList<String>(); oelista.AddFirst("a"); oelista.AddFirst("b"); LinkedList<Clases.Estado> listaEstado = new LinkedList<Clases.Estado>(); listaEstado.AddLast(new Clases.Estado("Q0", new LinkedList<Clases.Transicion>(), false)); listaEstado.AddLast(new Clases.Estado("Q1", new LinkedList<Clases.Transicion>(), false)); listaEstado.AddLast(new Clases.Estado("Q2", new LinkedList<Clases.Transicion>(), true)); listaEstado.AddLast(new Clases.Estado("Q3", new LinkedList<Clases.Transicion>(), false)); listaEstado.AddLast(new Clases.Estado("Q4", new LinkedList<Clases.Transicion>(), true)); listaEstado.AddLast(new Clases.Estado("Q5", new LinkedList<Clases.Transicion>(), false)); listaEstado.AddLast(new Clases.Estado("Q6", new LinkedList<Clases.Transicion>(), false)); listaEstado.ElementAt(0).listTransiciones.AddLast(new Clases.Transicion("Q0", "a", "Q2")); listaEstado.ElementAt(0).listTransiciones.AddLast(new Clases.Transicion("Q0", "b", "Q1")); listaEstado.ElementAt(1).listTransiciones.AddLast(new Clases.Transicion("Q1", "a", "Q0")); listaEstado.ElementAt(1).listTransiciones.AddLast(new Clases.Transicion("Q1", "b", "Q2")); listaEstado.ElementAt(2).listTransiciones.AddLast(new Clases.Transicion("Q2", "a", "Q3")); listaEstado.ElementAt(2).listTransiciones.AddLast(new Clases.Transicion("Q2", "b", "Q5")); listaEstado.ElementAt(3).listTransiciones.AddLast(new Clases.Transicion("Q3", "a", "Q6")); listaEstado.ElementAt(3).listTransiciones.AddLast(new Clases.Transicion("Q3", "b", "Q1")); listaEstado.ElementAt(4).listTransiciones.AddLast(new Clases.Transicion("Q4", "a", "Q3")); listaEstado.ElementAt(4).listTransiciones.AddLast(new Clases.Transicion("Q4", "b", "Q5")); listaEstado.ElementAt(5).listTransiciones.AddLast(new Clases.Transicion("Q5", "a", "Q6")); listaEstado.ElementAt(5).listTransiciones.AddLast(new Clases.Transicion("Q5", "b", "Q4")); listaEstado.ElementAt(6).listTransiciones.AddLast(new Clases.Transicion("Q6", "a", "Q2")); listaEstado.ElementAt(6).listTransiciones.AddLast(new Clases.Transicion("Q6", "b", "Q5")); automata= new Clases.Automata("auto1", "Q0", listaEstado,oelista); //minimizar(automata); /* reconocer("ababbb", automata); if (!isCompleto(automata)) { completar(automata); } Console.WriteLine(automata.listEstados.ElementAt(automata.listEstados.Count-1).nombre);*/ reverso(automata); }
public static Clases.Automata reverso(Clases.Automata auto) { Clases.Automata nuevo= new Clases.Automata(); int cont=0; //vamos aver si tiene mas aceptadores for (int i = 0; i <auto.listEstados.Count; i++) { if(auto.listEstados.ElementAt(i).aceptador) { cont++; } } if(cont>1)//tiene mas aceptadores creamos un nuevo estado y todos loa ceptadores los mandamos por vacias a ese nuevo { Clases.Estado estadonuevo= new Clases.Estado("nuevo", true); for (int i = 0; i <auto.listEstados.Count; i++) { if(auto.listEstados.ElementAt(i).aceptador) { auto.listEstados.ElementAt(i).listTransiciones.AddLast(new Clases.Transicion(auto.listEstados.ElementAt(i).nombre,"-",estadonuevo.nombre)); auto.listEstados.ElementAt(i).aceptador=false; } } auto.listEstados.AddLast(estadonuevo); nuevo=cambiar(auto); } else { nuevo=cambiar(auto); } return nuevo; }
public static Clases.Automata intersepcion(Clases.Automata auto1, Clases.Automata auto2) { Clases.Automata nuevo = new Clases.Automata(); String inicial = auto1.inicial + auto2.inicial; for (int i = 0; i < auto1.listEstados.Count; i++) { for (int j = 0; j < auto2.listEstados.Count; j++) { String nombre = auto1.listEstados.ElementAt(i).nombre + auto2.listEstados.ElementAt(j).nombre; LinkedList<Clases.Transicion> lista = new LinkedList<Clases.Transicion>(); for (int k = 0; k < auto1.listEstados.ElementAt(i).listTransiciones.Count(); k++) { String nombre2 = auto1.listEstados.ElementAt(i).listTransiciones.ElementAt(k).destino + auto2.listEstados.ElementAt(j).listTransiciones.ElementAt(k).destino; lista.AddLast(new Clases.Transicion(nombre, auto1.listEstados.ElementAt(i).listTransiciones.ElementAt(k).simbolo, nombre2)); } if (nombre.Equals(inicial)) { nuevo.inicial = nombre; } if (auto1.listEstados.ElementAt(i).aceptador && auto2.listEstados.ElementAt(j).aceptador) { nuevo.listEstados.AddLast(new Clases.Estado(nombre, lista, true)); } else if (!auto1.listEstados.ElementAt(i).aceptador || !auto2.listEstados.ElementAt(j).aceptador) { nuevo.listEstados.AddFirst(new Clases.Estado(nombre, lista, false)); } } } for (int i = 0; i < nuevo.listEstados.Count(); i++) { for (int j = 0; j < 2; j++) { Console.WriteLine(nuevo.listEstados.ElementAt(i).nombre + " por " + nuevo.listEstados.ElementAt(i).listTransiciones.ElementAt(j).simbolo + "para" + nuevo.listEstados.ElementAt(i).listTransiciones.ElementAt(j).destino + "Acetador:" + nuevo.listEstados.ElementAt(i).aceptador); } } return nuevo; }
private void rEINICIARToolStripMenuItem_Click(object sender, EventArgs e) { automata = new Clases.Automata(); reiniciarComboxEstados(transicion_origen_comboBox); reiniciarComboxEstados(transicion_destino_comboBox); reiniciarComboxEstados(aceptador_comboBox); reiniciarComboxEstados(inicial_comboBox); estados_textBox.Text = automata.listEstados.Count + ""; transicion_origen_comboBox.Text=""; transicion_destino_comboBox.Text=""; aceptador_comboBox.Text=""; inicial_comboBox.Text = ""; transicion_caracter_comboBox.Text = ""; //reiniciar tabla reiniciarComboxEstados(destino_tabla_comboBox); reiniciarComboxEstados(origen_tabla_comboBox); reiniciarComboxEstados(tabla_aceptadores_comboBox); reiniciarComboxEstados(tabla_inicial_comboBox); destino_tabla_comboBox.Text = ""; origen_tabla_comboBox.Text = ""; tabla_aceptadores_comboBox.Text=""; tabla_inicial_comboBox.Text=""; caracter_tabla_comboBox.Text = ""; this.caracter_tabla_comboBox.Items.Clear(); foreach (var item in automata.alfabeto) { this.caracter_tabla_comboBox.Items.Add(item); } cargartabla(); }
private void cARGARToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "Automata|*.dat"; openFileDialog1.Title = "Selecciones Un Automata"; if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { String ruta = openFileDialog1.FileName; String p = ruta.Substring(ruta.LastIndexOf('\\') + 1, ruta.LastIndexOf('.') - ruta.LastIndexOf('\\') +3); // MessageBox.Show(ruta); // MessageBox.Show(p); automata= (Clases.Automata)leer(p); } }
public static Clases.Automata convertirVacias(Clases.Automata auto) { Clases.Automata nuevo = new Clases.Automata(); nuevo.alfabeto = auto.alfabeto; nuevo.nombre = "dfa de: " + auto.nombre; String oe2 = ""; LinkedList<Clases.Estado> lista = new LinkedList<Clases.Estado>(); for (int i = 0; i < auto.listEstados.Count; i++) { if (auto.inicial.Equals(auto.listEstados.ElementAt(i).nombre)) { String inicial = auto.listEstados.ElementAt(i).nombre; inicial = inicial + RecorrerVacias(inicial, auto, true);///a qie le mandamos un string nuevo.listEstados.AddLast(new Clases.Estado(inicial, false)); nuevo.inicial = inicial; lista.AddLast(new Clases.Estado(inicial, false)); } else { while (lista.First!=null) { String[] estados = lista.First().nombre.Split(','); for (int q=0;q<auto.alfabeto.Count;q++) { int cont = 0; Boolean es = true; String oe = ""; for (int j = 0; j < estados.Length; j++) { for (int k = 0; k < auto.listEstados.Count(); k++) { if (auto.listEstados.ElementAt(k).nombre.Equals(estados[j])) { for (int l = 0; l < auto.listEstados.ElementAt(k).getLista().Count(); l++) { if (auto.alfabeto.ElementAt(q).Equals(auto.listEstados.ElementAt(k).getLista().ElementAt(l).simbolo)) { cont++; if (!oe.Equals("")) { if (oe.IndexOf(auto.listEstados.ElementAt(k).getLista().ElementAt(l).destino) == -1) { oe = oe + "," + auto.listEstados.ElementAt(k).getLista().ElementAt(l).destino; } } else { if (oe.IndexOf(auto.listEstados.ElementAt(k).getLista().ElementAt(l).destino) == -1) { oe = auto.listEstados.ElementAt(k).getLista().ElementAt(l).destino; } } } } } } } if (cont == 0) { continue; } oe2=""; String[] trans = oe.Split(','); for (int j = 0; j < trans.Length; j++) { oe2 =oe2+","+ trans[j] + RecorrerVacias(trans[j], auto, true); } trans=oe2.Split(','); //eliminar repetidos oe2=""; for (int j = 0; j < trans.Length; j++) { if(oe2.IndexOf(trans[j])==-1){ if(oe2.Equals("")) { oe2=trans[j]; } else { oe2=oe2+","+trans[j]; } } } String[] vector; String oe3 = ""; for (int k = 0; k < nuevo.listEstados.Count(); k++) { vector = soniguales(nuevo.listEstados.ElementAt(k).nombre, oe2, lista.First().nombre); if (nuevo.listEstados.ElementAt(k).nombre.Equals(vector[2])) { nuevo.listEstados.ElementAt(k).getLista().AddLast(new Clases.Transicion(nuevo.listEstados.ElementAt(k).nombre, auto.alfabeto.ElementAt(q), vector[0])); oe3 = vector[0]; } if (vector[0].Equals(vector[1])) { es = false; } } if (es == true) { nuevo.listEstados.AddLast(new Clases.Estado(oe3, false)); lista.AddLast(nuevo.listEstados.Last()); } } lista.RemoveFirst(); } for (int w = 0; w < nuevo.listEstados.Count;w++ ) { String[] nombre = nuevo.listEstados.ElementAt(w).nombre.Split(','); for (int j = 0; j < nombre.Length; j++) { for (int k = 0; k < auto.listEstados.Count(); k++) { if (nombre[j].Equals(auto.listEstados.ElementAt(k).nombre)) { if (auto.listEstados.ElementAt(k).aceptador) { nuevo.listEstados.ElementAt(w).aceptador = true; break; } } } } } break; } } return nuevo; }