Assignment 5 Arrays/ Strings

Assignment 5 Arrays/ Strings

Grading: EVERY assignment in this course is graded by demoing your work for 10 minutes with a TA. You are required to meet with a TA within one week after the due date to demo. You are penalized for missing a scheduled appointment. In either case, if you submit late within 1 day (24 hours) of the deadline, you lose 10 points. if you submit late within 3 days of the deadline, then you lose 25 points. Your job is to convince the TA that your program works correctly, i.e. show your TA how to use/break your program.

1. You will create a program to encrypt messages. (50 points) You will create a program that uses Fractionated Morse code to encrypt and decrypt messages. Don’t Panic! You need know nothing about Morse code.

First you will read in a CDstring with the message to encode. Use this table to create an array of characters or string with each dot or dash as a separate character and Xs to indicate spaces. X between characters and XX between words.

A
*
D

N
D
*

B
D
*
*
*

O
D
D
D

C
D
*
D
*

P
*
D
D
*
D
D
*
*

Q
D
D
*
D
E
*

R
*
D
*

F
*
*
D
*

S
*
*
*

G
D
D
*

T
D

H
*
*
*
*

U
*
*
D

I
*
*

V
*
*
*
D
J
*
D
D
D

W
*
D
D

K
D
*
D

X
D
*
*
D
L
*
D
*
*

Y
D
*
D
D
M
D
D

Z
D
D
*

Table 1: Morse code equivalents

You also get a keyword or phrase from the user. Create a function to remove duplicate letters. So beavers becomes beavrs. You will use it to fill in the first column of this table with the remainder of the alphabet filled in after the keyword:
* * * * * * * * * D D D D D D D D D X X X X X X X
* * * D D D X X X * * * D D D X X X * * * D D D X X
* D X * D X * D X * D X * D X * D X * D X * D X * D
Table 2: Encryption replacements

B
E
A
V
R
S
C
D
F
G
H
I
J
K
L
M
N
O
P
Q
T
U
W
X
Y
Z
X

To encode “hello world” you first get the Morse code from table 1:
****X*X*D**X*D**XDDDXX*DDXDDDX*D*X*D**XD**XX

Divide (fractionate) them into groups of 3:

Then get the ciphertext for each column from table 2, as shown in red. If the last group only has Xs then you can ignore it.
So the encrypted message is BCQAV DLPNL HQAG. In telegraphic transmission we group them in 5 letter groups.

DESIGN CONSIDERATIONS
First, read the instructions carefully.

What do you need to do? You will read in a string of characters, including spaces. You must replace each character with its equivalent Morse code symbols (i.e. dots and dashes). You will use the 26Drow table 1 to do that. Remember to put in an X between letters and XX between words. You will take these symbols in groups of 3 to reference table 2. Each 3 symbols will be replaced by the letter indicated. Once you’ve done that then you display the resulting ciphertext to the screen.

The tables display individual characters for clarity of understanding. You may simplify your design by treating them as strings such as this for the first row of table 1:

This will create a 26 row by 2Dcolumn table. Create function that takes a single input character, looks up the Morse equivalent from the table and returns that string. Concatenate it onto the intermediate string.

You can do something similar to table 2. As you would be searching it by the string of symbols you might want the first row of that 26Drow table to look like this:

You will pull off 3 characters at a time from the intermediate string and look up the output ciphertext letter to concatenate to the output string. Write a function to take the 3Dcharacter string and return the ciphertext letter to concatenate to the output string. Remember you also need a function to take the key word or phrase entered by the user and strip duplicate letters before filling in table 2.

You will have a function to print the output ciphertext string. It will have a single parameter, which is the string. As it prints remember every sixth letter will be a blank space character to give the 5Dletter groups. The output will be all uppercase letters.
You will use CDStrings so review the string library. You will need to compare strings and stick 2
B
C
Q
A
V
D
L
Q
N
L
V
Q
A
G

*
*
x
*
*
*
D
x
D
D
*
x
*
D
x
*
X
*
*
D
x
D
*
x
D
D
*
*
*
x
*
*
D
x
*
D
x
D
D
x
*
D
x
*

A
*D
***
B

strings together.

HINT: Make your program case insensitive. Whichever way you convert the input create a function so you only need to write the code once. If you did this on a previous assignment then you do not need to write it again!

2. You will modify your program to decrypt messages. (15 points) To decrypt a message you reverse the process. You substitute for each ciphertext letter using the second table then decipher the symbols using the first table.
This will be similar using a lot of table lookup! You will convert each input ciphertext letter to the 3Dcharacter groups from table 2. Write a function that does the lookup. The input can be one letter at a time or the input string. HINT: After you convert each ciphertext letter you are finished with it! You can just remove it from the input string. Or you can just keep track of which ciphertext character is next in the input.
You will now have a string that contains dots, dashes, and Xs. Create a function to read the string. Save each character until you get to an X. Take the symbols and look up the plaintext letter in table 1. Add it to the output string. Skip or delete the X. Repeat. After you skip or delete the X if the next character is another X add a blank space to the output string and skip or delete that X.

When you get to the end of the ciphertext string you just need to print it to the user.

You will never enter or see the Morse code! You can use whatever symbols in place of dots and dashes you want internally.

KEEP IT SIMPLE: Morse cod includes numbers and some punctuation. You will not use them! Use short sentences for testing. Incremental development. Write your program and debug without a keyword. Just use a straight alphabet with table 2. Once you have the bugs worked out, save a copy of your program, then add the functions to read the keyword and write it to the table. When you do that how will you know if you already used a letter?

3. You will modify your program to increase the security. (5 points) If you look at the encryption table, table 2, low frequency letters at the end of the alphabet tend to be in the same place, which can make the security a tad bit weaker. How can you avoid this?

You can have the keyword start in some column other than the first column. Such as this:
This adds an offset to the keyword so you would also need to prompt for an offset of 1 to 25. Why don’t you need an offset of 26?

W
X
Y
Z
B
E
A
V
R
S
C
D
F
G
H
I
J
K
L
M
N
O
P
Q
T
U
(10 pts) Program Style/Comments In your implementation, make sure that you include a program header in your program, in addition to proper indentation/spacing and other comments! Make sure you review the style guidelines for this class, and follow them, i.e. don’t align everything on the left or put everything on one line!

(10 pts) Design
Develop and document your design. Think about testing! Identify decision points where your flow of control may change (indicating a different logic path). If possible show how your design changed as you solved problems.

(10 pts) Testing Your test plan must cover all the logic paths through your program. Indicate which items failed the test and how you tested again. You will provide a test plan. Remember the test plan should be a table:
Input
Expected Output
Actual Output
Comments/explanation
You will be graded on how thorough your test plan is and how you used it to find and fix problems.
HINT: Your testing must include all rows and columns of both tables! And must include using different keywords.

HINT: Use functions to decompose your design and help make it readable. Several functions are already specified. Use others where appropriate. Remember that functions should be specific to a single task, which means they should be no more than around 15 lines of code. They can help with incremental development.

Electronically submit your C++ program and pdf, by the assignment due date, using TEACH.
**NOTE: The easiest way to upload your program from ENGR to TEACH is to map a network drive to your home directory on ENGR. Mac or Windows,

If you are doing this off campus, pay attention to the offScampus directions!!!!