Homework Assignment 1; CS 450

Part 0: Estimate

Before you begin, read the directions carefully and then estimate how long it will take to complete the entire assignment. Record this estimate so you can compare it with the reality when you are done.

Remember that you have less than 1 week to do this assignment. Focus on writing a correct but simple version of the program.


Part 1: Write code and Makefile

Write a program to find the most commonly word in a file.

You can use the following files to test your program ( romeo_juliet.txt and gettysburgaddress.txt ) and you should note the most common word in each for class.

Write a makefile to compile your program. Call the file "Makefile". Make sure it has a "clean" target that removes executables and intermediate files.

Rules:

Code must be able to compile and run both on crux and on the ITL Linux machines.
Code must be in C or C++.

Part 2: README

In addition to the source code, start a README file. In this file, place documentation of interest to other developers. Give an overview of the goal of program. Describe any major design decisions and explain how the source code is decomposed (overview of source files and their relationships). Did you make any simplifying assumptions when writing this program? Note all other files in the "project" and their purpose (Ex. MANPAGE, TIME_LOG, etc.). Acknowledge any code or algorithms borrowed (bibliography of sorts). Finally, explain how to compile the program.

Part 3: MANPAGE

Start another file, MANPAGE, in which you address users not developers. Explain what to do once the executable has been produced - how to run the program, input and/or options required, output produced, etc. Give some examples! Acknowlege any high level assumptions you make in writing your code (ex. limitations in the types of allowable inputs, etc) that might affect users.

Part 4: TIME_LOG

You must include a file called TIME_LOG in which you record how much time you spend working on this assignment. Cateogrize the time into categories like design, implementation, debugging, etc. This file should simply be in plain ascii text format.

Whatever format you choose for recording times, you should submit include a total time in minutes for each of the following categories:

planning/preparation
coding
debugging/testing
document preparation

In addition to reporting time spent, also count the number of lines of code and documentation (README and MANPAGE). You can use the utility "wc -l" to do this. To allow us to easily aggregate statistics across the whole class, include the following lines:
your_username TAB TOTAL_HW1 TAB time_in_minutes
your_username TAB ESTIMATE_HW1 TAB time in minutes
your_username TAB TOTAL_ALL_HW TAB time_in_minutes
your_username TAB LINES_OF_CODE_HW1 TAB lines_of_code
your_username TAB LINES_OF_DOCUMENTATION_HW1 TAB lines of documentation

Part 5: Submit your assignment.

You must copy the following files into /afs/clarkson.edu/class/cs450/students/YOUR_USERNAME/hw1: README, MANPAGE, TIME_LOG, Makefile and all your source files. Run "make clean" before submitting to save space. Similary do not submit copies of the shared test cases.

These names *must* be exact!!!

To grade this assignment, I will follow the directions in your README file to compile your program. I will review the MANPAGE file and follow the directions (I may also see how it responds if I don't follow the directions :-) ). I will review your TIME_LOG.