private string PrimerMovimientoResta(string cadena, int pos)
        {
            int i = pos;

            resta.Cabezal.Posicion = i;
            List <char> cinta = cadena.ToCharArray().ToList();

            //Movimiento Inicial
            resta.Movimiento(cinta[i].ToString(), 0);
            cinta[i] = resta.Cabezal.NuevoCaracter;
            i++;
            resta.Cabezal.NuevoCaracter = cinta[i];
            resta.Cabezal.Posicion      = i;

            //Escribir la cadena de salida
            string result = string.Empty;

            foreach (var element in cinta)
            {
                result += element.ToString();
            }

            this.main       = resta.Cabezal;
            this.finalizado = resta.Finalizado;
            this.error      = resta.Finalizado;

            return(result);
        }
 public Multiplicacion(string[,] tablaDeTransiciones)
 {
     this.transiciones = tablaDeTransiciones;
     this.error        = false;
     this.finalizado   = false;
     this.cabezal      = new Cabezal();
 }
        private string PrimerMovimientoPalindromo(string cadena, int pos)
        {
            int i = pos;

            p.Cabezal.Posicion = i;
            List <char> cinta = cadena.ToCharArray().ToList();

            //Movimiento Inicial
            p.Movimiento(cinta[i].ToString(), 0);
            cinta[i] = p.Cabezal.NuevoCaracter;
            i++;
            p.Cabezal.NuevoCaracter = cinta[i];
            p.Cabezal.Posicion      = i;

            //Escribir la cadena de salida
            string result = string.Empty;

            foreach (var element in cinta)
            {
                result += element.ToString();
            }

            //Alieneación de cabezal
            this.main       = p.Cabezal;
            this.finalizado = p.Finalizado;
            this.error      = p.Error;

            return(result);
        }
        public MaquinaTuring()
        {
            main = new Cabezal();

            p = new Palindromos(new string[, ]
            {
                { " ", "a", "b", "c", "β" },
                { "-> q0", "q1,β,R", "q2,β,R", "q3,β,R", "q11,β,L" },
                { "q1", "q4,a,R", "q4,b,R", "q4,c,R", "q11,β,L" },
                { "q2", "q5,a,R", "q5,b,R", "q5,c,R", "q11,β,L" },
                { "q3", "q6,a,R", "q6,b,R", "q6,c,R", "q11,β,L" },
                { "q4", "q4,a,R", "q4,b,R", "q4,c,R", "q7,β,L" },
                { "q5", "q5,a,R", "q5,b,R", "q5,c,R", "q8,β,L" },
                { "q6", "q6,a,R", "q6,b,R", "q6,c,R", "q9,β,L" },
                { "q7", "q10,β,L", "-", "-", "-" },
                { "q8", "", "q10,β,L", "-", "-" },
                { "q9", "-", "-", "q10,β,L", "-" },
                { "q10", "q10,a,L", "q10,b,L", "q10,c,L", "q0,β,R" },
                { "* q11", "-", "-", "-", "-" }
            });
            copy  = new CopiaPatrones(new string[, ] {
            });
            mult  = new Multiplicacion(new string[, ] {
            });
            sum   = new Suma(new string[, ] {
            });
            resta = new Resta(new string[, ] {
            });

            finalizado = false;
            error      = false;
        }
 public CopiaPatrones(string[,] tablaDeTransiciones)
 {
     this.transiciones = tablaDeTransiciones;
     this.error        = false;
     this.finalizado   = false;
     this.cabezal      = new Cabezal();
 }
 public Palindromos(string[,] tablaDeTransiciones)
 {
     this.transiciones = tablaDeTransiciones;
     this.error        = false;
     this.finalizado   = false;
     this.cabezal      = new Cabezal();
 }
        private string MovimientoResta(string cadena, int pos)
        {
            int i = pos;

            resta.Cabezal.Posicion = i;
            List <char> cinta = cadena.ToCharArray().ToList();

            resta.Cabezal.NuevoCaracter = cinta[i];
            resta.Cabezal.Posicion      = i;
            resta.Movimiento(cinta[i].ToString(), resta.Cabezal.Estado);
            cinta[i] = resta.Cabezal.NuevoCaracter;

            //Movimiento del cabezal
            if (resta.Cabezal.Direccion == 0)
            {
                if (i == 0)
                {
                    cinta.Insert(0, 'β');
                }
                else
                {
                    i--;
                    resta.Cabezal.Posicion = i;
                }
            }

            if (resta.Cabezal.Direccion == 1)
            {
                if (i == cinta.Count - 1)
                {
                    cinta.Add('β');
                }

                i++;
                resta.Cabezal.Posicion = i;
            }

            //Escribir la cadena de salida
            string result = string.Empty;

            foreach (var element in cinta)
            {
                result += element.ToString();
            }

            //Asignación de Cabezales
            this.main = resta.Cabezal;

            this.finalizado = resta.Finalizado;
            this.error      = resta.Error;

            return(result);
        }