Description
This assignment is designed to get you some initial experience with programming in C, as well as
compiling, linking, running, and debugging. Your task is to write 5 small C programs. Each of
them will test a portion of your knowledge about C programming. They are discussed below,
2 First: Decision making
In the first part, you have write a program to check whether an integer is odd or even. As a
refresher, a number is even if it is divisible by 2 and odd otherwise.
Input and output format: This program takes an integer argument from the command line.
It prints “odd” if the number is odd, “even” if the number is even and “error” if no input is given.
you can assume the input will be a proper integer (> 0). Thus, it will not contain any ‘.’ or letters.
The output should to be in lowercase, finish with a newline character (“\n”) and contain no space.
Example Execution:
./first 10
even
./first 5
odd
./first
error
3 Second: Looping
The second part requires you to write a program that checks whether a number is a prime number
or not. A number is prime if it is divisible only by 1 and that number.
Input and output format: This program takes an integer argument from the command line.
It prints “yes” if the number is prime, “no” if the number is not prime and “error” if no input is
given. you can assume the input will be a proper integer (> 0). Thus, it will not contain any ‘.’ or
letters.
1
Example Execution:
./second 10
no
./second 7
yes
./second
error
4 Third: Linked List
In the third part, you have to implement a linked list that maintains a list integers in sorted order.
Thus, if the list contains 2, 5 and 8, then 1 will be inserted at the start of the list, 3 will be inserted
between 2 and 5 and 10 will be inserted at the end.
Input format: This program takes a file name as argument from the command line. The file will
have some lines. Each line contains a character (either ‘i’ or ‘d’) followed by a tab character and
an integer number. For each of the line that starts with ‘i’, your program should insert the number
in the linked list in sorted order if it is not already there. Your program should not insert any
duplicate value. If the line starts with a ‘d’, your program should delete the value if it is present
in the linked list. Your program should silently ignore if the requested value is not present in the
linked list.
Output format: At the end of the execution, your program should print all the values of the
linked list in sorted order. The values should be in a single line separated by tab. There should be
no leading or trailing white spaces in the output. Your program should print “error” (and nothing
else) if the file does not exist or it contains lines with improper structure. Your program should
print a blank line if the input file is empty or the resulting linked list has no node.
Example Execution:
Lets assume we have 3 text files with the following contents. “file1.txt” is empty and,
file2.txt:
i 10
i 12
d 10
i 5
file3.txt:
d 7
i 10
i 5
i 10
d 10
2
./third file1.txt
./third file2.txt
5 12
./third file3.txt
5
./third file4.txt
error
5 Fourth: Hash table
In this part, you will implement a hash table for integer numbers. You can assume the has table
will store at most 1000 numbers. An important part of a hash table is collision resolution. In this
assignment, we want you to use linear probing. In this case, if there is a collision at a location
then you move forward by a stepsize. Please use 1 for stepsize. More information about linear
probing can be found at Wikipedia, http://en.wikipedia.org/wiki/Linear probing.
Input format: This program takes a file name as argument from the command line. The file will
have some lines. Each line contains a character (either ‘i’ or ‘s’) followed by a tab character and an
integer number. For each of the line that starts with ‘i’, your program should insert the number
in the hash table if it is not present. If the line starts with a ‘s’, your program should search the
value.
Output format: For each line in the input file, your program should print the status/result of the
operation. For an insert, the program should print “inserted” is the value is inserted or “duplicate”
if the value is already present. For a search, the program should print ’present’ or “absent” based
on the outcome of the search. Your program should print “error” (and nothing else) if the file does
not exist. The program should print “error” for input lines with improper structure.
Example Execution:
Lets assume we have 2 text files with the following contents. “file1.txt” is empty and,
file2.txt:
i 10
i 12
s 10
c 5
i 10
s 5
./fourth file1.txt
./fourth file2.txt
inserted
3
inserted
present
error
duplicate
absent
./fourth file3.txt
error
6 Fifth: Matrix addition
The fifth part requires you to add 2 matrices. The matrices need to have same dimension (number
of rows and column) for a valid addition. The output will be of the same dimension as well.
Input and output format: This program takes a file name as argument from the command
line. First line of the file will contain tab separated 2 numbers (m and n) where m is the number of
the rows and n is the number of the columns. This will followed by m lines for first matrix followed
by a blank line and second matrix. Each row will have tab separated n values. You can assume
the input will be properly structured for this part of the assignment. The program should output
the result matrix in m lines. Each line will contain tab separated n values.
Example Execution:
Lets assume we have a text files with the following content, file1.txt:
3 3
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
./fifth file1.txt
2 2 2
2 2 2
2 2 2
7 Submission
You have to e-submit the assignment using Sakai. Your submission should be a tar file named
pa1.tar. To create this file, put everything that you are submitting into a directory (folder)
named pa1. Then, cd into the directory containing pa1 (that is, pa1’s parent directory) and run
the following command:
4
tar cvf pa1.tar pa1
To check that you have correctly created the tar file, you should copy it (pa1.tar) into an empty
directory and run the following command:
tar xvf pa1.tar
This should create a directory named pa1 in the (previously) empty directory.
The pa1 directory in your tar file must contain 5 subdirectories, one each for each of the parts.
The name of the directories should be named first through fifth (in lower case). Each directory
should contain a c source file, a header file and a make file. For example, the subdirectory first will
contain, first.c, first.h and Makefile (the names are case sensitive).
8 Grading Guidelines
This is a large class so that necessarily the most significant part of your grade will be based on
programmatic checking of your program. That is, we will build a binary using the Makefile and
source code that you submitted, and then test the binary for correct functionality against a set of
inputs. Thus:
• You should make sure that we can build your program by just running make.
• You should test your code as thoroughly as you can. In particular, your code should be adept
at handling exceptional cases. For example, programs should not crash if the argument is not
a proper number or file does not exist.
• Your program should produce the output following the example format shown in previous
sections. Any variation in the output format can result up to 100% penalty. There should
be no additional information or newline. That means you will probably not get any grade is
you forgot to comment out some debugging message.
Be careful to follow all instructions. If something doesn’t seem right, ask.
5