Starting from:
$35

$29

Mini Assignment 4: C Programming Control Structures Solution


This is an individual assignment. You need to solve these questions on your own. Use the discus-sion forum on Piazza if you have any questions. You can also reach out to the course email address, utilize TA/Instructors o ce hours as necessary. Late penalty is -5% per day. Even if you are late only by a few minutes it will be rounded up to a day. Maximum of 2 late days are allowed.

You MUST use mimi.cs.mcgill.ca to create the solution to this assignment. You must not use your Mac command-line, Windows command-line, nor a Linux distro installed locally on your laptop. You can ssh or putty from your laptop to mimi.cs.mcgill.ca, or you can go to the third oor of Trottier and use any of those labs to ssh to mimi to complete this assignment. All of your solutions should be composed of commands that are executable in mimi.cs.mcgill.ca.

Questions in this exercise requires you to turn in two C programs. Instructors/TAs upon their discretion may ask you to demonstrate/explain your solution. No points are awarded for commands that do not execute at all or programs that do not compile in mimi. (Commands/programs that execute/compile, but provide incorrect behavior/output will be given partial marks.). All questions are graded proportionally. This means that if 40% of the question is correct, you will receive 40% of the grade.

Please read through the entire assignment before you start working on it. You can loose up to 3 points for not following the instructions.


Lab D will provide some background help for this mini assignment.

Unless otherwise stated, all the names of the scripts and programs that you write, commands, options, input arguments, etc. are implied to be case-sensitive.

Total Points: 20

Ex. 1 |    A Simple Interger Calculator (9 Points)

In this exercise, you will create a C program to implement a simple integer calculator.

Your calculator should accept three arguments as input, x, op, y, where x and y are integers and op is one of the operators +, -, *, / to perform the corresponding arithmetic operations.

1.Use vi to create a C program source    le simplecalc.c

2.(1 Point) The program should include a comment section at the beginning that describes its purpose (couple of lines), the author (your name), your department, a small \history" section indicating what changes you did on what date.

/∗






Program
t o
implement  a
s i m p l e  c a l c u l a t o r

∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗

Author

Dept .
Date

Notes
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗

Joseph
D
Comp .
S c i e n c e .  Feb  10
2020
I n i t i a l  v e r s i o n .

Joseph
D
Comp .
S c i e n c e .  Feb  11
2020
Added  e r r o r  h a n d l i n g .
∗/







The code should be properly indented for readability as well as contain any additional comments required to understand the program logic.


1
3.(1 Point) The source code should be compilable by (exactly) using the command gcc -o simplecalc simplecalc.c

4.(3 Points) Your program should accept the three arguments mentioned above as its input. If the user does not pass this argument, you should display an error message and terminate with error code 1.


    • ./simplecalc
Error: usage is simplecalc <x> <op> <y>

    • echo $?
1

5.(4 Points) Your program performs simple arithmetic operations on the input as indicated by the operator and displays the output. You should use a switch statement to decide which operator to execute. You will loose 2 points if you do not use the switch. If the user enters one of the operators not listed above, print an error message and terminate with error code 2. Successfull execution of the program should result in a return code of 0 from the program.


    • ./simplecalc 5 + 3
8
$ echo $?
0
$ ./simplecalc 5 - 3
2
$ ./simplecalc 5 * 3
15
$ ./simplecalc 5 / 3
1
$ ./simplecalc 5 @ 3
@ not a valid operator
$ echo $?
2


Ex. 2 |    A C Program to implement Caesar’s Cipher(11 Points)

In this exercise, you will create a C program to implement a basic version of Caesar’s cipher.

https://en.wikipedia.org/wiki/Caesar_cipher

The object of Caesar’s cipher is to replace each letter in the alphabet with another letter that is ‘X’ o set away from it to scramble the message.

For example consider the following sample output


    • ./caesarcipher 3
abcdefghijklmnopqrstuvwxyz
defghijklmnopqrstuvwxyzabc

Here we asked the program to set an o set of 3, and typed the following line and pressed enter


    • ./caesarcipher 3
abcdefghijklmnopqrstuvwxyz

At which point, it changed each letter in the input line with the letter that is 3 letters to its right.  defghijklmnopqrstuvwxyzabc


