Syllabus
CSCI 1300, Section 100
Introduction to Programming
Tu, Th 9:30 - 10:45
Math 100
Instructor
Teaching Assistants
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.