CSCI 201 Computer Science
Fundamentals
Syllabus
Meeting Time/Place: MF 1-2:15pm, Fitzelle
218
Prerequisites: Grade of C or better
in CSCI 116; or consent of the instructor
Instructor: Don
Allison
Office: 225
Fitzelle Hall
Phone: (607)
436-3439
Email: allisodl@oneonta.edu
Office Hours: Wednesday
1:40-4pm
Friday 2:15-5pm
Others by
appointment (or just drop by)
Text: There are three required texts for this
course. The first is Computer
Science: An Overview, by Glenn Brookshear,
10th edition, published by Pearson/Addison-Wesley, ISBN
978-0-321-52403-4. This is the text for
the computer science content of the course.
The second text is C++ Distilled by Ira Pohl, published by
Addison-Wesley in 1997, ISBN 0-201-69587-1.
This book serves as a quick reference manual for the programming
language we will be using, C++, and covers extra features that we don’t cover
in 116. It should prove useful not only
for this course but for the rest of your time here in Oneonta. The third book is Expert C Programming:
Deep C Secrets, by Peter van der Linden,
published by Prentice-Hall in 1994, ISBN 0-13-177429-8. Even though this book is mainly about C and
the C-like part of C++, Peter van der Linden wrote
compilers for Sun Microsystems, and so he had to have a deep understanding of
all those icky undefined corners of the language. Because C and C++ are strongly connected,
most of what he says is directly applicable to C++ as well. This book has one of the best explanations of
pointers I have ever seen, and explains what the differences are between and
array and a pointer so that even I can understand it! This is a book I read every two or three
years just to refresh my memory of the way C and C++ work, and I strongly
recommend you do the same.
Software: For this course we will be programming in C++
using the Visual C++ 2008 Compiler in the Windows environment. Every machine in the departmental lab should
dual boot both SUSE Linux 11.1 and Windows and have Visual Studio 2008
installed on it, so finding a machine to work on should not be a problem. All your work should be stored on your
personal jump drive when working in the lab.
(Jump drives have come down in price to the point that you can get a
1-2GB one for the price of a slice of pizza and that is more than adequate to hold all your programs for this
course!). You should copy your files to
the D:\temp directory while working on them (to save write cycles to your jump
drive, and to make things run faster), but you should copy everything back to
your jump drive when you are done, and delete
all your files from the lab machine before you log out. Anyone found leaving files lying around on
the lab machines will be penalized appropriately. If you wish to do the projects on your
personal machine, Visual Studio 2008 is available for free for students from
Microsoft DreamSpark (http://www.microsoft.com/Presspass/press/2008/feb08/02-18GSDPR.mspx).
Course Description: (from the catalog) An
introduction to the fundamentals of computer science. This course provides a survey of topics used
in later computer science coursework.
Course includes an introduction to topics selected from: Data representation,
binary arithmetic and radix positional notation, Boolean and propositional
logic, combinational circuitry, program language specification, assembly
language, automata theory, operating systems, computer communication,
computational theory, artificial intelligence. Course includes implementation
of algorithms in a contemporary computer language (like C++ or Java).
Course Goals: The
purpose of the course is to expose students to the wide range of topics that
fall under the computer science umbrella.
It is also intended to give students more practice programming, using
projects slightly larger than those used for CSCI 116. At the end of the course students should be
better able to define and describe computer science, give examples of the gamut
of topics it covers, and should be reasonably fluent C++ programmers.
Tentative Schedule:
|
Date |
Monday |
Tuesday |
Wednesday |
Thursday |
Friday |
|
Jan 12-Jan 16 |
|
Last day
to register |
Classes
begin Add/drop
begins |
|
Read
Expert C Programming Look
through C++ DIstilled |
|
Jan 19-Jan 23 |
Martin
Luther King Day – admin offices open |
Add/drop
ends Last day
to sign up for P/F Inauguration
Day |
|
Getting
Started program due |
|
|
Jan 26-Jan 30 |
Chinese
New Year |
Last day
to add a full semester course |
|
Read Chapter 0, Introduction, and
Chapter 1, Data Storage |
|
|
Feb 2-Feb 6 |
Superbowl was
yesterday Groundhog
Day May
graduation application deadline |
|
|
Program #1
due Read Chapter
2, Data Manipulation |
|
|
Feb 9-Feb 13 |
|
|
TAP
Certification begins |
Read Chapter 3, Operating Systems |
|
|
Feb 16-Feb 20 |
President’s
Day EXAM #1 |
College
closes after last class Read
Chapter 4, Networking and the Internet |
|||
|
Feb 23-Feb 27 |
Graduate
admissions applications due Break |
Mardi
Gras Break |
Ash
Wednesday Break |
Break |
Break |
|
Mar 2-Mar 6 |
Classes
resume Summer
session registration begins Dr. Suess birthday Read
Across America Day |
|
|
|
Read Chapter 5, Algorithms |
|
Mar 9-Mar 13 |
Daylight
Savings Time started yesterday morning…did you set your clock ahead? |
Purim |
Interim
grades due from faculty |
|
Read
Chapter 6, Programming Languages |
|
Mar 16-Mar 20 |
St. Patrick’s Day |
|
LAST DAY
TO DROP A CLASS First
day of spring Read Chapter 7, Software
Engineering |
||
|
Mar 23-Mar 27 |
Program #2
due Read
Chapter 8, Data Abstractions |
||||
|
Mar 30-Apr 3 |
|
April
Fools |
|
College
closes after last class Program #3
due Read Chapter 9, Database Systems |
|
|
Apr 6-Apr 10 |
Break |
Break |
Break |
Break Passover |
Break Good Friday |
|
Apr 13-Apr 17 |
Easter
Monday |
Last day
for students to make up I or P grades from fall 2008 Classes
resume |
Income
Taxes Due |
|
Last day
for faculty to turn in grades to replace I/P grades EXAM #2 Program #4
due Read
Chapter 10, Computer Graphics |
|
Apr 20-Apr 24 |
Begin
fall pre-enrollment Earth
Day Administrative
Professional’s Day |
Last day
to withdraw from college |
Arbor
Day Read Chapter 11, Artificial
Intelligence |
||
|
Apr 27-May 1 |
|
|
May Day Program #5
due Read
Chapter 12, Theory of Computation |
||
|
May 4-May 8 |
Cinco de
Mayo National Teachers’ Day |
Last day
of class |
Final
Exams Begin 8-10:30am
TR10 11am-1:30pm
TR4 2-4:30pm
TR12 |
8-10:30am
MWF10 11am-1:30PM
MWF2 2-4:30pm
MWF12 |
|
|
May 11-May 15 |
Mother’s
Day was yesterday—did you remember?? 8-10:30am
MWF9 11am-1:30pm
MWF1 2-4:30pm
MWF11 Final Exam 11 am |
Nurses’
Day 8-10:30am
TR8 11am-1:30pm
TR2 |
8-10:30am
MWF8 11am-1:30pm
MWF3 Final
Exams End |
|
Commencement,
Saturday May 16 Armed
Forces Day Saturday May 16 |
General Policy Information: All college policies
will be adhered to, including policies on attendance, academic honesty,
etc. Students are expected to be
familiar with and adhere to these policies as outlined in the student handbook,
this syllabus, and other administration publications.
Attendance Policy: Attendance is STRONGLY
encouraged. Although it will not enter
into your grade computation directly, I will be taking attendance occasionally,
especially at the beginning of the semester to start putting names with faces. However, students who attend class regularly
generally do much better in their
classes than their peers who attend sporadically. You will be responsible for material covered
in class as well as the material in the text. In addition, we will be discussing the exams
and programming projects in class, writing sample code for them, and so on, as
well as answering questions about the assigned material, so it is in your best
interest to attend class as much as possible.
Finally, the college has a requirement that students attend one of the
first two lectures and the first lab for any course or they can be
administratively dropped from the course and their space given to someone
else. Additionally, anyone missing 25%
or more of the class meetings to that point at any time up
through midterm can be involuntarily dropped from the course. Depending on the number of people on the
waiting list for this course, these policies will be enforced more or less
stringently.
Collaboration Policy: Cheating or other academic dishonesty hurts
others as well as yourself and will not be tolerated! For this course, however, it IS
acceptable to collaborate with your classmates, under certain conditions. All work submitted on the exams should be
yours and yours alone, as should any code you submit. If you are working on a project and run into
a problem, it is acceptable to ask a classmate or other person a general
question (such as, “what are the two conditions needed to guarantee termination
of a recursion”), AS LONG AS you actually do the work yourself. For instance, it is unacceptable to ask
someone (other than your instructor) to write code for you to handle argument
passing for a function, or code for opening a file for input. You can share code that was discussed in
class however. In other words, discussing
algorithms or the lecture content is okay, but discussing specifics of the
programming assignments is not. You
should be the physical creator of everything you turn in that wasn’t provided
by the instructor. You should also be
able to answer any question I have about how every one of your programs works.
Let me reiterate: it is all right to ask
others general questions about computer science, programming, C++, or the
assignments. HOWEVER, it
is NOT acceptable for you to ask others (except the instructor)
specific questions about your programs, such as how you should code something
specific. It is okay to occasionally
ask a class member if they know why you are getting a particular compiler
error, but it is not okay to ask them to help you write part of a
function. Code plagiarism or code
sharing will be dealt with as academic dishonesty, for which there are severe
repercussions, so make sure that what you turn in is the product of your own
work and not someone else’s! You should
be able to explain to me everything about any program that you
turn in, and I will occasionally ask you specific questions about your programs
(such as, “Why did you use a for loop here?”) and
expect you to be able to answer them easily!
(These will be a part of your program grade.) One of the objectives of this course is for you
to improve
your programming skills, and as such everything you turn in should be your work
alone. You will have plenty of
opportunity in other courses to work collaboratively. If you have any questions about whether some
type of collaboration is allowed or not, ask me first. Better to know for sure than to risk your
program (or semester) grade on a guess!
Programming Style Guidelines: Programming style is an important part of coding,
and programs you write for this class will be expected to follow the style
guidelines discussed in class and illustrated by the programs we write in
class. You should indent your code to
reflect its internal structure. You
should use block comments to explain what your code is doing at a high
level. Each function should have a
header that gives the function name, the inputs, the output(s), and lists any
side effects, as well as providing a two or three sentence summary of what the
function does. In addition, your main
program file should have a block header similar to the following:
// CSCI 201, Computer Science Fundamentals, Spring 2009
// Program #1: Getting started
// Author: Don Allison
// Date Due: 23 January 2009
//
// This object of this program
is to verify that we can compile and
// execute programs using a C++ compiler.
Your header should include the course name
and number, the assignment number, your name, the program due date, and a two
or three sentence description of the purpose and function of the program.
Program Turn-in Procedure: You should print out
your source and include file(s), along with a sample output, and staple them
together. These should be turned in at
the beginning of class on the day they are due.
Make sure you turn in all the required parts!!! You should also email me a zip file
containing your source code, makefile, test data,
etc, along with a README file that describes
how to recreate your executable, any special instructions needed to run your
program, etc.
Grading and Other Administrivia:
Exams: There will be two exams and a final. Each exam will contribute 15% of your grade,
while the final will contribute 20%.
Programming Projects: The programming
projects are an integral part of the course.
There will be a “getting started” project to familiarize you with the
programming environment, C++, etc, and then 5 or 6 larger programming
projects. The “getting started” project
will be considered part of your homework grade, while the larger projects will
combine to contribute 40% to your final grade.
All programs will be completed in C++ in the Windows environment.
Homework, etc: The remaining 10% of your grade will be
determined by your grades on homework assignments, class participation, etc.
Grade Computation:
|
|
Weight |
Tentative Date |
|
Exam 1 |
15% |
16 February 2009 |
|
Exam 2 |
15% |
30 March 2009 |
|
Final Exam |
20% |
11 May 2009 11am |
|
Programming projects |
40% |
|
|
Class Participation / Homeworks
/ Getting Started Program |
10% |
|
|
Total |
100% |
|
Make-up Test and Late Assignment Policy: Assignments are considered due by
Additional Resources: For those who want to do more work with user
interfaces, you might check out the extensive documentation on line for fltk, glui, glow, and other user
interface toolkits. Specifically, see http://www.fltk.org/, http://www.fltk.org/, and http://glow.sourceforge.net/. See me if you need any pointers or
suggestions. If your C++ skills could
use some help, you might check out the short and cheap book from Barnes
& Noble, C++ Programming in Easy Steps, by Mike McGrath…192 pages, under
$10 http://www.ineasysteps.com/books/?1840782331.