Your assignment is to write a C program, decode.c, that will decode a secret mes
ID: 3685367 • Letter: Y
Question
Your assignment is to write a C program, decode.c, that will decode a secret message. The message will be 26 characters in length, and will be given to you as a series of numbers. These numbers must be sorted and compared against a translation set of characters in order to decode it. This method is based upon the decoder rings that used to be available in packages of cereal.
Perhaps the easiest way to show how to decode a message is to first show how a message is encoded. First, the letters of the alphabet, the numbers, and any
punctuation is scrambled into some sort of sequence.
For example, the string below can be found in codefile.txt:
CFL2AP(T9W,H!JEM86ND0BZ7UK1Y3VG4XR)ISOQ5. ;-
Notice that the above string contains 52 characters (including the nine blanks near the end). Now, let's suppose that we want to encode the message:
HELP ME!
Looking up each of the letters in the above string we find that H is the 11th character (zero-based indexing), E is the 14th, L the 2nd, P the 5th, one of the blanks the 41st, M the 15th, E the 14th, and ! the 12th. Therefore, our initial coding is:
11 14 02 05 41 15 14 12
Next, each number is assigned a three digit sequence number, in ascending order, to precede it. These numbers indicate relative position and need not be consecutive. For example, we might assign the following numbers:
10111
12214
12802
12905
13541
13715
14214
15112
Finally, the order of the numbers is scrambled:
13541
12214
10111
15112
13715
12802
14214
12905
This is the list of numbers you would be given to decode. To decode a message, simply reverse the process: read the numbers into an array and sort them into ascending order.
"Cut" each sorted number into two, using the last two digits as the index to the correct character and print the character.
For this lab, the encoded message in numeric format is given below and can be found in: msgfile.txt:
19546
14501
17309
13027
16149
21512
18035
14014
15700
12515
16514
18207
13407
14837
16842
21037
15333
13244
21224
16321
14146
16014
20727
12804
18811
13711
Your lab should include at least the following functions:
getCode() - reads string from codefile.txt
getMessage() - reads encoded message from msgfile.txt
sortMessage() - sorts the encoded message array
decodeMessage() - decodes and outputs the message
Note that the string used to hold the 52 characters read from codefile.txt should be declared to be of length 53 (to reserve a space for the terminating NULL character).
Be sure to do error checking when attempting to open a file for input or output. For extra credit, pass the files names to this lab as command-line-arguments. Compiler specific information regarding command-line arguments can be found below:
Remember that the main() function should appear as the first function in the program. Be sure to use the function prototypes for each of the functions that are used in your program.
Output from your program should be sent to the terminal window (your screen) as well as the requested csis.txt output file.
Explanation / Answer
I think the main thing I'm not entirely sure of is how to "cut" the numeric format down and get the last two digits for the "secret message".
Use division and remainder math:
19546 / 100 = 195
19546 % 100 = 46
It's easier to keep the numbers stored as integers so that you can use them as indexes in the key lookup without doing a string -> integer conversion. Of course, if the message is long enough for the sequence number to overflow and integer you'll need to approach the problem differently, but I don't think that'll happen provided you uselong int as the data type (note that int is only guaranteed to be at least 16 bits).
Below i have given the Caesar Cipher in C Program for to encode and decode a secret message for your reference,
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.