Autómata Traductor de Código Morse

Documentos relacionados
Estructura de Datos. Estructuras de Datos no lineales : Árboles

ESTRUCTURAS DE DATOS Y ALGORITMOS

Máquinas de estado finito y expresiones regulares

Un árbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

ESTRUCTURA DE DATOS. ABB Arboles de Búsqueda Binaria

Teoría de la Computación y Lenguajes Formales

Nombre de la asignatura: Lenguajes y Autómatas I. Créditos: Aportación al perfil

Tema: Métodos de Ordenamiento. Parte 3.

Modelos de Computación. Guía Modelos de Computación. Tema VI: Maquinas De Estado Finito Con Salida

Capítulo 9. Introducción a los lenguajes formales. Continuar

Teoría de Autómatas y Compiladores [ICI-445] Capítulo 2: Autómatas Finitos

Simulación de un Cajero Automático

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Organización del Computador CI-3815

TIPOS DE GRAMATICAS JERARQUIAS DE CHOMSKY

NOTAS PARA LA MATERIA LENGUAJES DE PROGRAMACIÓN

Capítulo 8. Árboles. Continuar

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Definición: NODO Un nodo es un punto de intersección o unión de varios elementos que confluyen en el mismo lugar.

autómatas finitos y lenguajes regulares LENGUAJES FORMALES Y

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

300CIG007 Computabilidad y Lenguajes Formales: Autómatas Finitos

Tema: Autómatas de Estado Finitos

Introducción a los árboles. Lección 11

Curso Básico de Computación Preliminares

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Curso Básico de Computación

Estructura de Datos Unidad 6: ARBOLES

Autómatas Finitos Deterministicos (DFA)

Tema: Arboles en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Definición de Árbol Binario. Programación IV. Guía No.

