Usando traductor de código Morse en C

Traductor de código Morse en C

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.

Las equivalencias

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.

El algoritmo del traductor de Morse a C

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.

  • Cada que se quiere convertir de Morse a ASCII se busca el índice del código Morse a transformar, y luego se accede con ese índice pero al arreglo de simbolosAscii.
  • Lo mismo para transformar de ASCII a Morse, se busca el índice del símbolo ASCII y se accede al arreglo 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.

Funciones y ayudantes del traductor de Código Morse en C

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.

Codificar Morse con C

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.

Decodificar Morse con C

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.

Código completo del traductor de código Morse en C

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í:

Usando traductor de código Morse en C
Ejemplo de salida de código Morse a ASCII y viceversa en C

 

Conclusiones y notas

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.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario