Write a cipher that encodes a plain text message and decodes back to the original message.
The cipher takes an input text message and a key (a sequence of numbers) and then
arranges the characters of the message into a 2D grid. And then read off the characters from the grid
column by column as an encoded message in the order specified by the column numbers in the key.
Decoding is just a reverse process of the encoding above.
Hint: To convert a digit character to its corresponding number, just use the coding value difference. For example:
'5' - '0' gives a number of 5.
//Sample main() function
#include <iostream>
#include <string>
using namespace std;
void print(char b[], int size);
void encode(char m[], int msgSize, char key[], int gridWidth);
void decode(char m[], int msgSize, char key[], int gridWidth);
int main()
{
string msg; //Original plain text message
string key; //A sequence of numbers used for the order of the columns of a grid to be read off.
int size; //The number of characters in the original message
int length; //The length of the key for encoding
cout << "Enter a plain text message for encoding" << endl;
getline(cin, msg);
cout << "Enter a key for encoding: " << endl;
cin >> key;
cout << endl;
size = msg.length();
length = key.length();
//If the length of the string message is not a multiple of the length of the key,
//cut off some trailing characters of the message to make it so.
msg = msg.substr(0, size / length * length);
size = msg.length();
//char msg_arr[size + 1]; //Create an array of characters for storing the original message
//char key_arr[length + 1]; //Create an array of digits for the key
char * msg_arr = new char[size + 1]; //Create an array of characters for storing the original message
char * key_arr = new char[length + 1]; //Create an array of digits for the key
strcpy_s(msg_arr, size+1, msg.c_str()); //Copy the original string message to the character array with no more than size + 1 elements
strcpy_s(key_arr, length+1, key.c_str()); //Copy the key to the character array with no more than length + 1 elements
cout << "Original plain text message: " << endl;
print(msg_arr, size);
print(key_arr, length);
cout << endl;
encode(msg_arr, size, key_arr, length);
cout << "Encoded message: " << endl;
print(msg_arr, size);
cout << endl;
decode(msg_arr, size, key_arr, length);
cout << "Decoded message: " << endl;
print(msg_arr, size);
return 0;
}
//Sample output:
Enter a plain text message for encoding
YOURCELLPHONEHASBEENSTOLENDELETEDATAATONCE
Enter a key for encoding:
31452
Message looks like in a 2D grid:
YOURC
ELLPH
ONEHA
SBEEN
STOLE
NDELE
TEDAT
AATON
Message looks like after transposition:
ULEEOEDT
YEOSSNTA
RPHELLAO
CHANEETN
OLNBTDEA
Encoded message:
ULEEOEDTYEOSSNTARPHELLAOCHANEETNOLNBTDEA
Decoded message:
YOURCELLPHONEHASBEENSTOLENDELETEDATAATON
Connect four is a two-player board game in which the players alternately drop colored disks into a seven-column, six-row vertically suspended grid, as shown in this real game picture. The objective of the game is to connect four same-colored disks in a row, a col- umn, or a diagonal before your opponent can do likewise. The program prompts two players to drop a RED or YELLOW disk alternately. Whenever a disk is dropped, the program redisplays the board on the console and determines the status of the game (win, draw, or continue). Here is a sample run:
//Skeleton program for main function
int main()
{
char board[6][7];
displayBoard(board);
while (true) {
// Prompt the first player
dropADisc('R', board);
displayBoard(board);
if (isWon(board))
{
cout << "The red player won" << endl;
break;
}
else if (isDraw(board))
{
cout << "No winner" << endl;
break;
}
// Prompt the second player
dropADisc('Y', board);
displayBoard(board);
if (isWon(board))
{
cout << "The yellow player won" << endl;
break;
}
else if (isDraw(board))
{
cout << "No winner" << endl;
break;
}
}
}