Introduction to formal structures and mathematical reasoning. Graphs, sets, logic, induction, structure of mathematical proof, counting, relations, and algebraic structures.

Provides students an opportunity to refine programming and design skills. Emphasis is on techniques of data abstraction, including encapsulation and inheritance; implementation and appropriate use of common data structures (such as lists, stacks, queues, trees, and graphs); recursion; and the close relationship between data structures and algorithms. Students considering a major or minor in computer science should take the required introduction to the discipline course (COMP 105, 107, or 108) before taking this course.