예제 #1
0
 public void Mostrar()
 {
     if (this.primero != null && this.primero.izquierda != null && this.primero.derecha != null &&
         this.estadoInicial != null && this.estadoFinal != null)
     {
         Console.WriteLine("alfabeto A = {0,1}");
         Console.WriteLine("S(->" + this.estadoInicial.nombre, ")");
         Console.WriteLine("F=(" + this.estadoFinal.nombre, ")");
         Vertice aux = this.primero;
         while (aux != null)
         {
             Console.WriteLine("S(", aux.nombre, ",0)=", aux.izquierda.ver.nombre);
             Console.WriteLine("S(", aux.nombre, ",1)=", aux.derecha.ver.nombre);
             aux = aux.sig;
         }
     }
     else
     {
         Console.WriteLine("automata aun no se ha creado");
     }
 }
예제 #2
0
        public void crearEstado()
        {
            if (this.primero == null)
            {
                Console.WriteLine("ingrese letra de primer estado");
                this.primero = new Vertice(char.Parse(Console.ReadLine()));
                this.ultimo  = this.primero;
            }
            else
            {
                Console.WriteLine("ingrese letra del estado");
                Vertice nuevo = new Vertice(char.Parse(Console.ReadLine()));

                while (this.existe(this.primero, nuevo.getNombre()))
                {
                    Console.WriteLine("ingrese letra de estado");
                    nuevo.setNombre(char.Parse(Console.ReadLine()));
                }
                this.ultimo.setProximo(nuevo);
                this.ultimo = nuevo;
            }
            Console.ReadKey(true);
        }
예제 #3
0
        public void estados()
        {
            if (this.primero != null)
            {
                char inicial = raw_input("ingrese letra de  vertice inicial");
                char final   = raw_input("ingrese letra de vertice final");

                while (!this.existe(inicial, this.primero))
                {
                    inicial = raw_input("ingrese letra de  vertice inicial");
                }

                while (!this.existe(final, this.primero))
                {
                    final = raw_input("ingrese letra de vertice final");
                }

                Vertice aux = this.primero;
                while (aux.nombre != inicial)
                {
                    aux = aux.sig;
                }

                Vertice aux2 = this.primero;
                while (aux2.nombre != final)
                {
                    aux2 = aux2.sig;
                }

                this.estadoInicial = aux;
                this.estadoFinal   = aux2;
            }
            else
            {
                Console.WriteLine("aun no existe ni un solo estado");
            }
        }
예제 #4
0
        public void crearVertice()
        {
            Vertice nue = new Vertice();

            nue.nombre = raw_input("Digite la letra del estado: ");

            if (this.primero == null)
            {
                this.primero = nue;
                this.ultimo  = this.primero;
            }
            else
            {
                while (existe(nue.nombre, this.primero))
                {
                    nue.nombre = raw_input("Digite nuevamente la letra del estado: ");
                }

                this.ultimo.sig = nue;
                nue.ant         = this.ultimo;
                this.ultimo     = nue;
            }
            raw_input("estado registrado correctamente.");
        }
예제 #5
0
        public void enlazarVertices()
        {
            char auxNod  = 'a';
            char auxNod2 = 'b';

            if (this.primero != null)
            {
                Vertice auxw = this.primero;
                while (auxw != null)
                {
                    Console.WriteLine(auxw.nombre);
                    auxw = auxw.sig;
                }
                auxNod = raw_input("\nDigite la letra del estado al cual desea enlazar: ");

                while (!this.existe(auxNod, this.primero))
                {
                    auxNod = raw_input("\nDigite la letra del estado al cual desea enlazar: ");
                }

                auxNod2 = raw_input("\nDigite la letra del estado a donde se dirige: ");

                while (!this.existe(auxNod2, this.primero))
                {
                    auxNod2 = raw_input("\nDigite la letra del estado a donde se dirige: ");
                }

                Vertice aux = optenerDireccion(auxNod);

                Vertice aux2 = optenerDireccion(auxNod2);

                //arco auxiliar 1 apunta al vertice
                Vertice nueArc = nuevoArco(aux2);

                while (nueArc.clave < 0)
                {
                    nueArc.clave = input("\nDigite el valor del enlace:(1/0) ");
                }

                if (nueArc.clave == 0)
                {
                    if (aux.izquierda == null)
                    {
                        aux.izquierda = nueArc;
                        Console.WriteLine("\nEnlace creado correctamente.");
                    }
                    else
                    {
                        Console.WriteLine("arco ya utilizado");
                    }
                }
                else if (nueArc.clave == 1)
                {
                    if (aux.derecha == null)
                    {
                        aux.derecha = nueArc;
                        Console.WriteLine("\nEnlace creado correctamente.");
                    }
                    else
                    {
                        Console.WriteLine("arco ya utilizado");
                    }
                }
            }
        }
