EEN318, Programming III, Autumn 2010
Mon Wed 12:20-1:35 in MM117

The Book

Examinations:

Assignments

     1    Due Wed 15th Sept.    Hash table based word frequency counter.     
2 Due Mon 11th Oct. Shortest path through a simplified map.
3 Due Wed 27th Oct. Display the elevation maps, marking large towns.
4 Due Tues 16th Nov. Make and test a priority queue.
5 Due Mon 13th Dec. Find and nicely display the shortest route from one place to another in the U.S..
6 Due Mon 6th Dec. Scripting: provide functions that allow a program to accept either an expression or a group of simple statements as user input, and evaulate or execute them.

Assistance:

Class History

Class 1  Wed 25‑8‑2010   Introductions, an overview of what we'll be studying, quick reminders of binary chop search and O(nlogn).
Class 2  Mon 30‑8‑2010 Experiments with hash functions, a statistical program to check the quality of random distribution: why doesn't multiplying the characters of a string together work properly? The problem of the number that has no absolute value.
Class 3  Wed 1‑9‑2010 Proper examination of hash functions. Clashes are unavoidable, hash tables must be arrays of linked list pointers connecting all strings with the same hash value. Discovering the Poisson distribution in the results. Calculating the evil int.
Class 4  Wed 8‑9‑2010 The change in performance characteristics as a hash table is filled; the simplicity of resizing to maintain constant time access. Qualitative comparison with binary trees. The "* *" confusion in C++, implementing a variable capacity hash table.
Class 5  Mon 13‑9‑2010 What can we do with these files? (Files: alphaplaces, intersections, majorroads, usaW125N50D5). We need to work out how to process non-text data files.
Class 6  Wed 15‑9‑2010 Comparing iostream, stdio, and unistd.
Extracting meaningful data from a binary (non-text) file.
Class 7  Mon 20‑9‑2010 First thoughts on the problem of finding the best route from A to B on a road map: the simplified case of the map looking like a tree.
Class 8  Wed 22‑9‑2010 More consideration of shortest path algorithm, a tidy recursive version, replacing recursion with a single to-do list: everything is exactly the same if the to-do list behaves like a stack, "depth first" search. Wondering what would happen if the to-do list were a queue.
Class 9  Mon 27‑9‑2010 Templates and Abstract Data Types contrasted with concrete implementations. The basic Breadth-First Search method map2: pos, neg.
Class 10  Wed 29‑9‑2010 What happens when roads are not all the same length? Breadth first search requires us to invent a Priority Queue. Considered implementations: unordered linked list with search to remove; ordered linked list with search to insert; ordered binary tree, and how easy removal turns out to be.
Class 11  Mon 4‑10‑2010 The problem with shallow copying especially when destructors are properly defined, complexities of defining assignment operators and copy constructors. Why objects should "always" be passed to functions as references.
Class 12  Wed 6‑10‑2010 Counting sort is not a general purpose sorting algorithm. Remembering fast (that is, O(N log N)) sorting algorithms: sort by making a binary tree; Merge-sort classical recursive, and more efficient with nested loops.
Class 13  Mon 11‑10‑2010 Software engineering techniques: loop invariant, pre-condition, post-condition, and loop variants. Mergesort and Quicksort, pivot selection.
Class 14  Wed 13‑10‑2010 More quicksort pivot selection considerations. Partitioning methods: the clean three-partition method with its obvious loop variant and invariant.
Class 15  Mon 18‑10‑2010 Steps in creating a graphics project. Using I/O functions under windows.
Beginning to deal with formulas and scripts: using a tree as the representation.
Class 16  Wed 20‑10‑2010 Creating the tree to represent a formula ("parse tree") within a program; printing and evaluating the formula. Inductive logic to demonstrate correctness of recursive design. (step 1), (step 2), (step 3).
Class 17  Mon 25‑10‑2010 Test Day.
Class 18  Wed 27‑10‑2010 Cursory test review. Adding variables, assignment, prints, and semicolons to the formulas to make something like a scripting language. Dividing and conquering: making a tokeniser so the parser is untroubled by little details. Starting to make parsing functions.
Class 20  Wed 3‑11‑2010 The usefulness of layered software design. here we are: basic input system, then tokeniser, then many layers of parser.
Class 21  Mon 8‑11‑2010 Reminders about priority queues. Parsing even more expressions, priorities, parentheses, etc.
Class 22  Wed 10‑11‑2010 A Parallel Plan for a Large Project.
Function calls, semicolons, and for &&, etc.
Class 23  Mon 15‑11‑2010 Traditional K&R C. Function declarations, assumed 'int', block has strictly declarations then executable statements, no // comments, 'const' and 'void' on very shaky ground, the evil macros do.
Class 24  Wed 17‑11‑2010 ANSI C (or C-99). structs, typedefs, void-*, malloc.
Class 25  Mon 22‑11‑2010 Inheritance, etc.
Wed 24‑11‑2010 Voluntary review session, not a regular class.
Class 26  Mon 29‑11‑2010 Second Test.
Class 27  Wed 1‑12‑2010 More inheritance, polymorphism, virtual methods.