예제 #1
0
        public string inicioMaquina(List <String> fita)
        {
            parada = false;
            int i = -1;

            posFita = 0;
            sw.Start();
            string atual = inicial.estado;

            while (parada == false)
            {
                i = retornaEstados(atual, fita);

                if (i == -1)
                {
                    string fitaLinha = "";
                    for (int t = 1; t < fita.Count - 1; t++)
                    {
                        fitaLinha = fitaLinha + fita[t];
                    }
                    // Console.WriteLine("FITA LINHA -> " + fitaLinha);
                    parada = true;
                    //sw.Stop();
                    //TimeSpan tempo = sw.Elapsed;
                    //Console.WriteLine("TEMPO -> " + tempo);
                    return(fitaLinha + ";0");
                }
                else
                {
                    Estados aux = new Estados();
                    aux.estado = transicoes[i].To;
                    if (fita[posFita] == branco && verificarEstadosFinais(aux) == true)
                    {
                        string fitaLinha = "";
                        for (int y = 1; y < fita.Count - 1; y++)
                        {
                            fitaLinha = fitaLinha + fita[y];
                        }
                        // Console.WriteLine("FITA LINHA -> " + fitaLinha);
                        //sw.Stop();
                        //TimeSpan tempo = sw.Elapsed;


                        //Console.WriteLine("TEMPO -> " + tempo);
                        parada = true;
                        return(fitaLinha + ";1");
                    }
                    if (fita[posFita] == inicio && verificarEstadosFinais(aux) == true)
                    {
                        string fitaLinha = "";
                        for (int y = 1; y < fita.Count - 1; y++)
                        {
                            fitaLinha = fitaLinha + fita[y];
                        }
                        // Console.WriteLine("FITA LINHA -> " + fitaLinha);
                        //sw.Stop();
                        //TimeSpan tempo = sw.Elapsed;

                        parada = true;
                        return(fitaLinha + ";1");
                    }
                    fita[posFita] = transicoes[i].writeSymbol;
                    atual         = transicoes[i].To;
                    if (atual.Equals(""))
                    {
                        parada = true;
                    }
                    if (transicoes[i].direction == "D")
                    {
                        if (fita.Count() == posFita)
                        {
                            fita.Add(branco);
                        }
                        posFita++;
                    }
                    else if (transicoes[i].direction == "E")
                    {
                        if (posFita == 0)
                        {
                            parada = true;
                        }
                        posFita--;
                    }
                }
            }
            return(null);
        }
예제 #2
0
        public void inicioMaquina()
        {
            fileMaquinaTuring();
            fileEntrada();
            string atual   = inicial.estado;
            int    i       = 0;
            int    posFita = 0;
            bool   parada  = false;

            i = 0;
            do
            {
                Console.Write("1");
                if (transicoes[i].readSymbol.Equals(fita[posFita]) && atual.Equals(transicoes[i].From) && fita[posFita].Equals(transicoes[i].readSymbol))
                {
                    Estados aux = new Estados();
                    aux.estado = transicoes[i].To;
                    //Console.WriteLine("COMECA VERIFICACAO -------------------");
                    if (fita[posFita] == branco && verificarEstadosFinais(aux) == true)
                    {
                        Console.WriteLine("ATUAL -> " + atual);
                        Console.WriteLine("PARO BRANCO");
                        parada = true;
                    }
                    if (fita[posFita] == inicio && verificarEstadosFinais(aux) == true)
                    {
                        Console.WriteLine("PARO INICIO");
                        parada = true;
                    }
                    //Console.WriteLine("----------- ATUAL " + aux.estado);
                    //Console.WriteLine(fita[posFita] + " é igual a " + branco);
                    //Console.WriteLine(aux.estado + " contem em finais: " + finais.Contains(aux));
                    //Console.WriteLine("TERMINA ---------------------------------------");

                    Console.WriteLine("ATUAL -> " + atual);
                    Console.WriteLine("LEU FITA -> " + fita[posFita]);
                    Console.WriteLine("POSICAO FITA -> " + posFita);
                    Console.WriteLine("ESCREVEU FITA ->" + transicoes[i].writeSymbol);
                    Console.WriteLine("FOI PARA -> " + transicoes[i].To);
                    fita[posFita] = transicoes[i].writeSymbol;
                    atual         = transicoes[i].To;
                    if (transicoes[i].direction == "D")
                    {
                        posFita++;

                        //Console.Write("DIREITA");
                    }
                    else if (transicoes[i].direction == "E")
                    {
                        posFita--;
                        //Console.WriteLine("Esquerda");
                    }
                }// else if (!transicoes[i].readSymbol.Equals(fita[posFita]) && !atual.Equals(transicoes[i].From) && !fita[posFita].Equals(transicoes[i].readSymbol)) {
                 //    Console.WriteLine("REJEEITO");
                 //    parada = true;
                 //}

                i++;
                if (i == transicoes.Count)
                {
                    i = 0;
                }
            } while (parada == false);
            Console.Write("\n");
            foreach (var a in fita)
            {
                Console.Write(a + "\n");
            }
        }