Este código en C++ implementa un simulador de autómatas finitos. Un autómata finito es un modelo matemático usado en la teoría de lenguajes formales que permite reconocer si una cadena pertenece a un lenguaje regular. A continuación, vamos a detallar el funcionamiento de cada parte del código.
1. Definición de la clase Automaton
La clase Automaton encapsula toda la lógica para representar y simular un autómata finito. Contiene variables para almacenar el alfabeto, el conjunto de estados, las transiciones entre estados, y los estados de aceptación.
Atributos privados de la clase:
std::set<char> alphabet
: Un conjunto que contiene los símbolos que forman parte del alfabeto del autómata.int numStates
: El número total de estados que tiene el autómata.int initialState
: El estado inicial en el que comienza el autómata.std::set<int> acceptingStates
: Un conjunto que almacena los estados de aceptación.std::map<int, std::map<char, int>> transitions
: Un mapa que define las transiciones entre los estados, donde para cada estado se asocia un símbolo de entrada con un estado de destino.
Métodos públicos de la clase:
1.1. Método bool loadAutomaton(const std::string& filename)
Este método se encarga de cargar las especificaciones del autómata desde un archivo de texto.
- Abrir el archivo: Primero, intenta abrir el archivo cuyo nombre es pasado como parámetro. Si no se puede abrir, imprime un mensaje de error y devuelve
false
. - Leer el alfabeto: Lee la primera línea del archivo, que contiene los símbolos del alfabeto separados por espacios. Utiliza un flujo de entrada
istringstream
para leer los símbolos y agregarlos al conjuntoalphabet
. - Leer el número de estados y el estado inicial: En las siguientes líneas del archivo, se obtiene el número total de estados del autómata y el estado inicial.
- Leer los estados y transiciones: Para cada estado, el método:
- Verifica si es un estado de aceptación (1 si es de aceptación, 0 si no lo es) y lo agrega al conjunto
acceptingStates
si corresponde. - Lee el número de transiciones que tiene el estado.
- Para cada transición, lee el símbolo de entrada y el estado de destino, agregándolos al mapa de transiciones.
El método retorna true
si el archivo se carga correctamente.
1.2. Método bool isAccepted(const std::string& input)
Este método simula el comportamiento del autómata para una cadena de entrada y determina si es aceptada o rechazada.
- Inicialización: Comienza en el estado inicial del autómata.
- Procesamiento de cada símbolo:
- Recorre cada símbolo de la cadena de entrada. Verifica si el símbolo pertenece al alfabeto, si no es así, muestra un mensaje de error y retorna
false
. - Luego verifica si existe una transición desde el estado actual con ese símbolo. Si no hay una transición válida, retorna
false
. - Si hay una transición válida, el autómata se mueve al estado de destino correspondiente a ese símbolo.
- Verificación del estado final: Después de procesar toda la cadena, verifica si el estado en el que terminó es un estado de aceptación. Si lo es, retorna
true
, indicando que la cadena fue aceptada; de lo contrario, retornafalse
.
2. Función main
La función principal se encarga de orquestar la ejecución del simulador. Los pasos son los siguientes:
- Verificación de los argumentos: Si no se proporcionan los archivos correctos (el archivo del autómata y el archivo de las cadenas de entrada), se muestra un mensaje de uso adecuado del programa y se termina la ejecución.
- Cargar el autómata: Se crea un objeto de la clase
Automaton
y se llama al métodoloadAutomaton()
para cargar el autómata desde el archivo.fa
. Si no se puede cargar, el programa termina con un código de error. - Leer las cadenas de entrada: Se abre el archivo que contiene las cadenas de entrada. Cada línea de este archivo es una cadena que debe ser evaluada por el autómata.
- Procesar cada cadena:
- Para cada cadena, se llama al método
isAccepted()
del autómata. - Se imprime si la cadena es “Accepted” o “Rejected” en función del resultado del método
isAccepted()
.
3. Ejemplo de ejecución
Supongamos que tenemos un archivo input.fa
con el siguiente contenido:
0 1
4
0
0 0 2 0 2 1 1
1 1 2 0 1 1 1
2 0 2 0 1 1 3
3 0 2 0 2 1 3
Y un archivo input.txt
con las cadenas:
100
111
001
101
El simulador procesaría cada cadena en el archivo input.txt
y mostraría si son aceptadas o rechazadas por el autómata definido en input.fa
.
Conclusión
Este código permite simular el comportamiento de un autómata finito. A través de la clase Automaton
, es capaz de cargar un autómata desde un archivo, procesar cadenas de entrada y determinar si son aceptadas o rechazadas en función de las transiciones definidas. La estructura del código sigue buenas prácticas de programación, utilizando estructuras estándar de C++ como std::set
y std::map
para manejar los estados y las transiciones de manera eficiente.
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- 🛠️ Cómo crear un plugin en WordPress desde cero (Guía paso a paso)
- 📶 Cómo Crear un Hotspot WiFi en Windows 10 (Paso a Paso)
- 🕵️♂️ Aprende a usar Wireshark: Filtrar tráfico por IP, URL, MAC y más
- 🧩 Subconsultas, HAVING y Subconsultas Binomiales en MySQL: Guía Completa
- 🔍 Principales Comandos y Subconsultas en MySQL: SUM, AVG, MOD y Más
- 26 de marzo CERRADOS.
- ¡Aprende y Refuerza tus Consultas SQL en la Base de Datos de Alumnos!
- La Academia SanRoque lanza su primer podcast de historia: Un viaje a la España medieval
- OFERTA ESPECIAL PARA EL DÍA DEL PADRE.
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed