15-122 Principles of Imperative Computation

The written and programming assignments are the heart of this course and account for 45% of your grade. Much of what you learn in this course will be through completing these assignments. They must be done individually. See the Academic Integrity section for specifics.

Assignment Schedule

The schedule is subject to change throughout the semester

Written Assignments (200 points total)

Written assignments may be neatly written or typed, and these MUST represent your own work. Written assignments MUST be stapled, once in the top left corner, or they may not be graded.

All written homework is due at 6:00pm on the due date (except when noted otherwise). There are no late days for written homework, and no late work will be accepted without advance permission of an instructor.

Academic Integrity Form - due Thu, Sep 3 at the start of lecture
Print out the Academic Integrity Form for 15-122 and read through it carefully, also reading through the referenced University Guidelines on Academic Integrity. Sign and complete neatly. Hand in during your next lecture. If you do not sign and submit this form, none of your work will be graded.

Written 1 due Tue, Sep 8 at the start of your lecture
Written 2 due Mon, Sep 14 by 6 PM
Written 3 due Mon, Sep 21 by 6 PM
Written 4 due Mon, Sep 28 by 6 PM
Written 5 due Mon, Oct 5 by 6 PM
Written 6 due Mon, Oct 12 by 6 PM
Written 7 due Mon, Oct 19 by 6 PM
Written 8 due Mon, Oct 26 by 6 PM
Written 9 due Mon, Nov 2 by 6 PM
Written 10 due Mon, Nov 9 by 6 PM
Written 11 due Fri, Nov 20 by 6 PM (note: day change)
Written 12 due Mon, Nov 30 by 6 PM
Written 13 due Mon, Dec 7 by 6 PM

Programming Assignments (250 points total)

Programming assignments will be submitted through Autolab. Please authenticate with your Andrew ID and password and make sure you can access the site. Assignment writeups will be posted below once an assignment is active. Relevant starter code and additional files will be available through Autolab. All programming assignments are due at 10:00pm on the due date. You get four free late days (or grace days), which means that for exactly four programming deadlines you can turn in your assignment within 24 hours after the deadline (max one day per deadline). Autolab handles these late days automatically - do NOT email an instructor or TA, just turn in the assignment between 1 minute late and 24 hours after the deadline. Aside from this, late work will not be accepted without advance permission from the instructor.
Assignments are also available on Autolab.
Scavenger Hunt - writeup (pdf), handout (tgz) due Thu, Sep 10 by 10 PM
Pixels - writeup (pdf), handout (tgz) due Thu, Sep 17 by 10 PM
Images - writeup (pdf), handout (tgz) due Thu, Sep 24 by 10 PM
DosLingos - writeup (pdf), handout (tgz) due Thu, Oct 1 by 10 PM
Clac writeup (pdf), handout (tgz) due Thu, Oct 15 by 10 PM
Editor writeup (pdf), handout (tgz) due Thu, Oct 29 by 10 PM (checkpoint: Thu, Oct 22)
Ropes writeup (pdf), handout (tgz) due Thu, Nov 5 by 10 PM
Generic Queues writeup (pdf), handout (tgz) due Tue, Nov 17 by 10 PM (note: day change)
Lights Out writeup (pdf), handout (tgz) due Tue, Nov 24 by 10 PM (note: day change)
C0VM writeup (pdf), handout (tgz) due Thu, Dec 10 by 10 PM (checkpoint: Thu, Dec 3)

Academic Integrity

15-122 Academic Integrity form: click here. (Print out, sign and submit in lecture)

Please read the University Policy on Academic Integrity carefully to understand the penalties associated with academic dishonesty at Carnegie Mellon. In this class, cheating/copying/plagiarism means copying all or part of a program or homework solution from another student or unauthorized source such as the Internet, knowingly giving such information to another student, providing students with a means of gaining access to your solutions (e.g. sharing passwords, leaving laptops open with code available) or giving or receiving unauthorized information during an examination. In general, each solution you submit (written assignment, programming assignment, or exam) must be your own work. In the event that you use information written by another person in your solution, you must cite the source of this information (and receive prior permission if unsure whether this is permitted). It is considered cheating to compare complete or partial answers, discuss details of solutions, read other students. code or show your code to other students, or sit near another person who is taking the same course and try to complete the assignment together. It is a violation of this policy to hand in work for other students.

Your course instructor reserves the right to determine an appropriate penalty based on the violation of academic dishonesty that occurs. Violations of the university policy are likely to result in severe penalties including failing this course and possible expulsion from Carnegie Mellon University. If you have any questions about this policy and any work you are doing in the course, please feel free to contact your instructor for help.

We will be using the Moss system to detect software plagiarism.

It is not considered cheating to clarify vague points in the assignments, lectures, lecture notes, or to give help or receive help in using the computer systems, compilers, debuggers, profilers, or other facilities, but you must refrain from looking at other students' code while you are getting or receiving help for these tools. It is not cheating to review graded assignments or exams with students in the same class as you, but it is considered unauthorized assistance to share these materials between different iterations of the course. Do not post code from this course publicly (e.g. to Bitbucket or GitHub).

The value of your degree depends on the academic integrity of yourself and your peers in each of your classes. It is expected that, unless otherwise instructed, the work you submit as your own will be your own work and not someone else's work or a collaboration between yourself and other(s).


Grading criteria are stated separately with each assignment.

Grading for written assignments is based on the correctness of the answer and the presentation of your reasoning. Strive for clarity and conciseness, but show how you arrived at the answer. If you cannot solve a problem, explaining your approach and why you failed is encouraged. Such answers may be given partial credit.

The most important criterion for programming assignments is always correctness. Buggy code is useless, and is likely to get a low score. It is important that your code be readable and well-organized. This includes proper use of contracts, invariants, and clear comments.

Grades are based primarily on the total score for the class out of 1000 points. There are no predetermined cut-offs, but 900 and above is generally considered an A, 800 and above a B, etc. The teaching staff will decide on grade boundaries at the end of the year. We will use intangibles, such as participation in class, labs and recitation for those close to grade boundaries.

[ Home | Schedule | Assignments | Resources ]
[ Piazza | Autolab ]

Frank Pfenning