示例#1
0
 static void Main(string[] args)
 {
     Automata objAutomata = new Automata();
     String cadena = "010110111";
     caracteres = cadena.ToCharArray();
     objAutomata.inicio();
 }
示例#2
0
        static void Main(string[] args)
        {
            Automata objAutomata = new Automata();
            String   cadena      = "010110111";

            caracteres = cadena.ToCharArray();
            objAutomata.inicio();
        }
        public static Automata MinimizeDFSM(Automata fsm)
        {
            var reversedNDFSM = Reverse(fsm);
            var reversedDFSM  = PowersetConstruction(reversedNDFSM);

            //var NDFSM = Reverse(reversedDFSM);
            //return PowersetConstruction(NDFSM);
            return(reversedDFSM);
        }
        private static NDFSM Reverse(Automata d)
        {
            var delta = new List <Transicion>();

            foreach (var transition in d.Transicion)
            {
                delta.Add(new Transicion(transition.EstadoFinal, transition.Simbolo, transition.EstadoInicial));
            }
            return(new NDFSM(d.Estados, d.Lenguaje, delta, d.EstadoFinal, d.EstadoInicial));
        }
示例#5
0
        static void Main(string[] args)

        {
            Automata aut = new Automata();

            Console.WriteLine("Escribe la palabra a evaluar separando cada caracter por espacios");
            aut.PaEvaluar = Console.ReadLine();

            aut.Car = aut.PaEvaluar.ToCharArray(0, aut.PaEvaluar.Length);
            aut.Inicio();
        }
示例#6
0
        static void Main(string[] args)

        {
            Automata aut = new Automata();

            Console.WriteLine("Matias Olarte Servado \n");
            Console.WriteLine("Escribe la palabra a evaluar");
            aut.PaEvaluar = Console.ReadLine();

            aut.Car = aut.PaEvaluar.ToCharArray(0, aut.PaEvaluar.Length);
            aut.Inicio();
            Console.WriteLine("\n presione cuaquilquier tecla para salir del programa...");
            Console.ReadKey();
        }
        /// <summary>
        /// Método que simula el recorrido del autómata.
        /// </summary>
        /// <param name="textoArchivo">Texto a simular</param>
        /// <param name="minimiza">Bandera para saber si se va a minimizar.</param>
        /// <returns>Resultado de la simulación</returns>
        private bool PreparaParametros(string textoArchivo, bool minimiza)
        {
            try
            {
                bool resultado = false;
                textoArchivo = textoArchivo.Replace("\r\n", "\r");
                string[] cadena = textoArchivo.Split('\r');
                foreach (string linea in cadena)
                {
                    linea.Replace("\r", "");
                }

                string entrada    = cadena[0].Replace(";", "");
                string alfabeto   = cadena[1];
                string edoInicial = cadena[2];
                string edoFinal   = cadena[3];

                var estadoInicial = "q" + edoInicial;
                var estados       = new List <string>();
                int contador      = 0;
                for (int i = 4; i < cadena.Length; i++)
                {
                    estados.Add("q" + contador);
                    contador++;
                }

                var      lenguaje  = new List <char>();
                string[] alfabetoA = alfabeto.Split(';');
                foreach (string caracter in alfabetoA)
                {
                    if (caracter != string.Empty)
                    {
                        lenguaje.Add(Convert.ToChar(caracter));
                    }
                }

                var      estadoFinal = new List <string>();
                string[] edosFinales = edoFinal.Split(';');
                foreach (string caracter in edosFinales)
                {
                    if (caracter != string.Empty)
                    {
                        estadoFinal.Add('q' + caracter);
                    }
                }

                var estadosTransicion = new List <string>();
                for (int i = 4; i < cadena.Length; i++)
                {
                    estadosTransicion.Add(cadena[i]);
                }
                var matrizTransicion = GeneraMatrizTransicion(estadosTransicion, lenguaje, estados);
                var x = new List <string>();
                x.Add(estadoInicial);
                var automata = new Automata(estados, lenguaje, matrizTransicion, x, estadoFinal);
                if (minimiza)
                {
                    var banderita = true;
                    automata = Minimize.MinimizeDFSM(automata);
                    string delta = ObtieneMatriz(automata.Transicion);
                    string res   = ComparaEstados(estados, automata.Estados);
                    if (banderita)
                    {
                        lblResultado.Text = "EJECUCIÓN\r\nCOMPLETADA";
                        txtResultado.Text = "Se encontraron estados equivalentes: " + res + "" +
                                            "\r\n\r\nLenguaje: " + alfabeto +
                                            "\r\nEstado Inicial: " + string.Join(";", automata.EstadoInicial.ToArray()) +
                                            "\r\nEstados Finales: " + string.Join(";", automata.EstadoFinal.ToArray()) +
                                            "\r\nMatriz Transición:\r\n" + delta;
                        string path = @"C:\ResultadoMinimización.txt";
                        if (!File.Exists(path))
                        {
                            File.Create(path);
                            TextWriter tw = new StreamWriter(path);
                            tw.WriteLine(txtResultado.Text);
                            tw.Close();
                        }
                        else if (File.Exists(path))
                        {
                            System.IO.File.WriteAllText(path, string.Empty);
                            using (var tw = new StreamWriter(path, true))
                            {
                                tw.WriteLine(txtResultado.Text);
                                tw.Close();
                            }
                        }
                    }
                    else
                    {
                        lblResultado.Text = "EJECUCIÓN\r\nCOMPLETADA";
                        txtResultado.Text = "No se encontraron estados equivalentes";
                    }
                    VisualizarComponentes();
                }
                else
                {
                    automata.Simular(entrada);
                    txtResultado.Text = Automata.resultadoTexto;
                    if (Automata.resultado)
                    {
                        lblResultado.Text = "ACEPTADA";
                    }
                    else
                    {
                        lblResultado.Text = "RECHAZADA";
                        txtResultado.Text = "La simulación no fue completada.\r\nYa que no es posible completar con éxito el recorrido de la entrada.";
                    }
                    VisualizarComponentes();
                }
                return(resultado);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(false);
            }
        }