As a result, a got replaced with d and so forth. Towards the end of the alphabets, you have to \wrap around". In the above example, There is no alphabet 3 letters to the right of x, so it wrapped around to a and so forth.

You can \decrypt" the message by running the program with the proper o set in the opposite direction, as shown below.


    • ./caesarcipher -3
defghijklmnopqrstuvwxyzabc
abcdefghijklmnopqrstuvwxyz


2
Here, we started with program with an o set -3 which asked the program to shift the letters to the left and the entered the original encrypted line.


    • ./caesarcipher -3
defghijklmnopqrstuvwxyzabc

To which it responded with the decrypted message.


 abcdefghijklmnopqrstuvwxyz

1.Use vi to create a C program source    le caesarcipher.c

2.(1 Point) The program should include a comment section at the beginning that describes its purpose (couple of lines), the author (your name), your department, a small \history" section indicating what changes you did on what date. The code should be properly indented for readability as well as contain any additional comments required to understand the program logic.

3.(1 Point) The source code should be compilable by (exactly) using the command gcc -o caesarcipher caesarcipher.c .

4.(2 Points) Your program should accept an integer argument as its option for the user to indicate the o set. If the user does not pass this argument, you should display an error message and terminate with error code 1.


    • ./caesarcipher
Error: usage is caesarcipher <offset>

$ echo $?
1

5.(4 Points) Your program should use the o set to shift the letters typed in a line either to the right.


    • ./caesarcipher 5
this is a secret message
ymnx nx f xjhwjy rjxxflj

or to the left.


    • ./caesarcipher -5
this is a secret message
ocdn dn v nzxmzo hznnvbz

6.(2 Points) The program should be able to read multiple lines, encrypting and displaying one line at a time, till it runs out of input/reaches EOF (can be simulated by pressing CTRL+D at the keyboard input in an empty line). If you are using the tester script, you shouldn’t have to do CTRL+D (if you do, there is an issue with your implementation). The program should terminate with return code 0 for any sucessfull execution.


    • ./caesarcipher 5
this is a secret message
ymnx nx f xjhwjy rjxxflj

delete after reading
ijqjyj fkyjw wjfinsl

$ echo $?
0

7.(1 Point) The program should only encrypt lowercase english alphabets (a-z) and should merely print any other letters, numbers, white space characters, etc., as is.


    • ./caesarcipher 6
Hello there! How is COMP206?
Hkrru znkxk! Huc oy COMP206?





3
WHAT TO HAND IN

Turn in the C program source codes simplecalc.c and caesarcipher.c, named properly. You do not have to zip all of the les together. The les must be uploaded to mycourses. DO NOT turn in the executables simplecalc or caesarcipher. TAs will compile your C program on their own as indicated in the problem descriptions above.

MISC. INFORMATION

There is a tester script mini4tester.sh that is provided with the assignment that you can use to test how your programs are behaving. TAs will be using the exact same tester script to grade your assignment.


 $ ./mini4tester.sh

However, it is recommended that when you start writing your program, test it yourself rst with the above examples. Once you are fairly con dent that your program is working, you can test it using the tester script.

You can compare the output produced by running the mini tester on your C programs to that produced by the mini tester on the solution programs which is given in mini4tester.out.txt.

    • Important ** If your program \hangs" / is stuck while executing it through the tester script and requires TAs to interrupt it, you will loose 4 points per program!.

FOOD FOR THOUGHT!

The following discussion is meant to encourage you to search independently for creative and optimal ways to perform rudimentary tasks with less e ort and/or make your program robust and sophisticated. It does not impact the points that you can achieve in the above questions.

    • Will your cipher program work for the following o sets? (Assuming that you keep continuing to wrap around multiple times).


 $ ./caesarcipher 306

and


 $ ./caesarcipher -306

If not, can you think of a very simple way to address it?

    • Here is a fun activity you can have with your friends using the cipher program that you just developed. You should have the cipher program running, with a secret o set key which you do not tell anyone. Now encrypt a message using it and use the write Unix command to send it to a friend who is also logged into the same Unix host. Have your friend also do the same back to you (using their cipher program and their own secret o set key). Now compete in who can decrypt the other’s message rst.























4

More products