예제 #6
0
        public void enlazarEstados()
        {
            if (this.primero != null)
            {
                Console.WriteLine("ingrese letra de primer estado");
                char inicio = char.Parse(Console.ReadLine());

                while (!this.existe(this.primero, inicio))
                {
                    Console.WriteLine("ingrese letra de primer estado");
                    inicio = char.Parse(Console.ReadLine());
                }
                Console.WriteLine("ingrese letra de primer estado");
                char final = char.Parse(Console.ReadLine());

                while (!this.existe(this.primero, final))
                {
                    Console.WriteLine("ingrese letra de primer estado");
                    final = char.Parse(Console.ReadLine());
                }
                Console.WriteLine("digite el numero del enlace (1/0):");
                int enlace = Console.Read();

                while (enlace != 1 && enlace != 0)
                {
                    Console.WriteLine("digite el numero del enlace (1/0):");
                    enlace = Console.Read();
                }

                Console.WriteLine("apilar o desapilar (1/0)");
                int accion = Console.Read();

                while (accion != 1 && accion != 0)
                {
                    Console.WriteLine("apilar o desapilar (1/0)");
                    accion = Console.Read();
                }
                Console.WriteLine("que simbolo estara en la sima(z,a o b)");
                char simbolo = char.Parse(Console.ReadLine());

                while (simbolo != 'z' && simbolo != 'a' && simbolo != 'b')
                {
                    Console.WriteLine("que simbolo estara en la sima(z,a o b)");
                    simbolo = char.Parse(Console.ReadLine());
                }
                Vertice aux1 = busqueda(this.primero, inicio);
                Vertice aux2 = busqueda(this.primero, final);

                //antes abajo estaba aux sin el 1
                if (!enlaceExiste(accion, simbolo, aux1))
                {
                    if ((accion == 0) && (simbolo == 'a'))
                    {
                        aux1.setArco(new Vertice(aux2, enlace, accion, simbolo), 0);
                    }

                    else if ((accion == 0) && (simbolo == 'b'))
                    {
                        aux1.setArco(new Vertice(aux2, enlace, accion, simbolo), 1);
                    }

                    else if ((accion == 1) && (simbolo == 'a'))
                    {
                        aux1.setArco(new Vertice(aux2, enlace, accion, simbolo), 2);
                    }

                    else if ((accion == 1) && (simbolo == 'b'))
                    {
                        aux1.setArco(new Vertice(aux2, enlace, accion, simbolo), 3);
                    }
                    //para 'z'

                    else if ((accion == 0) && (simbolo == 'z'))
                    {
                        aux1.setArco(new Vertice(aux2, enlace, accion, simbolo), 4);
                    }

                    else if ((accion == 1) && (simbolo == 'z'))
                    {
                        aux1.setArco(new Vertice(aux2, enlace, accion, simbolo), 5);
                    }

                    Console.WriteLine("enlace creado correctamente");
                    Console.ReadKey(true);
                }
                else
                {
                    Console.WriteLine("ya existe ese arco");
                }
            }


            else
            {
                Console.WriteLine("no existe ni un solo estado");
            }
        }
 public void setProximo(Vertice proximo)
 {
     this.proximo = proximo;
 }
 //para vertice
 public Vertice(char nombre)
 {
     this.Arco    = new Vertice[6];
     this.nombre  = nombre;
     this.proximo = null;
 }