Programming Fundamentals

Information

  • This page contains additional revision exercises for week 07.
  • These exercises are not compulsory, nor do they provide any marks in the course.
  • You cannot submit any of these exercises, however autotests may be available for some them (Command included at bottom of each exercise if applicable).

Exercise — individual:
Secret Code

TOP SECRET // COMP1511 ONLY

Write a file secret_code.c which allows you to scan in messages encrypted with Tom's Secret Code, and then print them out (ending in a newline).

Tom's Secret Code works two letters at a time. Given some ciphertext (text that has been encrypted with Tom's Secret Code), take the first two letters. The first letter of the plaintext (unencrypted text) is the letter with the smaller ascii value of those two encrypted letters. For example, if the first two letters of ciphertext were "GD", the first letter of the plaintext would be "D".

To explain the code, the following diagram demonstrates how the code "CZuOMUPP1i5fg112" is decrypted as "COMP1511". In each pair of letters, the one with the lower ascii value was the one that was part of the plaintext.

Cipher Text C Z u O M U P P 1 i 5 f g 1 1 2
ASCII Values 67 90 117 79 77 85 80 80 49 105 53 102 103 49 49 50
Correct Answer C O M P 1 5 1 1

Your program should behave exactly as these examples do:

dcc secret_code.c -o secret_code
./secret_code
abbccddeeffggh
abcdefg 
./secret_code
CZuOMUPP1i5fg112
COMP1511 

Assumptions/Restrictions/Clarifications

  • You should not assume that there will be an even number of inputs. If there is an odd number of characters, you should ignore the last character.
  • You could be given any printable ascii character as input (lowercase letters, uppercase letters, newlines, symbols, etc.)
  • Your program should always print a newline at the end of it's output
  • This exercise is very difficult to solve using fgets. You should solve this using scanf("%c", ...)
Sample solution for secret_code.c
// Add two numbers together, but in an array.

#include <stdio.h>

int main(void) {
    char char1;
    char char2;

    while (scanf("%c %c", &char1, &char2) == 2) {
        if (char1 < char2) {
            printf("%c", char1);
        }
        else {
            printf("%c", char2);
        }
    }

    printf("\n");
}