Code:
#include <iostream>
#include <ctime>
#include <cmath>
#include <string>
#include<cstdlib>
#include<cctype>
#include<cstdio>
using namespace std;
void instruction();
void query();
void practice();
void message();
void setting();
void quit();
void morse();
void flash();
char ch;
char code[6];
char set;
int trial;
double delay = 0.5;
int main()
{
do
{
int choice;
instruction();
cin >> choice;
switch (choice)
{
case 1:
query();
break;
case 2:
practice();
break;
case 3:
message();
break;
case 4:
setting();
break;
case 5:
quit();
break;
default:
cout << "Invalid Choice!." << endl;
}
}
while ( set = 'm');
system("pause");
return (0);
}
void instruction()
{
cout<<"MORSE CODE TUTOR" << endl;
cout<<"~~~~~~~~~~~~~~~~" << endl;
cout<<"1. Query Mode" << endl;
cout<<"2. Practie Mode" << endl;
cout<<"3. Test Message Mode" << endl;
cout<<"4. Setting" << endl;
cout<<"5.Exit" << endl;
cout<<" Enter your choice:" << endl;
}
void morse()
{
switch (toupper(ch)) //run translator
{
case '0': strcpy(code,"-----"); break;
case '1': strcpy(code,".----"); break;
case '2': strcpy(code,"..---"); break;
case '3': strcpy(code,"...--"); break;
case '4': strcpy(code,"....-"); break;
case '5': strcpy(code,"....."); break;
case '6': strcpy(code,"-...."); break;
case '7': strcpy(code,"--..."); break;
case '8': strcpy(code,"---.."); break;
case '9': strcpy(code,"----."); break;
case 'A': strcpy(code,".-"); break;
case 'B': strcpy(code,"-..."); break;
case 'C': strcpy(code,"-.-."); break;
case 'D': strcpy(code,"-.."); break;
case 'E': strcpy(code,"."); break;
case 'F': strcpy(code,"..-."); break;
case 'G': strcpy(code,"--."); break;
case 'H': strcpy(code,"...."); break;
case 'I': strcpy(code,".."); break;
case 'J': strcpy(code,".---"); break;
case 'K': strcpy(code,"-.-"); break;
case 'L': strcpy(code,".-.."); break;
case 'M': strcpy(code,"--"); break;
case 'N': strcpy(code,"-."); break;
case 'O': strcpy(code,"---"); break;
case 'P': strcpy(code,".--."); break;
case 'Q': strcpy(code,"--.-"); break;
case 'R': strcpy(code,".-."); break;
case 'S': strcpy(code,"..."); break;
case 'T': strcpy(code,"-"); break;
case 'U': strcpy(code,"..-"); break;
case 'V': strcpy(code,"...-"); break;
case 'W': strcpy(code,".--"); break;
case 'X': strcpy(code,"-..-"); break;
case 'Y': strcpy(code,"-.--"); break;
case 'Z': strcpy(code,"--.."); break;
case '.': strcpy(code,".-.-.-"); break;
case ',': strcpy(code,"--..--"); break;
case '?': strcpy(code,"..--.."); break;
case ':': strcpy(code,"---..."); break;
case '/': strcpy(code,"-..-."); break;
case '(': strcpy(code,"-.--.-"); break;
case ')': strcpy(code,"-.--.-"); break;
case '-': strcpy(code,"-....-"); break;
case ' ': strcpy(code,""); break;
default: strcpy(code," ");
cout << "Wrong Input!!" << endl; break;
}
flash();
}
void query()
{
system("cls");
cout<<"Welcome to the Morse Code Translator." << endl;
while(ch!='=')
{
cout << "Enter Character or press = to exit:" << endl;
cin >> ch;
system("cls");
morse();
}
ch = ' ';
quit();
}
void practice()
{
system("cls");
srand(time(NULL));
char words[]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',
'b', 'c', 'd','e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r','s', 't', 'u', 'v', 'w',
'x', 'y', 'z', '.', ',', '?', ':', '/', '(',')', '-'};
float count=0;
int i;
int r;
int temp;
float number;
float percentage;
char guess;
cout << "How many morse codes you want to practice?" << endl;
cin >> number;
system("cls");
cout << "We will play the code then you will try to identify it. Good luck!" << endl;
system("pause");
system("cls");
while ( trial < number)
{
for ( i=0; i< number; i++)
{
r = rand() % 44;
ch=words[r];
morse ();
cout << code << endl;
cout << "Enter your guess:" << endl;
cin >> guess;
trial++;
system("cls");
if( guess == ch)
{
count++;
}
}
}
percentage = (((count/number)*100) + 0.005) ;
temp = int( percentage * 100);
percentage = temp/100.0f;
cout << "Your Percentage is: " << percentage << "%" << endl;
trial = 0;
quit();
}
void message()
{
system("cls");
int i;
int j;
int len;
string line[6];
line[0] = "This is a program that is basically about morse code. ";
line[1] = "The program is written in C plus plus language. ";
line[2] = "You have 5 options in the menu. ";
line[3] = "Use them wisely. ";
line[4] = "Have fun.";
string sentence;
for(i=0; i < 6;i++)
{
sentence = sentence + line[i];
}
cout << "Try to guess the sentence. Good luck!" << endl;
system("pause");
system("cls");
len=sentence.length();
for(j=0; j < len;j++)
{
ch=sentence[j];
morse();
}
system("cls");
cout << " This is the message: " << endl;
cout << sentence;
ch = ' ';
quit();
}
void setting()
{
cout << "The default speed is 0.5." << endl;
cout << "The speed is faster if it is less than 0.5" << endl;
cout << "The speed is slower if it is more than 0.5" << endl;
cout << "Enter new speed:" << endl;
cin >> delay;
cout << "The new speed has been changed." << endl;
}
void quit()
{
char answer;
cout << " Want to play again? (Y/N)\n" << endl;
cin >> answer;
if( answer == 'y' || answer == 'Y')
{
set = 'm';
cout << "I hope you enjoy it again!" << endl;
cout << endl;
system("pause");
system("cls");
}
else if ( answer == 'n' || answer == 'N')
{
cout << "Thank you for using my program..." << endl;
exit(0);
}
}
void flash()
{
clock_t cl_start; // clock_t typedef in time
clock_t cl_end; // clock_t = long int
double elapsed_time; // for time calculation
double empty_loop; // time for empty loop
int a,b,c,k,n,h; // dummy variables
double d,e,f; // dummy variables
string line; // Flash Line
line = char(219); // Extended Char Set
line = line + line + line + line;
for(h=0; h < 8;h++)
{
if ( code[h] == '.')
{
cl_start = clock();
cl_end = clock();
cout << line << endl << line << endl << line;
for (k=0; (cl_end-cl_start)<(CLOCKS_PER_SEC*delay);)
{
cl_end = clock();
}
system("cls");
}
else if ( code[h] == '-')
{
cl_start = clock();
cl_end = clock();
cout << line << endl << line << endl << line;
for (k=0; (cl_end-cl_start)<(CLOCKS_PER_SEC*delay*3); k++)
{
cl_end = clock();
}
system("cls");
}
else if ( code[h] == ' ')
{
cl_start = clock();
cl_end = clock();
for (k=0; (cl_end-cl_start)<(CLOCKS_PER_SEC*delay*3); k++)
{
cl_end = clock();
}
}
}
}