Homeworks
Homework will be assigned roughly once every 2 weeks. It will be graded, and require substantial work. The average student should expect to spend more than 20 hours per homework. Homework will typically contain a mix of programming exercises and "theory" questions about data structures and their implementation. 2 assignments will contain pieces that contribute toward a class project; the different parts of the project will build on each other. As the project progresses, students may find it necessary to revisit and improve their earlier solution, so good coding practices and documentation are strongly encouraged.
Each student will receive a private code repository on the course's GitHub Organization to use for the development and submission of all assignments. You will be using the git source code management tool to maintain your homework code.
Invariably we may not cover all the questions or concerns you may have for handling certain cases. For each assignment, we will maintain a Frequently Asked Questions (FAQ) page. Updated requirements or clarifications will be added to these FAQ pages. Please check the appropriate page before submitting your HW.
HW Schedule
HW | Topic | Due Date | Submit |
---|---|---|---|
HW01 | Course Overview and 103 review | Fri. Sep. 13, 2019 @ 11:59PM (PST) | Submit |
HW02 | Project, Part 1 | Fri. Sep. 27, 2019 @ 11:59PM (PST) | Submit |
HW03 | Linked Lists, Queues, and Stacks | Fri. Oct. 18, 2019 @ 11:59PM (PST) | Submit |
HW04 | Project, Part 2 | Fri. Nov. 1, 2019 @ 11:59PM (PST) | Submit |
HW05 | Graph Search | Fri. Nov. 22, 2019 @ 11:59PM (PST) | Submit |
HW06 | AVL Trees | Fri. Dec. 6, 2019 @ 11:59PM (PST) | Submit |
Editor, Debuggers, and Git Help
Checkout our Tools and Links page
Submission Instructions
In order to properly submit your assignment, please follow the course submission instructions.
Homework Policies
For each assignment, a precise time will be specified (usually at 11:59 p.m.) on the due date. Submission must be made correctly via your github account and your SHA must be submitted on the appropriate bytes.usc.edu submission page. All student have 4 grace days they can use over the course of the semester. A maximum of 2 grace days can be used on a single assignment. Once you have used your grace days, any late submission will not be accepted; thus, it will be graded as a 0. Our online submission system will automatically deduct and track late days, so you do NOT need to alert anyone.
Grade Disputes
We will work hard to post HW scores and feedback within 2 weeks of the homework's due date. Exams will typically be graded within at most a few days of the exam date. If you have not received your score on a particular HW even though most other students in the class have (say, 24 hours after the score release date), post a private note on Piazza and someone will then follow up with your grader.
Any disputes with posted grades must be raised within 7 days of the score posting. Then follow the process below for the type of regrade you are requesting.
HW Regrades
Fill out this HW regrade form and wait for someone to be in touch with you. If you do no hear from someone within a few days, post a private note on Piazza listing the issue. Notice that any regrade request will result in us trying to give the fairest possible grade to you, which could be higher or lower than the one you received originally.
Exam Regrades
Submit your paper exam to your instructor with the regrade request written on the cover sheet. Notice that any regrade request will result in us trying to give the fairest possible grade to you, which could be higher or lower than the one you received originally.
Homework Grading Policies
For each assignment, a precise time will be specified (11:59 p.m.) on the due date. Submission must be made correctly via your github account and our submission webpage where you enter your full SHA of the commit you want us to grade. After you believe you have submitted, you should click the Check My Submission button to ensure it is submitted properly.
Grading Environment
We will grade your assignments using gcc/g++ at the command line in the virtual machine we provide for the course. You are free to use other compilers or IDEs to develop your code, but in the end, it has to work with g++ on the course virtual machine provided.
Assignment Rubric
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 assignments, like quality of your code.
This is meant as a general guideline for you to understand how we grade homework, and what things you need to watch out for to avoid losing points. The actual deduction can vary from question to question depending on the nature of the problem. For example, if a homework problem is meant to test your understanding of pointers, memory leak will be worth more points.
General Rubric
Submission Deductions in this category are per homework; they are capped so that you do not get below a score of 0 on any homework, though 0 is possible.
- 2 points for missing or unclear README (Check Submission Policy for details).
- 1 Point for each extra garbage file (binary, temporary files, etc.), up to 3 points total. Test files (.in, .out, .txt, etc.) and additional test programs (.h, .cpp, etc.) will not result in deductions.
- 1 Point for each incorrectly named file or incorrect file format, up to 5 points total.
Multiple choice problems
- If you miss one answer on a problem of several possible answers, you get 50%.
- If you miss more than one answer on a problem with multiple correct answers, you get 0.
- If you miss the one right answer (if there is only 1 correct answer), you get 0.
Coding Problems
Deductions for coding problems are by question; they are capped so that you do not get a score below zero on any question, though 0 is possible.
Test Cases:
- If we cannot compile your program, either because your Makefile does not work or because your code does not compile, you will lose all points for test cases we cannot run.
- Up to 6 points for code that compiles with warnings. The actual deduction depends on the number and type of warnings.
- 4 points deduction for valgrind errors, including memory leaks.
- 2 points deduction for each incorrect input method, output method, and output format.
- 1 point deduction for leaving debug statements in code that do not affect output results (unless the assignment specifies otherwise).
Code Review:
- 2 points deduction for using
using namespace std
in header files. (Yes, of course you can use namespace std in .cpp files, please stop asking). - 2 points deduction for using global variables, unless the assignment specifies otherwise.
- 3 points deduction for added public functions or for exposing member variables/functions that should be private, unless the assignment specifies otherwise.
- 3 points deduction for writing class definitions and implemention in one file, unless the class is templated or the assignment specifies otherwise.
- Up to 2 points deduction for each code readability problem, including but not limited to lack of comments, poor indentation, and chunks of commented out code.
- 2 points for other poor code quality.
Academic Integrity
We take academic integrity very seriously in our CS courses to ensure that your grades reflect your mastery of the material presented in this class as well as to provide fairness to fellow students, to ensure the reputation of USC, and the expectations of our constituencies are met.
Your homework assignments, quizzes, and exams should be individual efforts unless explictly stated otherwise. For homework assignments, you may only have high level discussions with classmates. Any discussion that includes specific code and implementation details is an inappropriate level of collaboration. We run all submissions through code similarity tools that compares every student to every other student from this semester and past semesters. If you are suspected of violating the academic integrity code of conduct you will:
- Be reported to SJACS which will acts as an impartial 3rd party to determine if a violation has occurred.
- If a violation is deemed to have occurred, the recommended sanction is a 0 on the assignment and 1 letter grade deduction (i.e. if you would have gotten a B+ you would receive a C+).
- If SJACS determines this is not your first violation, they may initiate a review that could lead to suspension from the school.
The official language on academic integrity is on the syllabus.
Collaboration is important in an academic environment. We want to be sure that you are aware of what is appropriate collaboration and conduct and what may be considered a violation of academic conduct rules. Here are examples to consider:
- Discussing high-level ideas (no coding terms at all) with other students is fine. It is even helpful if you annotate your work with the names of your collaborators.
- Having other students in the class look at your code or access a copy of your code is not acceptable. If test cases are graded, it is also not acceptable to let other students have copies of those test cases. It is also not acceptable to get copies of code or test cases from students who were enrolled in a previous term of CSCI 104. (That would even be a violation for the student not enrolled in CSCI 104 this term.)
- Asking course staff (instructor, TAs, CPs) for help or to look at your code is acceptable.
- Copying test cases from other students or Piazza when test cases are not graded is fine.
- Searching for similar HW code and solutions on Github, online sources, or other textbooks is NOT allowed, even just for "reference". If you happen to find related work in a source that is not course materials, it is best that you cite the materials in your work as comments and notify your instructor.
- Looking up concepts, syntax, and basic instructions on how to deal with the topics online is acceptable.
- Posting in online forums asking people to solve homework questions, paying for solutions, or retrieving solutions online is not acceptable.
In summary, any time that you are trying to get higher grades for work that you did not earn is not acceptable. Any behavior by which you are attempting to receive or grant an unfair advantage that your classmates who are following the rules do not have is not acceptable. Please act with the integrity that is expected of USC Trojans.
If there is suspected cheating, you will be reported to SJACS, no exceptions. Follow the above guidelines to make sure this doesn't happen to you.
In order to make sure that an appropriate level of collaboration is used between you and your classmates, please do not keep notes, pictures, or any records from your discussions. This will ensure that your work reflects only your understanding when you create it. Please do not sit coding next to each other while discussing the work. If you are concerned that an inappropriate level of collaboration has occured, please do the following:
- Keep no notes, pictures, or records from your discussions.
- Cite your collaborators in your comments in your work.
- Take at least a 30 minute break before you continue working and make sure that your work only reflects your own understanding of the solution. If you truly do not understand part of the solution, please do not include it as your own work.