# Principles of Imperative Computation

##
**Course ID**
15122

**Description**For students with a basic understanding of programming (variables, expressions, loops, arrays, functions). Teaches imperative programming and methods for ensuring the correctness of programs. Students will learn the process and concepts needed to go from high-level descriptions of algorithms to correct imperative implementations, with specific application to basic data structures and algorithms. Much of the course will be conducted in a subset of C amenable to verification, with a transition to full C near the end. This course prepares students for 15-213 and 15-210. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course. (GHC Clusters are the 3 labs on on Gates floor 5, 5207, 5208, and 5210)

**Key Topics**

Reasoning about code: contracts, invariants, interfaces

Basic Data Structures and Algorithms: Hash Tables, BST, Linked Lists, Graphs

Learn C programming language

Bit Manipulation

Complexity Analysis

Memory

**Learning Resources**

Piazza, Gradescope, Autolab, online lecture notes (no textbook), C0 programming language and documentation, C programming language

**Course Relevance**

For students with a basic understanding of programming and a desire to learn more advanced CS topics.

**Course Goals**

Write imperative that is correct by design

Learn about some fundamental concepts in Computer Science (abstraction, correctness, complexity, modularity)

Learn about a few basic data structures. Develop experience writing code in C

**Pre-required Knowledge**

Basic programming knowledge (variables, expressions, loops, arrays, functions)

**Assessment Structure
**

24 HW assignments (45%), Labs and Quizzes (5%), 2 Midterms (25%), Final (25%)

**Course Link**

http://www.cs.cmu.edu/~15122/home.shtml