Homework will be assigned roughly once per week. It will be graded, and require substantial work. The average student should expect to spend about 15 hours per homework. Homeworks will typically contain a mix of programming exercises and "theory" questions about data structures and their implementation. Roughly every third homework will contain a piece that contributes toward the class project, which is to build a simpler version of Google from scratch. As the project progresses, students may find it necessary to revisit and improve their earlier solutions, so good coding practices and documentation are strongly encouraged.
For detailed information on late submission policies, grace periods, and similar questions about assignments, check the grading page.
Each student will receive a private code repository on the course's GitHub Organization to use it for the development and submission of all assignments. You will be using the git source code management tool to maintain your homework code.
|HW01||Course Overview and Review||Thurs. May 29, 2014 @ 11:59AM (PST)|
|HW02||Recursion and Linked Lists||Thurs. June 12, 2014 @ 11:59PM (PST)|
|HW03||List and Map ADTs||Thurs. June 19, 2014 @ 11:59PM (PST)|
|HW04||Project, Part 1||Tues. July 1, 2014 @ 11:59PM (PST)|
|HW05||Project, Part 2||Sun. July 13, 2014 @ 11:59PM (PST)|
|HW06||Stacks and Sorting||Thurs. July 17, 2014 @ 11:59PM (PST)|
|HW07||Project, Part 3 (Heaps and Maps)||Fri. July 25, 2014 @ 11:59PM (PST)|
|HW08||Map and Set Implementations||Fri. August 1, 2014 @ 11:59PM (PST)|
In order to properly submit your assignment, please follow the course submission instructions
Each homework assignment generally asks for a set of features to be implemented in C++. It also usually asks students to specifically either use or not use some STL classes. Based on these requirements, each assignment is going to have its own grading rubric. We also have a general rubric which you need to consider for all assignments; this captures issues that will be common to most of your projects, like quality of your code.
- Up to 3% deduction for using global variables inappropriately or extensively in your program.
- Up to 5% deduction if your code compiles with warnings. It depending on the number of warnings and their severity. In order to see the compiler warnings you need to compile with
-Wallswitch. For example
g++ hw1.cpp -Wall -g -o hw1. If you believe the warnings are unavoidable document it in your README file.
- Up to 5% if you do not use command line arguments correctly (hard code or use cin)
- Up to 3% deduction for each compiler error depending on the severity of mistake
- Up to 10% deduction for bad Makefile
- Up to 20% deduction for bad coding practices, code organization, indentation, naming, code file and header separation, code documentation, throwing non-exception types, etc.
- Up to 10% deduction for repo organization, garbage files in repo, folder organization, repeated code files, missing data file, missing readme file, etc.
- Up to 10% deduction if your program is testable but crashes during execution, leaks memory, or is considerably slow. Depending on the nature of the assignment, you may lose more points if your program is slow or it's not scalable.
- If one of the features of an assignment is not testable because it has major compile errors you will likely lose at least half its points in addition to other coding mistakes. For example if we cannot test one of your data structure functions because it's missing the UI section (main function) or it has major compile errors, then the best we can do is to look at your code and see if it would work or not. In this scenario, we can give you at most half the points for that data structure function.
- Similar to the previous rule, if your project is missing a key feature such that testing many other features depends on it, you'll likely lose a lot of points. For example, imagine that your assignment is supposed to read data from a file and then process. If you finish the processing part and leave out the file I/O part, you're making it very difficult to test your project. If you want to leave out the file I/O (maybe because you don't have time), change your main function so that it generates some data (like an initial array) just to test the rest of your assignment. This actually makes it easier for yourself to test your assignment as you build. If you want to learn more about this look up unit testing.
Multiple choice problems
- If you miss 1 on a problem of several possible answers you get 50%
- If you miss more than 1 on a problem with multiple correct answer you get 0
- If you miss the 1 right answer (if there's only 1 correct answer) you get 0