CS 173
Intermediate Computer Science
Spring, 2011

Denison
Professor: Jessen Havill
Office: Olin 208
E-mail: havill@denison.edu
Phone: 587-6582
Mailbox: Olin 201
Office hours: MWF 2:30 or other times by appt.

Description

In this course, we will build upon the fundamental programming and problem solving skills you acquired in your introductory CS course. We will talk more formally about software development, starting in Python and migrating to a new (to you) programming language called C++. A unifying theme in this course is the Abstract Data Type, a formal specification of a logical object containing both data and operations on this data. These topics, together with the mathematical background in CS 174 or Math 210, will give you a strong foundation for later courses in Computer Science.

Required and Optional Texts

Data Structures and Algorithms Using Python and C++ by David M. Reed and John Zelle

An Introduction to Linux at Denison (available on my web page)

Optional: A good C++ reference book like one of the following:

Web Resources

Refer to these web pages (links above) for reading assignments, homework assignments, answer keys, sample programs, and other useful resources.

Attendance and Other Responsibilities

In order to do well in this class, it is imperative that you take an active role in the learning process. I cannot (and will not) simply transfer knowledge to you. Rather, learning must be an active process in which the instructor is but an important resource. This is especially true with programming; proficiency requires loads of hands-on practice.

Your attendance is expected at each class meeting. It is in your own best interest to attend class, as your grade will almost certainly suffer indirectly if you choose not to attend. In addition, I reserve the right to consider attendance in instances of borderline grade assignments. Of course, excused absences (sickness, family emergencies, varsity athletic participation) will not be held against you. Scheduled absences should be communicated to me well in advance.

You are responsible for the content of reading assignments, lectures and handouts, as well as announcements and schedule changes made in class whether or not you are present. If you must miss a class, be sure to check with me or another student to get what you missed. Exams will be given in class on the day scheduled and may not be made up.

It is very important that you keep up with the assigned reading. Read your book on a daily basis. Be especially sure to read the material in the appropriate chapter before coming to class so you will be ready to ask questions. All reading assignments are listed on the class web page. The material in the course is, by necessity, cumulative. Be warned that if you fall behind, you will not be able to catch up easily.

Homework Policies

There will be a number of programming assignments given during the semester which will be due in class on the date specified. No late homework assignments will be accepted, unless arrangements have been made with me well in advance. Since it will most likely not be obvious how long an assignment might take, you are well advised to start early. Like other classes at Denison, it is expected that you devote at least 2-3 hours to these assignments for each hour of class time.

You must satisfactorily complete all programming assignments in order to pass the course. If you receive a grade of 80 or below on an assignment, I will give it back to you to fix. The second version will be due 3 days after I hand it back. Your final grade for the assignment will then be a weighted average of the two scores: 75% of your first score plus 25% of your second score. As long as the second score is above 80, you will not have to work on it a third time.

Academic Integrity

Proposed and developed by Denison students, passed unanimously by DCGA and Denison's faculty, the Code of Academic Integrity requires that instructors notify the Associate Provost of cases of academic dishonesty, and it requires that cases be heard by the Academic Integrity Board. Further, the code makes students responsible for promoting a culture of integrity on campus and acting in instances in which integrity is violated.

Academic honesty, the cornerstone of teaching and learning, lays the foundation for lifelong integrity. Academic dishonesty is intellectual theft. It includes, but is not limited to, providing or receiving assistance in a manner not authorized by the instructor in the creation of work to be submitted for evaluation. This standard applies to all work ranging from daily homework assignments to major exams. Students must clearly cite any sources consulted -- not only for quoted phrases but also for ideas and information that are not common knowledge. Neither ignorance nor carelessness is an acceptable defense in cases of plagiarism. It is the student's responsibility to follow the appropriate format for citations. Students should ask their instructors for assistance in determining what sorts of materials and assistance are appropriate for assignments and for guidance in citing such materials clearly.

For further information about the Code of Academic Integrity see http://www.denison.edu/about/integrity.html

In this class, you may generally discuss programming problems with other students in the class, but the programs themselves must be your own. You may have general conversations about problem strategies, but you must leave these conversations without having written anything down. When it comes time to write your programs, you are on your own. Sitting next to someone in the lab while you discuss each line of code is absolutely unacceptable. Keep in mind that it is quite easy for me to tell when two students have been working too closely. In such cases, I will report the instance to the Associate Provost for disciplinary action.

You may not get help from students outside the class, with the exception of the student tutors, whose hours will be posted shortly. If you have questions, ask the tutors, or come see me and I will be happy to help. You are also quite welcome to send me e-mail or call if you would like to discuss an assignment.

Grade Determination

The following relative weights will be used to determine your final grade:

Homework Assignments 50%
3 Mid Term Exams 10% each
Final Exam 20%

General Course Topics

  1. Abstract Data Types (ADTs)
    • List, Set, Stack, and Queue ADTs

    • Binary Tree ADT (if time permits)

  2. Software Engineering Principles
    • Software design process

    • Preconditions, postconditions, and loop invariants

    • Unit testing and using a debugger

  3. Programming Concepts
    • Object oriented programming (designing classes and templates) in Python and C++

    • Dynamic memory allocation

    • Pointers and linked lists

    • Separate compilation and makefiles

    • Recursion

    • Functional programming in LISP

  4. Introduction to Algorithm Analysis
    • Asymptotic notation

    • Sorting algorithms

  5. Programming with the Linux operating system

Accommodations

Any student who feels he or she may need an accommodation based on the impact of a disability should contact me privately as soon as possible to discuss his or her specific needs. I rely on the Office of Academic Support to verify the need for reasonable accommodations based on documentation on file in their office.
Have a great semester! If you need anything, please let me know.