/*Pues eso, que despues de leer tu curiosidad, me he animado a realizarlo y este es el resultado*/
/*
Programa Decodificador Morse LK
Realizado por LamKros.
lamkros@mixmail.comDescripcion: Dado un signo morse lo traduce a caracteres.
Funciona para el abecedario y los numeros, si el signo es menor de 6 digitos
y si no se introducen caracteres no deseados.
El autor da su consentimiento para que el codigo
sea modificado, ampliado o mejorado por cualquier persona
He utilizadado como estructura para la decodificacion un arbol binario,
en el cual la rama izquierda es el punto y la rama derecha la raya.
Asi, la W es .--, porque en el arbol nos desplazamos al nodo de la izquierda,
despues hacia la derecha y otra vez a la derecha.
Bueno, que lo disfruteis;)
*/
//Realizado por Lamkros
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
//Realizado por Lamkros
const int MAXMORSE = 5;
const char FINCAD = char(0);
const char ESPACIO = ' ';
const char PUNTO = '.';
const char RAYA = '-';
const char SIN_CARACTER = 'x';
typedef struct TNodo *TMorse;
struct TNodo
{
char valor;
TMorse punto;
TMorse raya;
};
typedef char TDato [MAXMORSE+1];
//Realizado por Lamkros
void CrearMorse(TMorse &m);
void CrearNodosVacios(TMorse &m,int i);
void RellenarValores (TMorse &m);
void MostrarCaracteres(TMorse &m);
void DestruirMorse(TMorse &m);
char BuscarMorse(TMorse &m,TDato dato,int i);
//De Lamkros para todos
int main()
{
TMorse m;
TDato dato;
m=NULL;
//int i=0,j=0;
char car;
CrearMorse(m);
bool fin=false;
cout << "t Decodificador Morse LK"<<endl<<endl;
cout << "t Funciona correctamente hasta 5 digitos"<<endl ;
cout << "t Pulsar Q para salir"<<endl <<endl;
while (!(fin))
{
cout << "t Insertar signo: ";
cin >> dato;
if (toupper(dato[0])=='Q')
{fin = true;}
else
{
car = BuscarMorse(m,dato,0);
if (car=='x')
{
cout << "SIGNO NO VALIDO"<<endl;
}
else
{cout <<car <<" "<<endl;}
}
}
system("PAUSE");
DestruirMorse(m);
return 0;
}
//Realizado por Lamkros
void CrearMorse(TMorse &m)
{
int i=0;
CrearNodosVacios(m,i);
RellenarValores (m);
}
//Resuelto por Lamkros
void CrearNodosVacios(TMorse &m,int i)
{
if (i==(MAXMORSE+1))
{m=NULL;}
else
{
m=new(TNodo);
CrearNodosVacios(m->punto,i+1);
CrearNodosVacios(m->raya ,i+1);
}
}
//Ideado por Lamkros
void RellenarValores (TMorse &m)
{TMorse ptr;
ptr=m;
if (ptr!=NULL)
{
/*
ptr
punto->
raya->
valor
*/
ptr->valor = SIN_CARACTER;
ptr->punto->valor = 'E';
ptr->punto->punto->valor = 'I';
ptr->punto->punto->punto->valor = 'S';
ptr->punto->punto->punto->punto->valor = 'H';
ptr->punto->punto->punto->punto->punto->valor = '5';
ptr->punto->punto->punto->punto->raya->valor = '4';
ptr->punto->punto->punto->raya->valor = 'V';
ptr->punto->punto->punto->raya->punto->valor = SIN_CARACTER;
ptr->punto->punto->punto->raya->raya->valor = '3';
ptr->punto->punto->raya->valor = 'U';
ptr->punto->punto->raya->punto->valor = 'F';
ptr->punto->punto->raya->punto->punto->valor = SIN_CARACTER;
ptr->punto->punto->raya->punto->raya->valor = SIN_CARACTER;
ptr->punto->punto->raya->raya->valor = SIN_CARACTER;
ptr->punto->punto->raya->raya->punto->valor = SIN_CARACTER;
ptr->punto->punto->raya->raya->raya->valor = '2';
ptr->punto->raya->valor = 'A';
ptr->punto->raya->punto->valor = 'R';
ptr->punto->raya->punto->punto->valor = 'L';
ptr->punto->raya->punto->punto->punto->valor = SIN_CARACTER;
ptr->punto->raya->punto->punto->raya->valor = SIN_CARACTER;
ptr->punto->raya->punto->raya->valor = SIN_CARACTER;
ptr->punto->raya->punto->raya->punto->valor = SIN_CARACTER;
ptr->punto->raya->punto->raya->raya->valor = SIN_CARACTER;
ptr->punto->raya->raya->valor = 'W';
ptr->punto->raya->raya->punto->valor = 'P';
ptr->punto->raya->raya->punto->punto->valor = SIN_CARACTER;
ptr->punto->raya->raya->punto->raya->valor = SIN_CARACTER;
ptr->punto->raya->raya->raya->valor = 'J';
ptr->punto->raya->raya->raya->punto->valor = SIN_CARACTER;
ptr->punto->raya->raya->raya->raya->valor = '1';
ptr->raya->valor = 'T';
ptr->raya->punto->valor = 'N';
ptr->raya->punto->punto->valor = 'D';
ptr->raya->punto->punto->punto->valor = 'B';
ptr->raya->punto->punto->punto->punto->valor = '6';
ptr->raya->punto->punto->punto->raya->valor = SIN_CARACTER;
ptr->raya->punto->punto->raya->valor = 'X';
ptr->raya->punto->punto->raya->punto->valor = SIN_CARACTER;
ptr->raya->punto->punto->raya->raya->valor = SIN_CARACTER;
ptr->raya->punto->raya->valor = 'K';
ptr->raya->punto->raya->punto->valor = 'C';
ptr->raya->punto->raya->punto->punto->valor = SIN_CARACTER;
ptr->raya->punto->raya->punto->raya->valor = SIN_CARACTER;
ptr->raya->punto->raya->raya->valor = 'Y';
ptr->raya->punto->raya->raya->punto->valor = SIN_CARACTER;
ptr->raya->punto->raya->raya->raya->valor = SIN_CARACTER;
ptr->raya->raya->valor = 'M';
ptr->raya->raya->punto->valor = 'G';
ptr->raya->raya->punto->punto->valor = 'Z';
ptr->raya->raya->punto->punto->punto->valor = '7';
ptr->raya->raya->punto->punto->raya->valor = SIN_CARACTER;
ptr->raya->raya->punto->raya->valor = 'Q';
ptr->raya->raya->punto->raya->punto->valor = SIN_CARACTER;
ptr->raya->raya->punto->raya->raya->valor = SIN_CARACTER;
ptr->raya->raya->raya->valor = 'O';
ptr->raya->raya->raya->punto->valor = SIN_CARACTER;
ptr->raya->raya->raya->punto->punto->valor = '8';
ptr->raya->raya->raya->punto->raya->valor = SIN_CARACTER;
ptr->raya->raya->raya->raya->valor = SIN_CARACTER;
ptr->raya->raya->raya->raya->punto->valor = '9';
ptr->raya->raya->raya->raya->raya->valor = '0';
}
}
//Pensado por Lamkros
void MostrarCaracteres(TMorse &m)
{
if (m!=NULL)
{
cout <<m->valor;
MostrarCaracteres(m->punto);
MostrarCaracteres(m->raya);
}
}
//Diseñado por Lamkros
char BuscarMorse(TMorse &m,TDato dato,int i)
{
if (m!=NULL)
{
if (dato
==FINCAD)
{return m->valor;}
else
{
if (dato ==PUNTO)
{BuscarMorse(m->punto,dato,i+1);}
else if (dato==RAYA)
{BuscarMorse(m->raya,dato,i+1);}
else
{return SIN_CARACTER;}
}
}
}
void DestruirMorse(TMorse &m)
{
if (m!=NULL)
{
DestruirMorse(m->punto);
DestruirMorse(m->raya);
delete(m);
}
}
//Hecho por Lamkros