Example #1
0
        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();




        }
Example #2
0
        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);
        }
Example #3
0
     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;
 }
Example #4
0
        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;
        }
Example #5
0
        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();

        }
Example #6
0
        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);


            }
      
        }
Example #7
0
        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;
    }