Syllabus
CSCI 1300, Section 100
Introduction to Programming

Tu, Th 9:30 - 10:45
Math 100

Instructor

Professor Michael Mozer (mozer@cs.colorado.edu)
Department of Computer Science
Engineering Center Office Tower 7-41
(303) 492-4103
Office Hours:  Tu 11:00-12:30, W 1:00-2:30, Th 11:00-12:30

Teaching Assistants

Michael Howe (michael.howe@colorado.edu)
Office Hours: M 1:30-3:00, Th 12:30-2:00 in ECCR 244

Philip Ogren (philip.ogren@colorado.edu)
Office Hours: M 9:00-10:00, F 11:00-1:00 in ECCR 244

Daniel Von Dincklage (danielvd@colorado.edu)
Office Hours: M 3:00-4:30, Tu 12:30-2:00 in ECCR 244

Recitations can be found here.

Course Objectives

This course introduces the fundemental techniques of computer programming as a foundation for more advanced study of computer science.  By the end of the semester, you will be able to design, implement, and test programs to solve problems such as:  playing board games such as tic-tac-toe and hangman and video games such as pong and space invaders, simulating the operation of elevators in the Engineering Center, displaying and manipulating three-dimensional shapes on a screen, managing and manipulating a data base of student grades, and printing a banner of large block letters.

Course topics include standard programming constructs, problem-solving strategies, the concept of an algorithm, fundamental data structures (strings and arrays), machine representation, and graphics. Attention is devoted to developing effective software engineering practice, emphasizing such principles as design, decomposition, encapsulation, procedural abstraction, testing, and software reuse.

Alternative Courses

If you have no programming background or computer experience, you may want to consider CSCI 1200, which serves as a gentler introduction to computing.  Many students take CSCI 1200 before CSCI 1300.

If you already have significant experience with C or C++, you may consider starting with CSCI 2270 (Data Structures).  Prior to CSCI 2270, you need one semester of calculus and an understanding of how to program with functions and simple data structures such as arrays.   Look here for details.

You may also be interested in CSCI 2380 (Introduction to Programming Using Java).  Although CSCI 2830 will not satisfy the prerequisites for subsequent computer science courses, it is a good choice for students who want just one semester of programming in a modern language.

Prerequisites

You are expected to be familiar with high-school level mathematics, in particular, algebra and trigonometry.

Course Materials

Text

Problem Solving with C++: The Object of Programming (4th Ed.) by Walter Savitch. ISBN 0321113470.  You may use a third edition copy because changes between the third and fourth editions are relatively minor.

Computers

To complete programming assignments, students may use their own PCs or any of the campus PC labs.  We will provide the software that you need for the course.  The good news is that the software is public domain, i.e., it is free.  The bad news is that we can support only computers running Windows 98/2000/ME/XP.  (The software can be compiled for linux or mac OS, but this requires some expertise; also, we will use a graphics library for several assignments that is available only under Windows.)

Course Schedule

Class Date
Lecture Topic
Recitation Topic
Reading
Homework

Aug 26
Introduction (algorithms, languages)
editing with emacs; compiling with G++
1.1-1.4

Aug 28
Writing a simple program (editor, compiler)

Sep 2
Variables; Input and output (I/O)
practice with I/O and expressions
2.1, 2.2

Sep 4
Data types; expressions
2.3

Sep 9
Conditionals I (if-else)
practice on conditionals
2.4 (pp. 73-83); 2.5
HW1 assigned
Sep 11
Review day


Sep 16
Expressions; Operator precedence
programming challenge 1 (input/output; variables; expressions; conditionals)
7.1
HW1 due
Sep 18
Conditionals II (multiway branches; switch)
7.2 (ignore example on pp. 398-400)
HW2 assigned
Sep 23
Loops I (do-while; while; for)
practice on loops
2.4 (pp. 83-93); 7.3

Sep 25
Loops II (nested loops)
7.4

Sep 30
Review day
programming challenge 2 (loops)

HW2 due
Oct 2
Fall Break -- No Class


Oct 7
Functions I (predefined; programmer defined; top-down design)
practice writing functions
3.1-3.5
Oct 9
Functions II (parameters; local variables) 4.1-4.4
HW3 assigned
Oct 14 Functions III (testing and debugging)
programming challenge 3 (functions)

Oct 16 Graphics
BGI introduction;
BGI function list

Oct 21
Review
practice with graphics library

HW3 due
Oct 23
Midterm

HW4 assigned
Oct 28
Arrays I (one dimensional)
practice with arrays
10.1-10.3

Oct 30
Arrays II (multidimensional)
10.5

Nov 4
Arrays III (characters)
HW4 check off
11.1, 11.2 HW4 due; HW 5 assigned
Nov 6
File I/O (Guest lecturer: Michael Howe)
5.1, 5.2
Nov 11
Character I/O
programming challenge 4 (arrays)
5.3

