Zdravim,nemate nekdo v pocitaci nejaky program na morseovu abecedu v C nebo v C++?Prinejhorsim muze byt i v Pascalu.Predem dik :-)
Fórum › C / C++
Morseova abeceda
A co za to?Jestli stahujes pres Czshare,tak mam hodne kreditu a mohl bych ti nejake to Tera poslat :-)
Na převod do MA ti stačí jeden switch:
switch(text[i]) {
case('a'):
printf(".-");
break;
case('b'):
...
}
Zadaný text procházíš po znacích, před procházením změnit všechny písmenka na malá. Oddělovač písmenek je mezera nebo /, oddělovač slov jsou dvě lomítka. Oddělovač vět jsou 3 lomítka.
Obrácený převod je otázkou stavového automatu.
Tak jsem to udelal,funguje,ale za kodem mi to haze nejake nesmysly :-(
[url=http://img541.imageshack.us/i/kodt.jpg/]
kod co jsem splodil je:
[quote]#include <stdio.h>
#include <string.h>
void getMorse(char znak)
{
switch (znak)
{
case 'a' : printf(" .- ");
break;
case 'A' : printf(" .- ");
break;
case 'b' : printf(" -... ");
break;
case 'B' : printf(" -... ");
break;
case 'c' : printf(" -.-. ");
break;
case 'C' : printf(" -.-. ");
break;
case 'd' : printf(" -.. ");
break;
case 'D' : printf(" -.. ");
break;
case 'e' : printf(" . ");
break;
case 'E' : printf(" . ");
break;
case 'f' : printf(" ..-. ");
break;
case 'F' : printf(" ..-. ");
break;
case 'g' : printf(" --. ");
break;
case 'G' : printf(" --. ");
break;
case 'h' : printf(" .... ");
break;
case 'H' : printf(" .... ");
break;
case 'i' : printf(" .. ");
break;
case 'I' : printf(" .. ");
break;
case 'j' : printf(" .--- ");
break;
case 'J' : printf(" .--- ");
break;
case 'k' : printf(" -.- ");
break;
case 'K' : printf(" -.- ");
break;
case 'l' : printf(" .-.. ");
break;
case 'L' : printf(" .-.. ");
break;
case 'm' : printf(" -- ");
break;
case 'M' : printf(" -- ");
break;
case 'n' : printf(" -. ");
break;
case 'N' : printf(" -. ");
break;
case 'o' : printf(" --- ");
break;
case 'O' : printf(" --- ");
break;
case 'p' : printf(" .--. ");
break;
case 'P' : printf(" .--. ");
break;
case 'q' : printf(" --.- ");
break;
case 'Q' : printf(" --.- ");
break;
case 'r' : printf(" .-. ");
break;
case 'R' : printf(" .-. ");
break;
case 's' : printf(" ... ");
break;
case 'S' : printf(" ... ");
break;
case 't' : printf(" - ");
break;
case 'T' : printf(" - ");
break;
case 'u' : printf(" ..- ");
break;
case 'U' : printf(" ..- ");
break;
case 'v' : printf(" ...- ");
break;
case 'V' : printf(" ...- ");
break;
case 'w' : printf(" .-- ");
break;
case 'W' : printf(" .-- ");
break;
case 'x' : printf(" -..- ");
break;
case 'X' : printf(" -..- ");
break;
case 'y' : printf(" -.-- ");
break;
case 'Y' : printf(" -.-- ");
break;
case 'z' : printf(" --.. ");
break;
case 'Z' : printf(" --.. ");
break;
default: putchar(' ');
}
}
int main(int argc, char** argv)
{
char str[80];
int i;
gets(str);
for (i = 0; i < 80; i++ )
{
getMorse(str[i]);
}
getchar();
return 0;
}
[/quote]
To LJ1024 : Jo to je super,ale ja nevim jak a kam to vlozit do mojeho kodu :-(
#include <stdio.h>
#include <string.h>
#define LONGBEEP 350
#define SHORTBEEP 100
#define FREQ 5000
void getMorse(char znak)
{
switch (znak)
{
case 'a' : printf(" .- ");
break;
case 'A' : printf(" .- ");
break;
case 'b' : printf(" -... ");
break;
case 'B' : printf(" -... ");
break;
case 'c' : printf(" -.-. ");
break;
case 'C' : printf(" -.-. ");
break;
case 'd' : printf(" -.. ");
break;
case 'D' : printf(" -.. ");
break;
case 'e' : printf(" . ");
break;
case 'E' : printf(" . ");
break;
case 'f' : printf(" ..-. ");
break;
case 'F' : printf(" ..-. ");
break;
case 'g' : printf(" --. ");
break;
case 'G' : printf(" --. ");
break;
case 'h' : printf(" .... ");
break;
case 'H' : printf(" .... ");
break;
case 'i' : printf(" .. ");
break;
case 'I' : printf(" .. ");
break;
case 'j' : printf(" .--- ");
break;
case 'J' : printf(" .--- ");
break;
case 'k' : printf(" -.- ");
break;
case 'K' : printf(" -.- ");
break;
case 'l' : printf(" .-.. ");
break;
case 'L' : printf(" .-.. ");
break;
case 'm' : printf(" -- ");
break;
case 'M' : printf(" -- ");
break;
case 'n' : printf(" -. ");
break;
case 'N' : printf(" -. ");
break;
case 'o' : printf(" --- ");
break;
case 'O' : printf(" --- ");
break;
case 'p' : printf(" .--. ");
break;
case 'P' : printf(" .--. ");
break;
case 'q' : printf(" --.- ");
break;
case 'Q' : printf(" --.- ");
break;
case 'r' : printf(" .-. ");
break;
case 'R' : printf(" .-. ");
break;
case 's' : printf(" ... ");
break;
case 'S' : printf(" ... ");
break;
case 't' : printf(" - ");
break;
case 'T' : printf(" - ");
break;
case 'u' : printf(" ..- ");
break;
case 'U' : printf(" ..- ");
break;
case 'v' : printf(" ...- ");
break;
case 'V' : printf(" ...- ");
break;
case 'w' : printf(" .-- ");
break;
case 'W' : printf(" .-- ");
break;
case 'x' : printf(" -..- ");
break;
case 'X' : printf(" -..- ");
break;
case 'y' : printf(" -.-- ");
break;
case 'Y' : printf(" -.-- ");
break;
case 'z' : printf(" --.. ");
break;
case 'Z' : printf(" --.. ");
break;
case ' ' : printf(" / ");
break;
case '.' : printf(" // ");
break;
case '?' : printf(" // ");
break;
case '!' : printf(" // ");
break;
default: putchar(' ');
}
}
int main(int argc, char** argv)
{
char str[80];
int i;
gets(str);
for (i = 0;i < strlen(str);i++)
{
getMorse(str[i]);
}
getchar();
return 0;
}
misto
void getMorse(char znak)
napis char* getMorse(char znak)
misto printf(" .- ");break;
bude return " .- ";
(a stejne tak u vsech dalsich caseu) a misto default: putchar(' ');
napises default: return "";
a pak upravis tohle
char str[80];
int i;
gets(str);
for (i = 0;i < strlen(str);i++) {
getMorse(str[i]);
}
na tohle char str[80];
int i;
gets(str);
for (i = 0;i < strlen(str);i++) {
char c[5];
strcpy(c, getMorse(str[i]));
int j;
for(j=0;j<strlen(c);j++)
switch(c){
case '-': Beep(FREQ, LONGBEEP);break;
case '.': Beep(FREQ, SHORTBEEP);break;
default:break;
}
}
A pokud ti nevadí jednodušší a kratší řešní, tak si zkopíruj tohle:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define je_male(c)((c)>='a' && (c)<='z')
#define je_velke(c)((c)>='A' && (c)<='Z')
#define to_upper(c)(je_male(c) ? (c)-'a'+'A' : (c))
#define LONGBEEP 750
#define SHORTBEEP 250
#define FREQ 450
int main(int argc, char** argv){
char ma[28][5]={".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-.", "...-", ".--", "-..-", "-.--", "--..", "|", ""};
char str[80];
char c[5];
int i;
gets(str);
for(i=0;i<strlen(str);i++){
int j;
int pos;
if(je_male(str[i]) || je_velke(str[i]))
pos=(int)to_upper(str[i])-65;
else if(str[i]==32)
pos=27;
else
pos=26;
strcpy(c, ma[pos]);
for(j=0;j<strlen(c);j++){
putchar(c[j]);
switch(c[j]){
case '-': Beep(FREQ, LONGBEEP);break;
case '.': Beep(FREQ, SHORTBEEP);break;
case '|': Sleep(600);
default:break;
}
Sleep(80);
}
putchar('|');
Sleep(700);
}
getchar();
return 0;
}
PólBulva napsal:
To LJ1024 :
ted jsem to prepsal a pise mi to : switch quantity not an integer
dej sem zdroj (abych vedel, co konkretne myslis, protoze jsem sem dal dve moznosti) a rekni mi, na ktere radce je problem.
EDIT: tak uz asi vim
tohle
for(j=0;j<strlen(c);j++)
switch(c){
case '-': Beep(FREQ, LONGBEEP);break;
case '.': Beep(FREQ, SHORTBEEP);break;
default:break;
}
ma byt takhle
for(j=0;j<strlen(c);j++)
switch(c[j]){
case '-': Beep(FREQ, LONGBEEP);break;
case '.': Beep(FREQ, SHORTBEEP);break;
default:break;
}
Kdybys do meho reseni chtel pridat treba zavinac, tak bys misto
char ma[28][5]={".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-.", "...-", ".--", "-..-", "-.--", "--..", "|", ""};
char str[80];
char c[5];
int i;
gets(str);
for(i=0;i<strlen(str);i++){
int j;
int pos;
if(je_male(str[i]) || je_velke(str[i]))
pos=(int)to_upper(str[i])-65;
else if(str[i]==32)
pos=27;
else
pos=26;
musel mit napriklad
char ma[29][5]={".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-.", "...-", ".--", "-..-", "-.--",
"--..", "|", "", "@"};
char str[80];
char c[5];
int i;
gets(str);
for(i=0;i<strlen(str);i++){
int j;
int pos;
if(je_male(str[i]) || je_velke(str[i]))
pos=(int)to_upper(str[i])-65;
else if(str[i]==32)
pos=27;
else if(str[i]==64)
pos=28;
else
pos=26;
a kdybys do tveho reseni chtel pridat "ch", tak by tam muselo by
for (i = 0;i < strlen(str);i++) {
char c[5];
if(i<strlen(str)-1)
if((str[i]=='c' || str[i]=='C') && (str[i+1]=='h' || str[i+1]=='H')){
strcpy(c, " ---- ");
i++;
}
int j;
for(j=0;j<strlen(c);j++)
switch(c){
case '-': Beep(FREQ, LONGBEEP);break;
case '.': Beep(FREQ, SHORTBEEP);break;
default:break;
}
}
promin - takhle by to uz melo byt spravne,...
for (i = 0;i < strlen(str);i++) {
char c[5];
strcpy(c, getMorse(str[i]));
if(i<strlen(str)-1)
if((str[i]=='c' || str[i]=='C') && (str[i+1]=='h' || str[i+1]=='H')){
strcpy(c, " ---- ");
i++;
}
int j;
for(j=0;j<strlen(c);j++)
switch(c){
case '-': Beep(FREQ, LONGBEEP);break;
case '.': Beep(FREQ, SHORTBEEP);break;
default:break;
}
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Morseova abeceda — založil Montezo
Morseova abeceda — založil hejnallukas
Morseova Věta — založil Marek
Abeceda pes metody — založil Michal
Moderátoři diskuze