Official Course Description.(Somewhat outdated.)
This course will further develop and expand upon the topics introduced
in CS 141. Advanced programming techniques will be covered, with
extensive use of recursion and dynamic data structures. Abstract data
types, including lists, queues, trees and graphs, will be
studied. Specific emphasis will be given to tree traversals and binary
search trees. Algorithms for searching and sorting will be explored
along with methods of comparative analysis. The topics in this course
provide an essential foundation for the further study of computer
science.

More Accurate Description. This course further develops and
expands upon the topics introduced in CS 141. It covers principles
and techniques fundamental to the design and development of larger
computer programs. This includes: data abstraction and
object-oriented design; elementary data structures such as vectors,
linked lists, stacks and queues; algorithms for searching and sorting;
analytical methods for evaluating the efficiency of algorithms; and
the algorithm design technique of recursion. An object-oriented
language such as C++ and its associated Standard Template Library will
be used to illustrate the concepts and techniques. The topics in this
course provide an essential foundation for the further study of
computer science.

To learn principles and techniques fundamental to the design
and development of computer software. These include data abstraction,
object-oriented design, elementary data structures and algorithms,
analysis of algorithms, and recursion.

To further develop your coding, documentation, debugging and
testing skills.

Demonstrable outcomes. By the end of the semester,

You will have a good understanding of the principles and
techniques mentioned in Objective 1 above.

You will be able to use them in the design and implementation
of C++ programs of a moderate size.

You will be able to implement elementary data structures
including vectors, linked lists, stacks and queues.

You will understand the importance of using standard software
components and will be familiar with the basic data structures and
algorithms provided in the C++ Standard Template Library.

You will be able to analyze the running time of simple
algorithms.

You will be able to implement simple recursive algorithms.

You will be able to implement and analyze basic algorithms for
searching, sorting and, if time permits, tree traversal.

Grading. Your evaluation will be based on several homework
assignments (A), which will be mostly programming assignments, two
tests (T), a final exam (F) and your lab attendance (L). Your course grade will be computed using the following formula:

20% A + 25% T1 + 25% T2 + 25% F + 5% L

The final exam will not be cumulative. At the final exam, you
will have the option of writing make-up exams for Tests 1 and 2.
Tentative dates for the tests are Thursday, February 19 and Thursday,
April 2. These will be evening exams. All students are required to write the final exam (no exemptions).

The lab grade (L) will be based on your attendance at the labs, your performance on the assignments, and whether you hand in your assignments early. Details will be given in the Assignment Policy.

Policy for missed work. There will be no make-up
assignments. Late assignments may be accepted if a good excuse is
provided and if arrangements are made at a reasonable time, in
advance, if possible. Make-up tests can be arranged under the same
conditions. Other special arrangements can be made for students
forced to miss more than a few days of class.

Laptops and other electronic devices. These are permitted in
class only for the purpose of taking notes. Nothing else. Please
turn off your phone ringers while in class or at the lab.