Nov 13 Structures
6.1

Nov 18
Recursion (Guest lecturer: Dan Feng) HW5 check off (if you have it working); practice with character string manipulation and file I/O
13.1-13.3 (stop at p. 781)
Nov 20
Pointers
12.1
HW5 due (Saturday noon); HW6 assigned
Nov 25
Review
No recitation (Friday classes are held on Wednesday, per university schedule)


Nov 27
Thanksgiving -- No Class


Dec 2
Link lists (example of pointers plus structures)
programming challenge 5 (file I/O)


Dec 4
Artificial Intelligence


Dec 9 Object-oriented programming (Guest lecturer)
HW6 check off, practice quiz

HW6 due
Dec 11
Semester Review


Course Requirements

You are expected to attend all lectures and your weekly recitation.  Students average about 8 hours of week outside of class and recitation for reading the required text, learning programming concepts by experimentation on a computer, and completing programming assignments.  Some students find programming to be a challenge and may spend as much as 16 hours a week outside of class.  If you find yourself spending too much time and not understanding the concepts, you should come to Professor Mozer or the TA immediately.  The coursework requires a cumulative understanding of the material; if you get lost early in the semester, there will be a snowball effect and you will get further and further behind as the semester progresses.

Reading

Reading assignments from the Savitch text are listed in the fourth column of the schedule.  These readings should be completed by the date of the lecture.  You should bring questions you have about the reading to class.  Pay attention to the page ranges where they are given.

Lectures

Lectures will expand on and complement the material in the text, not repeat it.  I'll devote some lecture time to answering questions about the reading; if one student has a question, it's likely that many others have the same question, so don't be shy to ask what is puzzling you.  The focus of lectures is on how a programmer attacks a problem and goes from a problem definition to C++ code.  During class we will write programs that should serve as examples to help you with your homework assignments.

Students come into the class with diverse programming experience.  Early in the semester, it is difficult to keep the most advanced students engaged while not losing the novices.  My solution to this problem is to have occasional review days when no new material is presented.  If you have a good understanding of the material, you need not attend the review days.  If you want to go back over the material and ask further questions, the review days are a chance to get caught up.  If you have a strong programming background, you can probably get away with skipping the lectures through September 11, but you should attend class after that point.

Homework Assignments

The only way to learn to program is to do plenty of it.  As you read the text, you will learn the concepts best if you try out the examples in the book, or make up your own variations on them.  We'll also give you a series of homework programming assignments.  As far as I'm concerned, these are the most important work you will do for the course and your learning experience.  If I were certain that students did their own work (see "Academic Honesty" below), I would base the entire course grade on homework assignments.

Programs will be graded by how well they satisfy the specification given in the assignment, how well they work, and how well they follow  the CSCI 1300 style guide

Late assignments will be docked 10 points (on a 100 point scale) each day.  You are responsible for keeping back up copies of your work; we will not accept "my computer crashed" as an excuse.  Whether you work on your own machine or in the labs, you should make back up floppies and  mail yourself copies of the code at various stages of development.

Programming Challenges

To ensure that you can write programs on your own without unauthorized help, we will give you programming challenges during some of the recitation periods.  These are small programs that must be designed, written, debugged, and run during the course of the recitation.  The TA who leads your recitation will be available to answer general programming questions and help you with debugging.  If you are stuck, the TA will also offer clues, but the score you receive on the challenge will depend on how much assistance you receive.  You will be allowed to use your text.

After the recitation, your TA will grade each effort on a 10 point scale.   Obtaining a working program will give you 5 points.  Following good coding practice and the CSCI 1300 style guide will give you an additional 2 points.  And completing the assignment without TA hints is worth another 3 points.

Exams

To ensure that you understand the syntax of the C++ language and can interpret code you are given, we will have a midterm and a final. The final will focus on the second half of the semester.  Both exams will be multiple choice.  Exams will be open book, but they will be long enough that you will not have the time to research the answer to every question during the exam.  We'll provide sample questions as the exam nears.

Semester Grade

Your semester grade will be based 40% on the homework assignments, 30% on the programming challenges, and 30% on the exams.

Academic Honesty

Working with your fellow students—for example, studying together for exams—can be very helpful in learning. Studies have shown that the single most important factor in determining the success of students was whether or not they had developed intellectual relationships with other students. On the other hand, some ways of working together can strongly interfere with your learning—for example, copying their answers.

The final grade you receive in a course is intended to reflect the level of accomplishment you have achieved in learning the presented material. This requires that each assignment you submit for grading be your own original work. Although I encourage you to talk with one another about the course, the C++ language, and clarifying the nature of the assignments, you are NOT permitted to copy code from anyone else or to have anyone else write code for you.  We will adhere to the University's Honor Code and you will be required to certify that you have neither given nor received unauthorized assistance on your work.