• Viernes 3 de Mayo de 2024, 22:46

Autor Tema:  Re: Codigo Morse a Letras  (Leído 7677 veces)

david_nino

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Codigo Morse a Letras
« en: Jueves 6 de Junio de 2002, 19:28 »
0
Hola a todos soy nuevo aqui y tengo una pequeña curisidad;

como hacer en c un programa que lea en codigo morse y tradusca a letras

Gracias:)

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Codigo Morse a Letras
« Respuesta #1 en: Viernes 7 de Junio de 2002, 02:01 »
0
Bueno, no se especificamente como son los codigos morse, pero suponete que cada uno tenga un total de 3 caracteres...por ejemplo
a = -..
b = .--
c = .-.
y asi sigue....lo que podes hacer es un array que contenga el codigo morse, y luego mediante un loop (y si queres, podes hacerlo con apuntadores, pero ya seria un poco mas complicado), empezar modificando los valores, ....de esta forma:

 
Código: Text
  1.  
  2. /* Array con todo el codigo morse */
  3. int x = 10; /*tenes 10 codigos morse en el array */
  4. int morse[x] = {-.., -.-, -.-, ..., -.-, .-., --., -.-, .-., --.};
  5.  
  6. for(i = 0; i <= x - 1; i++) {
  7.  
  8. resultado = array[i];
  9.  
  10. /*Usas un switch para cambiar de codigo a letra */
  11.  
  12. switch(resultado) {
  13. case "-..":
  14.    printf("a"); break;
  15. case "-.-":
  16.    printf("b"); break;
  17. /* etc... */
  18.  }
  19. }
  20.  
  21.  

david_nino

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Codigo Morse a Letras
« Respuesta #2 en: Miércoles 12 de Junio de 2002, 22:31 »
0
Gracias, me sirvio de mucho la respuesta:)

LamKros

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
    • http://www.lamkros.com
Codigo Morse a Letras
« Respuesta #3 en: Martes 2 de Julio de 2002, 12:35 »
0
/*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.com

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