martes, 5 de enero de 2021

Autómata en C#

 

using System;

 

namespace ej_automata

{

    class Program

    {

        static void Main(string[] args)

        {

            //mostrar en pantalla que inserte la cadena a validar

            Console.WriteLine("Inserte una cadena");

            //leer la cadena escrita y almacenarla en una variable

            string cadena = Console.ReadLine();

            //estado inicial del autómata

            int estado_inicial=1;

            //estado final del autómata

            int estado_final = 1;

            //asignar el esatdo en el que inicia el autómata

            //la variable estado actual servirá para ir almacenando el estado en

            //el que está el autómata

            int estado_actual = estado_inicial;

 

            //con un ciclo for recorremos cada uno de los elementos de la cadena

            for (int i = 0; i < cadena.Length; i++)

            {

                //mediante el switch case podemos recorrer cada uno de los estados del autómata

                //y con los if podemos evaluar que pasa de acuerod al caracter que entra (letra)

                switch (estado_actual)

                {

                    case 1:

                        if (Equals(cadena[i], '1'))

                        {

                            estado_actual = 1;

                         }

                        if (Equals(cadena[i], '0'))

                        {

                            estado_actual = 2;

                        }

                        break;

                    case 2:

                        if (Equals(cadena[i], '1'))

                        {

                            estado_actual = 2;

                        }

                        if (Equals(cadena[i], '0'))

                        {

                            estado_actual = 1;

                        }

                        break;

                }

            }

 

            //se valida si el autómata quedó en el estado final

            if (estado_actual == estado_final)

            {

                Console.WriteLine("Cadena válida");

            }

            else

            {

                Console.WriteLine("Cadena inválida");

            }

 

            Console.ReadKey();

        }

    }

}