En este post vamos a implementar un traductor de código Morse en C. Veremos cómo codificar o transformar código Morse usando el lenguaje C.
Por ejemplo, haremos que la palabra HOLA
se convierta a su equivalente .... --- .-.. .-
y viceversa, logrando al final un traductor Morse.
Cada letra tiene un código que lo representa; yo me he basado en mi propio gist con la equivalencia de cada letra con su respectivo código.
Esto es muy simple, solo hay que buscar la equivalencia de cada letra o de cada código Morse; para ello podemos tomar varios enfoques pero yo he elegido el de poner dos arreglos; uno con Morse y otro con ASCII, con cada valor equivalente en el mismo índice:
Por ejemplo, la letra A
equivale a .-
y el símbolo !
equivale a -.-.--
, están en distintos arreglos pero misma posición.
simbolosAscii
.codigosMorse
.Esto sería más fácil si en C existieran los diccionarios, pero no existen y su implementación es cuestión de otro post.
Nota: otro enfoque más óptimo (en cuanto a rendimiento, para no buscar el elemento por cada símbolo) sería usar múltiples sentencias if
o un diccionario.
Nota 2: si notas el algoritmo muy pesado, la verdad es que no lo es, lo pesado o complejo es trabajar con cadenas en C; si esto fuera otro lenguaje con mayor soporte de strings, nos llevaría menos de la mitad de código hacer el traductor de código Morse.
Necesitamos funciones para dividir el algoritmo y hacerlo más fácil de resolver. También viene bien saber la longitud del arreglo, la cual se calcula así:
Lo calculamos con cualquier arreglo porque se supone que ambos arreglos miden lo mismo.
Después necesitamos el índice de cada código Morse o cada código ASCII:
Son funciones que simplemente devuelven el índice del símbolo o código.
En la función para buscar el índice del código ascii creamos una cadena temporal, o mejor dicho, lo que equivale a una cadena o string en C, esto es para que strcmp (que compara cadenas) funcione.
Ahora veamos la siguiente función que convierte un mensaje a su equivalente en Morse. Leemos el mensaje con fgets y luego simplemente imprimimos cada equivalencia:
Estamos convirtiendo a mayúscula cada letra o símbolo pues en las equivalencias todo está en mayúscula. Cuando tenemos el código Morse lo imprimimos; como lo dije, puedes hacer cualquier cosa con él.
Como queremos que este sea un traductor de código Morse en C necesitamos también decodificar un mensaje en Morse.
Para esto, vamos a hacer que cada símbolo Morse esté separado por un espacio; luego usamos strtok (algo como el split
de C) y separamos la cadena por espacios.
Ahora hacemos casi lo mismo, solo que agregamos la implementación para separar la cadena. Después obtenemos el índice con buscarIndiceDeMorse
y lo usamos para acceder a simbolosAscii
; al resultado final (ascii
) lo imprimimos con printf
.
Ahora veamos el código completo; ya lo he explicado por partes. Todo está dividido en funciones que se invocan desde otros métodos o desde la función main
.
Puedes probar el ejemplo por ti mismo aquí. En mi caso lo he probado así:
Recuerda que uso fgets
porque es más seguro que scanf. Si quieres que esto funcione con cadenas más largas simplemente cambia el límite en LONGITUD_MENSAJE
.
Por cierto, no estoy manejando el caso de que la función para buscar índices regrese -1
; si quieres hacer el algoritmo más a prueba de errores simplemente haz esa comprobación.
En este post te enseñaré a imprimir HTML en una impresora térmica. Vas a ser…
En este artículo te voy a enseñar a monitorear la cola de impresión de una…
En mi blog te he enseñado a usar youtube-dl para descargar vídeos con permiso del…
Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL…
En un post previo te enseñé a enviar un mensaje en nombre de un Bot…
En este artículo te voy a mostrar una guía para imprimir en una impresora térmica…
Esta web usa cookies.