List of topics by week:

08/19 - 08/23
Course intro & admin; concept of programming; general architecture of computers (CPU, memory, persistent storage, filesystems, networks, the internet); department computing resources; ``Hello World''; arithmetic expressions, variable declaration and assignment, basic I/O, all within the context of double objects; the iostream and cmath libraries. Good coding practice.
08/26 - 08/30
Basic types and associated operators (double, int, char, bool) and the string type; types and I/O with cin >>, character-stream based I/O; expressions, implicit & explicit conversion, binary number system, ASCII; precedence and associativity, simple if-else-statements (w/o boolean operators); variable scope and blocks; relational operators; ifs without elses. Good coding practice.
09/02 - 09/06
Nested if's; logical operators; dropping $\{\}$'s; else if; simple while-loops; while-loop problem solving, e.g. summing, averages, etc. Good coding practice.
09/09 - 09/13
Euclidean GCD algorithm; more non-trivial problem-solving with simple while-loops, e.g. compounding interest; for-loops; variable initializers; ++ and -; scope rules for variables declared in the 1st slot of a for-loop; Nested loops and step-wise refinement, with examples. Good coding practice.
09/16 - 09/20
ostream objects as boolean conditions; reading and writing from files with streams; more step-wise refinement; file processing; cin.get(); eof; do-while loops; short circuit evaluation; switch statements. Good coding practice.
09/23 - 09/27
X-Week; Debugger lab.
09/30 - 10/04
Functions: prototypes, definitions, scope, the void return type; top-down design, with examples; predicates; pass-by-value vs. pass-by-reference; problem solving with pass-by-reference -- swap, multiple return values; ostream and istream objects; composing functions. Good coding practice.
10/07 - 10/11
Implicit type conversion and function calls; Overloading function names, with applications; Implicit conversion and overloaded functions together -- ambiguous overload; Recursion with lots of examples, base case; the call stack; the call stack & the debugger; Bottom-up design; Good coding practice.
10/14 - 10/18
Indexing characters in a string object; array intro using dynamic arrays -- i.e. pointers, new, delete, indexing, scope/lifetime of dynamically declared objects; the usual array operations -- min, max, average, standard deviation. Good coding practice.
10/21 - 10/25
Arrays and functions -- array arguments, array return values, memory leaks and delete; What does pass-by-value mean for a pointer? What does pass-by-reference mean for a pointer?; Arrays for any type -- e.g. arrays of ostream objects; Multi-dimensional arrays; the rand function; searching and sorting; selection sort. Good coding practice.
10/29 - 11/01
More sorting -- bubble sort, genericity of sorting, different orders; Simple classes (i.e. classes used as structs, all public, no member functions); returning class objects from functions, passing class objects to functions; what the compiler does know how to do with classes (assignment, copy for pass-by-value), what it doesn't know (cin >>, ==, etc). Heterogeneous collections of data; problem solving (e.g. a point class); operator overloading (nothing really new there!) Good coding practice.
11/04 - 11/08
11/11 - 11/15
Dynamically allocated data members (e.g. arrays of such objects, swaps, passing to functions ... what happens?) Composition of classes; Static arrays, static arrays vs. dynamic arrays as class members. Good coding practice.
11/18 - 11/22
Breaking programs up into files; the structure of multi-file programs & compilation/linking issues; Pointers to single objects (new & delete w/o [ ]'s,dereference with * and ->, the 0 pointer); Linked list basics (add-to-front, length, print, add-to-back, delete); Recursive routines on linked lists (recursive versions of add-to-front, length, print, add-to-back, delete, etc); Good coding practice.
11/25 - 11/29
Sorting, searching, removing with linked lists (i.e. problem solving!); Ethics -- property rights and privacy.
12/02 - 12/06
Doubly linked lists; Catch up & words of wisdom; review; SOFs.

Homework (involving programming!) will be given after most lectures, and a minimum of one programming project per marking period will be assigned.

Christopher W Brown