Programación con Estructuras de Datos

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Autómatas Finitos Deterministicos (DFA)

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Árboles binarios. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Definición 1: Un grafo G es una terna ordenada (V(G), E(G), Ψ

Matemáticas Básicas para Computación

Introducción a Árboles Árboles Binarios

Introducción a Árboles Árboles Binarios

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos

Estructuras de datos utilizando JAVA

Autómatas Finitos Deterministicos (DFA) Introducción a la Complejidad Computacional FFHA, Universidad Nacional de San Juan

Estructuras de Datos II

Traductores Push Down

Tema: Métodos de Ordenamiento. Parte 3.

Tema: Autómata de Pila

Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices.

95.12 Algoritmos y Programación II Práctica 7: árboles

Arboles Binarios de Búsqueda en C++

Francisco J. Hernández López

Teoría de la Computación y Leguajes Formales

09 Análisis léxico V Compiladores - Profr. Edgardo Adrián Franco Martínez

Definición recursiva de los árboles

Matemáticas Discretas Tc1003 Teoría de Grafos

Lenguajes Incontextuales

Tema 1: Introducción. Teoría de autómatas y lenguajes formales I

Procesadores de Lenguaje

Definición 1.1 Sea G = (V, A) un grafo no dirigido. G se denomina árbol si es conexo y no contiene ciclos.

Implementación de diccionarios sobre Trie en C++

Matemáticas Discretas Tc1003 Teoría de Grafos

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

ÍNDICE. Índice de figuras Índice de tablas INTRODUCCIÓN OBJETIVOS DEL PROYECTO... 21

Autómata de Pila (AP, PDA) Sesión 18

1. Define que es un Autómatas finitos determinanticos y cuáles son sus elementos constitutivos (explique cada uno de ellos).

Máquina de estado finito con salida sin salida

Computabilidad y Lenguajes Formales: Autómatas Finitos

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Ciencias de la Computación I

Introducción a la Teoría de Autómatas, Lenguajes y Computación

Introducción a la Lógica y la Computación

Programación Estructuras Arborescentes

Diseño de Sistemas Secuenciales Síncronos. Registros y contadores. Tema 9

Francisco J. Hernández López

Computabilidad y Lenguajes Formales: Teoría de la Computabilidad: Máquinas de Turing

Taller de Programación I. Tema 08: Estructuras Dinámicas de Datos en Java

Autómata de Pila (AP, PDA) Tema 18

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz

PRACTICA 5: Autómatas Finitos Deterministas

Equivalencia Entre PDA y CFL

Definiciones previas

Examen No. 3 Valor: 50 Puntos (25% de la Nota Final) Tiempo Máximo 2 Horas Fecha: 9 de Diciembre del 2016

Tema 08: TAD Árbol. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Autómata finito y Expresiones regulares A* C. B

UNIDAD 9. DATOS COMPLEJOS PILAS

Matemáticas Discretas

Estructura de datos y de la información Boletín de problemas - Tema 10

Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55

Ciencias de la Computación I

1.1 Máquinas secuenciales Modelo de Moore y de Mealy Lenguaje de una máquina secuencial Equivalencia de modelos

Tema: Recorrido de Grafos. Ruta más corta

CAPÍTULO II SISTEMAS NUMÉRICOS. Este método de representar los números se llama sistema de numeración decimal, donde 10 es la base del sistema.

Apellidos:... Nombre:...

Para la resolución de los ejercicios, se dispone de una implementación de árbol binario a través de la clase BinTree con la siguiente especificación.

Propiedades de lenguajes independientes del contexto

CAPÍTULO 2. ÁRBOLES 2.0. CONCEPTOS GENERALES

Autómatas Celulares. Séptima sesión. Hugo Franco, PhD. 28 de febrero de 2011

Algoritmos y Estructuras de Datos III

Transcripción:

Autómata Traductor de Código Morse Ornella Ivonne Benzi Juncos ornellabenzi@hotmail.com Cátedra Principios de Computadoras II Profesor: Mg. Ricardo Coppo rcoppo@uns.edu.ar Dpto. Ingeniería Eléctrica y de Computadoras Universidad Nacional del Sur Av. Alem 1253 - Primer piso 8000 Bahía Blanca Tel:/ FAX 291 459 5154 / 291 459 5100 ext. 3301 Resumen El trabajo consiste en el desarrollo de un software que implementa dos autómatas, uno capaz de traducir caracteres en código morse al alfabeto latino y otro que realiza la operación inversa, implementando una estructura de datos enlazada eciente. Además, el programa emula el sonido del telégrafo en función del código Morse obtenido a través de la reproducción de archivos de audio previamente generados con la duración y frecuencia estándar del código. 1. Introducción El código Morse [1], también conocido como alfabeto morse o clave morse, es un código o sistema de comunicación que permite la comunicación telegráca a través de la transmisión de impulsos eléctricos de longitudes diversas o por medios visuales, como luz, sonoros o mecánicos. Este código consta de una serie de puntos, rayas y espacios, que al ser combinados entre sí pueden formar palabras, números y otros símbolos. Actualmente, debido a su conabilidad, el código Morse se sigue utilizando en la navegación marítima y aérea. 1.1. Objetivos del trabajo Se pretende implementar un traductor bidireccional para convertir cadenas en ambos alfabetos implementando un tipo de datos abstracto basado en dos autómatas nitos traductores y emular el sonido del telégrafo. La estrategia utilizada puede utilizarse para traducción de códigos más complejos en escenarios donde la eciencia sea mandatoria. 2. Modelo 2.1. Autómata Finito Un autómata nito o máquina de estados, es un modelo matemático de la computación. Es una máquina abstracta que puede estar en exactamente 47JAIIO - EST - ISSN: 2451-7615 - Página 123

un estado, de un número nito de ellos en cualquier tiempo dado. El autómata nito puede cambiar de un estado a otro en respuesta a alguna entrada externa; el cambio de un estado a otro se llama transición. Un autómata nito está denido por el listado de sus estados, su estado inicial y las condiciones para cada transición. 2.2. Autómata Traductor Un autómata traductor [2] es aquel capaz de generar una salida basada en una entrada dada y/o un estado usando acciones. Son usados para aplicaciones de control y en el campo de la lingüística computacional. Un autómata nito traductor es una séxtupla (Σ, Γ, S, s 0, δ, ω) donde: Σ es el alfabeto de entrada (un conjunto de símbolos nito no vacío) Γ es el alfabeto de salida S es el conjunto de estados s 0 es el estado inicial, un elemento de S δ es la función de transición: δ : S Σ S ω es la función de salida Si la función de salida es una función de un estado y del alfabeto de entrada (ω : S Σ Γ ) esa denición corresponde al modelo Mealy y puede modelarse como una Máquina de Mealy. Si la entrada depende solo del estado (ω Γ ) esa denición corresponde al modelo Moore y puede modelarse como una Máquina de Moore. Modelo utilizado En este trabajo se utilizaron dos autómatas traductores, los cuales se caracterizan continuación. Traductor Morse a Alfabeto latino El alfabeto de entrada Σ={`.', `-', `#', `##' } ; donde # representa el espacio. El alfabeto de salida Γ = { `A'..`Z', `#'} ; donde # representa el espacio. S es el conjunto de estados, uno por cada letra y un estado inicial. s 0 es el estado inicial, un elemento de S. Función de transición: δ : S Σ S, las transiciones son posibles ingresando punto, raya o el espacio. ω es la función de salida que devuelve la letra correspondiente cuando se ingresa un espacio. 47JAIIO - EST - ISSN: 2451-7615 - Página 124

Figura 1. Diagrama de estados aproximado del autómata traductor Morse-Letra Traductor Alfabeto Latino a Morse Σ= `A'..`Z', `#' ; donde # representa el espacio. Γ = `.', `-', `#', `##' ; donde # representa el espacio. S es el conjunto de estados, uno correspondiente a cada letra y un estado inicial. s 0 es el estado inicial, un elemento de S δ es la función de transición: δ : S Σ S, las transiciones son ω es la función de salida, la cual devuelve el código morse correspondiente Figura 2. Diagrama de estados aproximado del autómata traductor Letra-Morse 3. Implementación Para la programación de las estructuras de datos utilizadas para la implementación de ambos autómatas traductores se utilizó C++. Para la interfaz gráca se utilizó Qt, que es un framework multiplataforma orientado a objetos de software libre y código abierto ampliamente usado para desarrollar programas que utilicen interfaz gráca de usuario. 47JAIIO - EST - ISSN: 2451-7615 - Página 125

3.1. Estructura de datos Árboles Binarios Un árbol [3] es una estructura que modela una estructura jerárquica, con un valor en la raíz y subárboles con un nodo padre, representado como un conjunto de nodos enlazados. Cada subárbol posee una arista única que lo une con la raíz. Un árbol binario [3] es una estructura de datos de árbol en la cual cada nodo tiene como máximo dos hijos, cada uno etiquetado como hijo izquierdo o hijo derecho. Si un nodo no tiene hijos entonces este es llamado un nodo hoja o nodo externo. Ejemplo en la Figura 3. Figura 3. Ejemplo de árbol binario Estructura de datos implementada Para la implementación del traductor de Morse a Alfabeto latino se utilizó un árbol binario en cuyos nodos se almacenan las letras del abecedario y el camino hacia cada nodo representa el código morse del carácter. Para la traducción inversa se utilizó una estructura auxiliar que constó en un arreglo de punteros a nodo, en el cual se almacenaron punteros a cada uno de los nodos del árbol para evitar la búsqueda en el árbol. Las Figuras 4 y 5 ilustran las estructuras de datos de cada traductor respectivamente. 47JAIIO - EST - ISSN: 2451-7615 - Página 126

Figura 4. Estructura de datos autómata traductor Morse-Letra Figura 5. Estructura de datos autómata traductor Letra-Morse Ejemplo de traducción Para ilustrar el uso de los autómatas anteriormente mencionados, supongamos que se quiere obtener la traducción de la cadena, el autómata comienza en el estado inicial, la raíz del árbol y, dado que el primer caracter es un punto, pasa al estado que corresponde al subárbol izquierdo. Luego, desde ese nuevo nodo, dependiendo de si el siguiente caracter es un punto o una raya, pasa al subárbol izquierdo o derecho, respectivamente. Cuando el caracter es un espacio, el autómata pasa al estado nal y devuelve la traducción del caracter, que es el que está almacenado en el nodo en el que está al momento de recibir el espacio. 3.2. Diseño de clases y UML En la Figura 6 se detalla el UML del programa. En él podemos ver las relaciones entre las clases utilizadas y su cardinalidad. 47JAIIO - EST - ISSN: 2451-7615 - Página 127

Figura 6. UML del programa 3.3. Interfaz gráca El entorno gráco utilizado se realizó a través del UI de Qt [4]. Se dispusieron dos LineEdit, uno para la cadena alfabética y otro para la cadena en morse, con sus respectivos botones para traducir de uno a otro. Además, se agregó un botón para la reproducción del sonido, un botón de Ayuda que despliega un MessageBox con las letras del abecedario y su equivalencia en código morse, y una imagen ilustrativa de un telégrafo. Figura 7. Interfaz gráca del programa Validación de entrada Para evitar errores en la ejecución del programa, se resolvió restringir valores de entrada a los LineEdit reciben el código morse o la cadena de alfabeto a ser traducidos, desde la interfaz gráca. Para ello, se utilizaron validadores (QValidator [6]) basados en expresiones regulares de los caracteres deseados. Expresiones regulares Las expresiones regulares [5] son patrones utilizados para encontrar una determinada combinación de caracteres dentro de una cadena de texto. 47JAIIO - EST - ISSN: 2451-7615 - Página 128

Ejemplos: [. -]* representa punto o espacio o guion medio [a-za-z ]* representa letras entre `a' y `z' y entre `A' y `Z' o espacio Sonido En la implementación del programa se incluyó la simulación sonora de la cadena en código morse. Se generó una Playlist dinámica en función de la cadena de entrada utilizando las clases QMediaPlayer y QPlayList [7] provistas por Qt [4]. Los sonidos fueron generados por el sitio Wavtones [8] respetando la relación estándar entre las duraciones de puntos, rayas y silencios. Figura 8. Captura del sitio web utilizado para generar los archivos de audio 4. Conclusión La implementación de un árbol binario para realizar el traductor resultó sumamente eciente a la hora de traducir código morse a alfabeto latino, no así para el proceso inverso, dado que requirió de punteros que guardaran la posición de cada nodo para así desencriptar de abajo hacia arriba el código correspondiente al carácter latino ingresado. 47JAIIO - EST - ISSN: 2451-7615 - Página 129

Referencias 1. Morse Code, Wikipedia, https://en.wikipedia.org/wiki/morse_ code 2. Finite State Machine, Wikipedia, https://en.wikipedia.org/ wiki/finite-state_machine 3. Coppo, Ricardo. "Principios de Computadoras II - Apuntes de Cátedra 4. Qt (Software), Wikipedia, https://en.wikipedia.org/wiki/qt_ (software) 5. Expresión Regular, Wikipedia, https://es.wikipedia.org/wiki/ Expresion_regular 6. Qt Documentation QValidator, doc.qt.io/ 7. Qt Documentation QMediaPlayer y QPlayList, doc.qt.io/ 8. Wavtones, http://www.wavtones.com/functiongenerator.php 47JAIIO - EST - ISSN: 2451-7615 - Página 130