CS 337
Programming Projects

All your programming assignments will be posted here. Look for requirements that apply to all assignments below.

Assignment Due Date Topic
Project 0 January 26 at 11:59 pm
Introductory project - acclimate yourself to project requirements.
Input file: project0.txt
Output file (for given sample input): project0.enc
TA in charge: Sarat Rallapalli
Project 1
February 16, 2012 at 11:59 pm
Compression, entropy, Lempel-Ziv compression
File: IO.java
TA in charge: Yi-Chao Chen
Project 2
March 23, 2012 at 11:59 pm
TA in charge: Nikhil Panpalia
You are not allowed to convert numbers into strings or vice versa. Only exception: Reading numbers from the key file. Otherwise, you are not allowed to use Strings in your program.
Project 3
April 27, 2012 at 11:59 pm
Pattern Matching: Implement the brute force algorithm, as well as the Rabin-Karp, KMP, and Boyer-Moore algorithms (as presented in class - you will find various differences in algorithms/code you see online)
TA in charge: Sarat Rallapalli

CS 337 - Programming Assignment Requirements

Please READ: We run MOSS on each assignment, and we include projects that were submitted during previous semesters of this class. Please make sure that you carefully read the pair programming rules. If your partner writes large parts of the program alone, then you are submitting code as your own that you did not write, and this is academic dishonesty for both you and your partner.

Part of academic honesty on the programming assignments is following the pair programming rules. You are NOT allowed to divide the work on the project in half, with you and your partner each doing parts of the assignment separately. That is cheating, since you did not contribute to half of the assignment. You are responsible for the entire project that you and your partner submit. Make sure that you have electronic copies of the project, with regular updated versions, even if you use your partner's machine while coding. All communication with your programming partner should be done via email, so that you have a log of your communication if there are problems. Talk to the instructional staff immediately if you are having difficulties with your partner. If you and your partner submit work that you did not contribute to writing, you will receive an F in the class. 

The partner feedback file must be completed when you submit your project. These files help us identify students who are not working cooperatively with programming partners, or doing their share of the work. Make sure that your description of your partner's contribution are accurate. Negative reports from your partners may result in you being required to work alone on the remaining projects (with the resulting penalty).

There is a 10% penalty for working alone on a project without being granted an exception to the pair programming requirement. You must ask for the exception within three days of the assignment being posted. Use the discussion board to find a partner. If you do not have a partner one week before the project is due, you must work alone and take the 10% penalty.

We run MOSS on programming assignments. Keep in mind that MOSS (Measure of Software Similarity) is impervious to common ways of disguising code copying. It ignores differences in variable and method names, re-arrangment of code, shuffling blocks, and changes in spacing and comments. I suggest an experiment: get a Moss account (http://theory.stanford.edu/~aiken/moss/), take one of your class projects, and do everything you can to modify it so that it looks different from the original to anyone who might read it. Then: submit both programs to MOSS. This is what we do with every project you submit in this class.

All projects must be completed with a partner, and you your partner must follow the pair programming rules. Make sure that you and your programming partner have compatible schedules, since you must spend almost all of your time on the project working together. Each pair will turn in one project solution. Once you choose a partner for a project, you are not allowed to switch partners. If you decide that you cannot complete the project as a pair, you must notify your TA, and each student must complete the project individually. You may not switch to a different partner. When you are working on a pair project, at least 90% of your time on the project must be spent in the lab with your partner, and you must take turns sitting at the keyboard and typing. Use the class discussion board if you need to find a partner for a project. You are required to have a different partner for every project. After each project is completed, you and your partner will submit a feedback sheet on each other, evaluating each other's contributions and commitment to the assignment.

No lab assignment may be turned in more than 2 days late. If the project is due at 11 pm on Thursday, it cannot be submitted after 11 pm on Saturday. You will have 3 slip/late days in 1 day units (i.e., 1 minute to 24 hours late = 1 slip day, etc.) for the projects, but you are not allowed to use slip days on the first or last assignment. You may divide the 3 slip days across the remaining projects however you like, subject to the 3 day total maximum and the 2 day maximum per project. Add the following to the header in your .java files:

Pair Name 1: Slip days used for this project: ____  Slip days used (total): ____
Pair Name 2: Slip days used for this project: ____  Slip days used (total): ____

The assignment descriptions will specify which files should be submitted.  Assignments must be turned in via the turnin program.

If you submit a project late (using slip days) you must email the TA when you submit your files to let them know that your project is ready for grading.

Programming assignments will be graded within 10 days of the due date. Within 10 days, your program grade will be posted on blackboard.

Projects, except for the first one (project 0), are equally weighted. Programs are graded on correctness, design, clarity, and efficiency.

As discussed in the class syllabus, programming assignments will be checked for plagiarism and copying using Moss. Sharing code or algorithms with another student or obtaining assignment solutions from any source is cheating. The penalty for cheating is an F in the course and a referral to the Dean of Students office.

More on Academic Honesty - taken from the CS department Code of Conduct.

"The University and the Department are committed to preserving the reputation of your degree. It means a lot to you. In order to guarantee that every degree means what it says it means, we must enforce a strict policy that guarantees that the work that you turn in is your own and that the grades you receive measure your personal achievements in your classes:

Every piece of work that you turn in with your name on it must be yours and yours alone unless explicitly allowed by an instructor in a particular class. Specifically, unless otherwise authorized by an instructor:

You are responsible for complying with this policy in two ways:

  1. You must not turn in work that is not yours, except as expressly permitted by the instructor of each course.
  2. You must not enable someone else to turn in work that is not theirs. Do not share your work with anyone else. Make sure that you adequately protect all your files. Even after you have finished a class, do not share your work or published answers with the students who come after you. They need to do their work on their own.

The penalty for academic dishonesty will be a course grade of F and a referral of the case to the Dean of Students. Further penalties, including suspension or expulsion from the university may be imposed by that office.

One final word: This policy is not intended to discourage students from learning from each other, nor is it unmindful of the fact that most significant work in computer science and in the computing industry is done by teams of people working together. But, because of our need to assign individual grades, we are forced to impose an otherwise artificial requirement for individual work. In some classes, it is possible to allow and even encourage collaboration in ways that do not interfere with the instructor's ability to assign grades. In these cases, your instructor will make clear to you exactly what kinds of collaboration are allowed for that class."

For CS337 the policy on collaboration is modified as follows: You are encouraged to study for tests together, to discuss high-level approaches for solving the assignments, and to discuss methods for debugging code. Essentially if you talk about an assignment with someone else when neither of you is writing code you are okay, but the moment you start looking at someone else's source code or showing someone else your source code you have crossed the line into inappropriate collaboration. You should not ask anyone to give you a copy of their code or give your code to another student. Similarly, you should not discuss your algorithmic strategies to such an extent that you and your collaborators end up turning in exactly the same code. Discuss high level approaches, but do the coding on your own. The exceptions to this are:

  1. You may use any code you develop with the instructor or TAs.
  2. You may share additional test cases and expected results of test cases.

Plagiarism detection software will be used on all assignments to find students who have copied code from one another. 

For more information on Scholastic Dishonesty see the University Policy on Scholastic Dishonesty