Codigo Morse implementando listas

Fabian S
12 de Enero del 2006
Por favor alguien me podria dar una pequeña explicacion de como poder implementar el codigo morse implementando listas en c++

Se los agradeceria un mundo gracias!!

Noel Solw
12 de Enero del 2006
te envio un programa que traduce texto comun a morse y viceversa.
La implementacion con listas es muy facil, donde se usan arrays tienes que poner una lista enlazada


// program c_19.cpp
// traduccion del codigo morse
// 24/4/2005
// written in borland c++ - ver 4.52

#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <string.h>

const int N = 36,
LIM = N - 10,
LETTERS = 'A',
NUMBERS = '0' - 26,
MAX = 80;

const char *x[N] = {".-","-...","-.-.","-..",".",
"..-.","--.","....","..",".---",
"-.-",".-..","--","-.","---",
".--.","--.-",".-.","...","-",
"..-","...-",".--","-..-","-.--","--..",
"-----",".----","..---","...--","....-",
".....","-....","--...","---..","----."};

void Show()
{
cout << "codigo morse : " << endl << endl;
for(int i = 0;i < LIM;i++)
{
cout << setw(15) << i << " : " << char(i+LETTERS) << " : "
<< setw(6) << x[i];
if(i%2)
cout << endl;
}
for(;i < N;i++)
{
cout << setw(15) << i << " : " << char(i+NUMBERS) << " : "
<< setw(6) << x[i];
if(i%2)
cout << endl;
}
} // SHOW

int Menu()
{
char choice = '*';
cout << endl;
cout << "[1] : codificar una frase en castellano a codigo morse." << endl;
cout << "[2] : decodificar una codigo morse a una frase en castellano."
<< endl;
cout << "[3] : mostrar el alfabeto morse." << endl;
cout << "[4] : salir del programa."<< endl << endl;
cout << " entre su eleccion --> ";
while(choice < '1' || choice > '4')
choice = getch();
cout << choice << endl << endl;
return choice - '0';
} // MENU

void GetData(char *str,char *msg)
{
cout << msg << endl << endl;
cin.getline(str,MAX);
} // GET DATA

void Frase2Morse()
{
char str[MAX+1];
GetData(str,"entre una frase en castellano - mayusculas y numeros : ");
char *token = strtok(str," ");
int counter = 0;
while(token)
{
for(int i = 0;i < strlen(token);i++)
{
if(token[i] >= 'A' && token[i] <= 'Z')
cout << x[token[i]-LETTERS] << " ";
else if(token[i] >= '0' && token[i] <= '9')
cout << x[token[i]-NUMBERS] << " ";
else
cout << '#';
counter++;
}
if(counter > 10)
{
cout << endl;
counter = 0;
}
else
cout << " ";
token = strtok(NULL," ");
}
cout << endl;
} // FRASE 2 MORSE

int Search(char *symbol)
{
for(int i = 0;i < N;i++)
if(strcmp(symbol,x[i]) == 0)
return i;
return -1;
} // SEARCH

void Morse2Frase()
{
char str[MAX+1],symbol[10],word[10];
GetData(str,"entre una frase en codigo morse : ");
strcat(str," ");
int k = 0;
for(int i = 0; i < strlen(str);i++)
{
if(str[i] == ' ')
{
symbol[k] = 0;
int index = Search(symbol);
if(index < 0)
cout << '#';
else if(index < 26)
cout << char(index + LETTERS);
else
cout << char(index + NUMBERS);
k = 0;
int sw = -1;
while(str[i] == ' ')
{
i++;
sw++;
}
if(sw)
cout << " ";
}
symbol[k++] = str[i];
}
cout << endl;
} // MORSE 2 FRASE

int main()
{
for (int choice = 0;choice != 4;)
{
choice = Menu();
switch(choice)
{
case 1 : Frase2Morse();
break;
case 2 : Morse2Frase();
break;
case 3 : Show();
break;
case 4 : cout << "end of program - good bye ! ! !" << endl;
} // SWITCH
}
return 0;
} // MAIN