El siguiente ejercicio propuesto por uno de nuestro seguidores al blog www.aprendoencasa.com que nos propone unos ejercicios o prácticas en la que se plantea que introduciendo caracteres separados por espacios en blanco simulando código morse, traduzca los mismos y visualice la cadena traducida en caracteres normales.

La solución de los ejercicios que se plantean es la siguiente:



/*
  Nuevo ejercicio con solución o práctica resuelta
  de programación en lenguaje c.
  práctica con solución o resuelta, el enunciado
  del ejercicio es el siguiente.
  Realizar un programa que introduciendo caracteres separados por
  espacios en blanco simulando código morse, traduzca los mismos y visualice
  la cadena traducida en caracteres normales.
  El ejercicio con solución ha sido planteado por un usuario del blog
  www.aprendoencasa.com, y la solución a la práctica planteada es la que
  se utiliza a continuación. Vuelvo a insistir en que no pretendo imponer
  ningún tipo de sistema o forma de programación y que estaría encantado
  de publicar soluciones alternativas al ejercicio o practica con solución
  propuestas por los usuarios del blog.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    // Crear Variable para almacenar el código morse
    char Morse[48][7];
    // Matriz que almacena los caracteres correspondientes a la traducción
    // al código morse asociando los índices de las dos matrices
    char Simbolos[48];
    // Variable para solicitar el código morse
    char FraseMorse[200];
    // Variable para almacenar el código traducido
    char FraseNormal[200];
    // Variables auxiliares
    int contador;
    int encontrado;
    int contadorfrasenormal=0;
    // Variable de tipo cadena para trabajar con ella en vez de trabajar
    // con la variable original, se podría omitir
    char CopiaFraseMorse[200];
    // Puntero para trabajar con las palabras de la frase morse
    char *Puntero;
    // Delimitador para romper la cadena morse en trozos
    char Delimitador[5]=" ";
    // Guardar los caracteres correspondientes al código morse
    // en una matriz y guardar los caracteres correspondientes de la
    // traducción en otra matriz asociando así los códigos de índice
    // entre las dos matrices
    strcpy(Morse[0],".-"); // A
    Simbolos[0]='A';
    strcpy(Morse[1],"-..."); // B
    Simbolos[1]='B';
    strcpy(Morse[2],"-.-."); // C
    Simbolos[2]='C';
    strcpy(Morse[3],"-.."); // D
    Simbolos[3]='D';
    strcpy(Morse[4],"."); // E
    Simbolos[4]='E';
    strcpy(Morse[5],"..-."); // F
    Simbolos[5]='A';
    strcpy(Morse[6],"--."); // G
    Simbolos[6]='G';
    strcpy(Morse[7],"...."); // H
    Simbolos[7]='H';
    strcpy(Morse[8],".."); // I
    Simbolos[8]='I';
    strcpy(Morse[9],".---"); // J
    Simbolos[9]='J';
    strcpy(Morse[10],"-.-"); // K
    Simbolos[10]='K';
    strcpy(Morse[11],".-.."); // L
    Simbolos[11]='L';
    strcpy(Morse[12],"--"); // M
    Simbolos[12]='M';
    strcpy(Morse[13],"-."); // N
    Simbolos[13]='N';
    strcpy(Morse[14],"---"); // O
    Simbolos[14]='O';
    strcpy(Morse[15],".--."); // P
    Simbolos[15]='P';
    strcpy(Morse[16],"--.-"); // Q
    Simbolos[16]='Q';
    strcpy(Morse[17],".-."); // R
    Simbolos[17]='R';
    strcpy(Morse[18],"..."); // S
    Simbolos[18]='S';
    strcpy(Morse[19],"-"); // T
    Simbolos[19]='T';
    strcpy(Morse[20],"..-"); // U
    Simbolos[20]='U';
    strcpy(Morse[21],"...-"); // V
    Simbolos[21]='V';
    strcpy(Morse[22],".--"); // W
    Simbolos[22]='W';
    strcpy(Morse[23],"-..-"); // X
    Simbolos[23]='X';
    strcpy(Morse[24],"-.--"); // Y
    Simbolos[24]='Y';
    strcpy(Morse[25],"--.."); // Z
    Simbolos[25]='Z';
    strcpy(Morse[26],".-.-"); // Ä
    Simbolos[26]='Ä';
    strcpy(Morse[27],"---."); // Ö
    Simbolos[27]='Ö';
    strcpy(Morse[28],"..--"); // Ü
    Simbolos[28]='Ü';
    strcpy(Morse[29],"----"); // Ch
    Simbolos[29]='$'; // no se ha especificado el símbolo correcto
    strcpy(Morse[30],"-----"); // 0
    Simbolos[30]='0';
    strcpy(Morse[31],".----"); // 1
    Simbolos[31]='1';
    strcpy(Morse[32],"..---"); // 2
    Simbolos[32]='2';
    strcpy(Morse[33],"...--"); // 3
    Simbolos[33]='3';
    strcpy(Morse[34],"....-"); // 4
    Simbolos[34]='4';
    strcpy(Morse[35],"....."); // 5
    Simbolos[35]='5';
    strcpy(Morse[36],"-...."); // 6
    Simbolos[36]='6';
    strcpy(Morse[37],"--..."); // 7
    Simbolos[37]='7';
    strcpy(Morse[38],"---.."); // 8
    Simbolos[38]='8';
    strcpy(Morse[39],"----."); // 9
    Simbolos[39]='9';
    strcpy(Morse[40],".-.-.-"); // .
    Simbolos[40]='.';
    strcpy(Morse[41],"--..--"); //  ,
    Simbolos[41]=',';
    strcpy(Morse[42],"..--.."); // ?
    Simbolos[42]='?';
    strcpy(Morse[43],"..--."); // !
    Simbolos[43]='!';
    strcpy(Morse[44],"---..."); // :
    Simbolos[44]=':';
    strcpy(Morse[45],".-..-."); // "
    Simbolos[45]='"';
    strcpy(Morse[46],".----."); // '
    Simbolos[46]='\'';
    strcpy(Morse[47],"-...-"); // =
    Simbolos[47]='=';
    // Solicitar la frase en morse
    printf("\nFrase en morse:");
    gets(FraseMorse);
    // Realizar copia de la cadena para trabajar con ella
    strcpy(CopiaFraseMorse,FraseMorse);
    printf("\nFrase a analizar: %s",CopiaFraseMorse);
    // Descomposición de la cadena en trozos
    contadorfrasenormal = 0;
    printf("\ndescomposición de la cadena en trozos\n");
    // Primera llamada => Primer token
    Puntero = strtok( CopiaFraseMorse, Delimitador);
    // Mientras exista una palabra asociada al puntero recorrer la frase
    while(Puntero!=NULL) {
       printf( "\n%s", Puntero );
       // Buscar el carácter correspondiente a la cadena
       // Inicializar los contadores para recorrer la matriz de símbolos
       // y código morse hasta encontrar el carácter correspondiente
       contador=0;
       encontrado=0;
       while(contador<48 && encontrado!=1) {
           // Si se encuentra el carácter se cambia la var encontrado
           if (strcmp(Puntero,Morse[contador++])==0) encontrado=1;
       }
       // si se ha encontrado el carácter
       if (encontrado==1) {
          // se guarda el carácter en la variable de frase normal
          FraseNormal[contadorfrasenormal++]=Simbolos[contador-1];
          // se visualiza el símbolo correspondiente al carácter encontrado
          printf(" %c",Simbolos[contador-1]);
       }
       // Siguientes llamadas de descomposición de la cadena
       Puntero = strtok( NULL, Delimitador );
    }
    // Finalizar la variable que guarda la frase traducida con el símbolo de
    // fin de cadena
    FraseNormal[contadorfrasenormal]='
/*
Nuevo ejercicio con solución o práctica resuelta
de programación en lenguaje c.
práctica con solución o resuelta, el enunciado
del ejercicio es el siguiente.
Realizar un programa que introduciendo caracteres separados por
espacios en blanco simulando código morse, traduzca los mismos y visualice
la cadena traducida en caracteres normales.
El ejercicio con solución ha sido planteado por un usuario del blog
www.aprendoencasa.com, y la solución a la práctica planteada es la que
se utiliza a continuación. Vuelvo a insistir en que no pretendo imponer
ningún tipo de sistema o forma de programación y que estaría encantado
de publicar soluciones alternativas al ejercicio o practica con solución
propuestas por los usuarios del blog.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
// Crear Variable para almacenar el código morse
char Morse[48][7];
// Matriz que almacena los caracteres correspondientes a la traducción
// al código morse asociando los índices de las dos matrices
char Simbolos[48];
// Variable para solicitar el código morse
char FraseMorse[200];
// Variable para almacenar el código traducido
char FraseNormal[200];
// Variables auxiliares
int contador;
int encontrado;
int contadorfrasenormal=0;
// Variable de tipo cadena para trabajar con ella en vez de trabajar
// con la variable original, se podría omitir
char CopiaFraseMorse[200];
// Puntero para trabajar con las palabras de la frase morse
char *Puntero;
// Delimitador para romper la cadena morse en trozos
char Delimitador[5]=" ";
// Guardar los caracteres correspondientes al código morse
// en una matriz y guardar los caracteres correspondientes de la
// traducción en otra matriz asociando así los códigos de índice
// entre las dos matrices
strcpy(Morse[0],".-"); // A
Simbolos[0]='A';
strcpy(Morse[1],"-..."); // B
Simbolos[1]='B';
strcpy(Morse[2],"-.-."); // C
Simbolos[2]='C';
strcpy(Morse[3],"-.."); // D
Simbolos[3]='D';
strcpy(Morse[4],"."); // E
Simbolos[4]='E';
strcpy(Morse[5],"..-."); // F
Simbolos[5]='A';
strcpy(Morse[6],"--."); // G
Simbolos[6]='G';
strcpy(Morse[7],"...."); // H
Simbolos[7]='H';
strcpy(Morse[8],".."); // I
Simbolos[8]='I';
strcpy(Morse[9],".---"); // J
Simbolos[9]='J';
strcpy(Morse[10],"-.-"); // K
Simbolos[10]='K';
strcpy(Morse[11],".-.."); // L
Simbolos[11]='L';
strcpy(Morse[12],"--"); // M
Simbolos[12]='M';
strcpy(Morse[13],"-."); // N
Simbolos[13]='N';
strcpy(Morse[14],"---"); // O
Simbolos[14]='O';
strcpy(Morse[15],".--."); // P
Simbolos[15]='P';
strcpy(Morse[16],"--.-"); // Q
Simbolos[16]='Q';
strcpy(Morse[17],".-."); // R
Simbolos[17]='R';
strcpy(Morse[18],"..."); // S
Simbolos[18]='S';
strcpy(Morse[19],"-"); // T
Simbolos[19]='T';
strcpy(Morse[20],"..-"); // U
Simbolos[20]='U';
strcpy(Morse[21],"...-"); // V
Simbolos[21]='V';
strcpy(Morse[22],".--"); // W
Simbolos[22]='W';
strcpy(Morse[23],"-..-"); // X
Simbolos[23]='X';
strcpy(Morse[24],"-.--"); // Y
Simbolos[24]='Y';
strcpy(Morse[25],"--.."); // Z
Simbolos[25]='Z';
strcpy(Morse[26],".-.-"); // Ä
Simbolos[26]='Ä';
strcpy(Morse[27],"---."); // Ö
Simbolos[27]='Ö';
strcpy(Morse[28],"..--"); // Ü
Simbolos[28]='Ü';
strcpy(Morse[29],"----"); // Ch
Simbolos[29]='$'; // no se ha especificado el símbolo correcto
strcpy(Morse[30],"-----"); // 0
Simbolos[30]='0';
strcpy(Morse[31],".----"); // 1
Simbolos[31]='1';
strcpy(Morse[32],"..---"); // 2
Simbolos[32]='2';
strcpy(Morse[33],"...--"); // 3
Simbolos[33]='3';
strcpy(Morse[34],"....-"); // 4
Simbolos[34]='4';
strcpy(Morse[35],"....."); // 5
Simbolos[35]='5';
strcpy(Morse[36],"-...."); // 6
Simbolos[36]='6';
strcpy(Morse[37],"--..."); // 7
Simbolos[37]='7';
strcpy(Morse[38],"---.."); // 8
Simbolos[38]='8';
strcpy(Morse[39],"----."); // 9
Simbolos[39]='9';
strcpy(Morse[40],".-.-.-"); // .
Simbolos[40]='.';
strcpy(Morse[41],"--..--"); //  ,
Simbolos[41]=',';
strcpy(Morse[42],"..--.."); // ?
Simbolos[42]='?';
strcpy(Morse[43],"..--."); // !
Simbolos[43]='!';
strcpy(Morse[44],"---..."); // :
Simbolos[44]=':';
strcpy(Morse[45],".-..-."); // "
Simbolos[45]='"';
strcpy(Morse[46],".----."); // '
Simbolos[46]='\'';
strcpy(Morse[47],"-...-"); // =
Simbolos[47]='=';
// Solicitar la frase en morse
printf("\nFrase en morse:");
gets(FraseMorse);
// Realizar copia de la cadena para trabajar con ella
strcpy(CopiaFraseMorse,FraseMorse);
printf("\nFrase a analizar: %s",CopiaFraseMorse);
// Descomposición de la cadena en trozos
contadorfrasenormal = 0;
printf("\ndescomposición de la cadena en trozos\n");
// Primera llamada => Primer token
Puntero = strtok( CopiaFraseMorse, Delimitador);
// Mientras exista una palabra asociada al puntero recorrer la frase
while(Puntero!=NULL) {
printf( "\n%s", Puntero );
// Buscar el carácter correspondiente a la cadena
// Inicializar los contadores para recorrer la matriz de símbolos
// y código morse hasta encontrar el carácter correspondiente
contador=0;
encontrado=0;
while(contador<48 && encontrado!=1) {
// Si se encuentra el carácter se cambia la var encontrado
if (strcmp(Puntero,Morse[contador++])==0) encontrado=1;
}
// si se ha encontrado el carácter
if (encontrado==1) {
// se guarda el carácter en la variable de frase normal
FraseNormal[contadorfrasenormal++]=Simbolos[contador-1];
// se visualiza el símbolo correspondiente al carácter encontrado
printf(" %c",Simbolos[contador-1]);
}
// Siguientes llamadas de descomposición de la cadena
Puntero = strtok( NULL, Delimitador );
}
// Finalizar la variable que guarda la frase traducida con el símbolo de
// fin de cadena
FraseNormal[contadorfrasenormal]='\0';
// Visualizar la frase traducida
printf("\nLa frase traducida es %s\n",FraseNormal);
system("PAUSE");
return 0;
}
/*
El programa utiliza funciones de la librería string.h, las cuales
permiten tanto copiar la frase de una variable a otra como descomponer la
frase en tokens o partes utilizando delimitadores, siendo en este caso el
delimitador para descomponer la frase el espacio en blanco.
Gracias por vuestra visita al blog www.aprendoencasa.com
*/
'; // Visualizar la frase traducida printf("\nLa frase traducida es %s\n",FraseNormal); system("PAUSE"); return 0; } /* El programa utiliza funciones de la librería string.h, las cuales permiten tanto copiar la frase de una variable a otra como descomponer la frase en tokens o partes utilizando delimitadores, siendo en este caso el delimitador para descomponer la frase el espacio en blanco. Gracias por vuestra visita al blog www.aprendoencasa.com */

 

El resultado del ejercicio o práctica anterior ha de ser similar al que se muestra a continuación en su ejecución.

Gracias por vuestra visita y un saludo universal.!!!