CSC148H - Introduction to Computer Science
Fall 2009


Course Information

General Information

Course information sheet.
Instructor: Sean Henderson
Email: sh [at sign] cs [dot] toronto [dot] edu (please put CSC148 in the subject to avoid unwanted filtration)
Office Hours: M1-3, BA2200
Description: Abstract data types and data structures for implementing them. Linked data structures. Encapsulation and information-hiding. Object-oriented programming. Specifications. Analyzing the efficiency of programs. Recursion. This course assumes programming experience in a language such as Python, C++, or Java, as provided by CSC108H1.
Bulletin Board: The course bulletin board is located here. This will be used for announcements. You are also free to ask questions about course material or assignments here (although if your question would reveal your solution to an assignment, you should ask the instructor during office hours or send an email).

Choosing CSC148

Students should take CSC148 if they have completed CSC108, or have good object oriented programming skills in Python, C++, Java, or something similiar. If you are new to programming, you should take CSC108. If you have a strong programming background but have not done any object oriented programming, you may want to consider taking CSC150, which will cover the material of CSC148 and selected material from CSC108. If you are unsure about this choice, feel free to contact the instructor.

CSC148 Ramp Up Session

We will be holding two ramp up sessions for those who are taking CSC148 without having taken CSC108. These will be held on Sept. 12 and Sept. 19, in BA3175 from 11am - 5pm. These two sessions will be identical. If you would like to attend, send an e-mail to Jonathan Taylor (jonathan [dot] taylor [at] utoronto [dot] ca) with your name, CDF login, and which session you would like to attend (so we have an estimate of attendance). Please put "CSC148 Ramp Up" as the subject of your e-mail.

Lectures

Lecture Code Notes
Lecture 1 cellphone.py
contact.py
except.py
 
Lecture 2 stack.py
queue.py
base.py
balance.py
Read sections 2.3 and 2.4 in the textbook.
Lecture 3 node.py
linkedlist.py
Read section 7.2 in the textbook. Note that you may _not_ submit linkedlist.py for A1.
Lecture 4   Notes on asymptotic notation. Read section 4.2 in the text book.
Lecture 5 recursion.py
maze.py
maze.in
Read chapter 3 in the textbook.
Lecture 6   Read chapter 5 in the textbook.
Lecture 7 bst.py A Java applet to visualize Binary Search Trees: applet
Lecture 8 bst.py bst.py updated to include removal.
Lecture 9 heap.py  
Lecture 10 sorts.py The first five sorting algorithms; insertion, bubble, selection, heap and merge. Read section 4.4 in the textbook.
Lecture 11 sorts.py Discussion of the runtime of merge sort (from Lecture 10) as well as the introduction of quick sort, which has been added to sorts.py.


Assignments

Assignments will be posted here. They are to be completed individually (unless otherwise stated). Late assignments will not be accepted. To have an assignment remarked, submit a written request specifying what you think was marked incorrectly within 2 weeks of the date the assignment was returned.
Assignment 1
Assignment 2 Part 3 was updated October 30. See the assignment and bulletin board for details.
Assignment 3


Midterm

The midterm was written on Oct. 21. Here are the solutions.

Final Exam

The final exam will be written in December, and will include material from all topics covered in lecture (although there is no guarantee all topics will be equally weighted). It is 3 hours long, and there are no aides allowed.
Although you will be asked to write Python programs on the exam (as with the midterm), the emphasis will be on the algorithm/data structure that you use rather than anything specific to Python. To save you the trouble of memorizing a long list of useful builtin Python methods, you will be provided with a short API on the last page of the exam. You can view this here: exam api. You may want to be at least casually familiar with this page before the exam. You will not be required to use any of the methods on that page, nor are they necessary to solve any questions. You are, however, allowed to use any of them so long as it does not trivialize the question. For example, if you are asked to write a recursive method to find the maximum element of a list, it would not be in your best interest to simply write "return max(L)".

Remarking

To request a piece of work be remarked, fill out this form and hand it in to the instructor (as well as the piece of work to be remarked, in the case of the midterm). Note that requests of the form "this answer deserves more marks" will generally be ignored. The same marking guidelines were applied to everyone. Remember that the deadline to have something remarked is two weeks after it was returned; in the case of the midterm and assignment 1, that is November 11.

Labs

There will be 8 lab sessions throughout the course, each worth 1.25% of your final mark. A lab will consist of working with a partner under the supervision of a TA to complete some programming exercise(s). Full marks will be given for showing up on time and making good progress towards completing the exercise(s). Locations will be posted here, as well as exercises.
Lab SectionLast NamesTATimeRoom
T0101A to ZGabriel ChowT1-3BA3175
T0201 A to C. Lee Gabriel ChowF9-11BA3175
T0201H. Lee to ZRenqiang MinF9-11BA3195
Please only show up to the section you are enrolled in.
Labs are cancelled the week of November 9. The final two labs will be the weeks of the 16th and 23rd.
Lab
Lab 1
Lab 2
Lab 3
Lab 4
Lab 5
Lab 6
Lab 7
Lab 8


Links

Python

Download Python.
A Pythong tutorial.
Python style guide: PEP-0008 (Python Style Guide) and PEP-0257 (Python Docstring Conventions).
The IDE used in lecture is Wing 101 (free to download).