Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

(Using Microsoft Visual C++ 2010 Express) Your assignment is to decode a secret

ID: 3624603 • Letter: #

Question

(Using Microsoft Visual C++ 2010 Express)

Your assignment is to 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 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



Given below is the main body of the program that you should use. For extra credit, pass the file names for this lab as command-line arguments.



int main(void) {

char code[MAX];

int msg[MAX];

int msgSize;



getCode(code);

msgSize = getMessage(msg);

sortMessage(msg, msgSize);

decodeMessage(code, msg, msgSize);

return 0;

}



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 NULL character).



Here is a function that will sort an integer array:



void sortMessage(int msg[], int msgSize) {

int i, j, temp;



for (i = 1; i < msgSize; i++) {

temp = msg[i];

j = i - 1;

while (j >= 0 && temp < msg[j]) {

msg[j+1] = msg[j];

j = j - 1;

}

msg[j+1] = temp;

}

}





Points to remember:



Make sure you are creating a C program and not a C++ program.


You should not be using any global variables in your program

Explanation / Answer

please rate - thanks

debugged with DEV C++

#include <stdio.h>
#include <conio.h>

void sortMessage(int msg[], int msgSize);
void getCode(char[]);
int getMessage(int[]);
void decodeMessage(char[],int[],int);
int main(void) {
int MAX=53;   
char code[MAX];
int msg[MAX];
int msgSize;
getCode(code);
msgSize = getMessage(msg);
sortMessage(msg, msgSize);
decodeMessage(code, msg, msgSize);
getch();
return 0;
}
void decodeMessage(char c[],int m[],int n)
{int i=0;
for(i=0;i<n;i++)
   { m[i]%=100;
   printf("%c",c[m[i]]);
}
printf(" ");   

}
    
int getMessage(int m[])
{int i=0;
FILE *input;
input = fopen("msgfile.txt","r");
while(fscanf(input,"%d",&m[i])==1)
     i++;    
fclose(input);
return i;
}
void sortMessage(int msg[], int msgSize) {
int i, j, temp;
for (i = 1; i < msgSize; i++) {
temp = msg[i];
j = i - 1;
while (j >= 0 && temp < msg[j]) {
    msg[j+1] = msg[j];
    j = j - 1;
    }
msg[j+1] = temp;
}
}
void getCode(char c[])
{int i;
int MAX=53;
FILE *input;
input = fopen("codefile.txt","r");
for(i=0;i<MAX;i++)
     c[i]=fgetc(input);
fclose(input);
}