(Last Revision: 08/17/98)

COURSE INFORMATION FOR COMPUTER PROGRAMMING II

CS 2500 (Lec) SECTION 1 AND
CS 2502 (Lab) SECTION 1

MWF 10:10-11:08; P-101 (Professional Schools Building)

TERM:

Fall 1998

CLASS CODES:

40680 CS 2500 Section 001

40681 CS 2502 Section 001

INSTRUCTOR:

John Sarraille, Professor of Computer Science

OFFICE:

P-286, Professional Schools Building, Cal State Stanislaus

OFFICE HOURS:

MWF 9:00-10:00; Tu-Th 10:00-11:00; or by appointment

PHONE NUMBERS:

Office: 667-3345; CS Dept: 667-3185

E-MAIL:

john@ishi.csustan.edu

HOMEPAGE:

http://www.cs.csustan.edu/~john/jsHomepage.html

BASIC SCHEDULE INFO:

For technical reasons, students in this class are required to sign up 
separately for CS 2500 (lecture) and CS 2502 (lab). However, each class 
session is a mixture of lab and lecture. Each day we do whatever we need 
to do: lab, lecture, or some of both.  Almost every time class meets, 
whatever day it is, we will be in P-101.  However, during the semester 
class will meet occasionally in the main Computer Science Laboratory (The 
Lab: P-288).  We will meet there if we need to do some hands-on computer 
work.  Always come to P-101 for class unless I have previously announced 
that we will meet in the Lab.

My expectation is that everyone will attend all the classes and keep 
current with everything that is happening in class.

PREREQUISITES:

It is important that you are adequately prepared for taking this course, 
CS 2500.  Check with me if you have not passed:

CS 1500 (Computer Programming I), or the equivalent.

REQUIRED TEXT:

"Data Abstraction and Problem Solving with C++: walls and mirrors" by 
Carrano, Helman, and Veroff (2nd edition)

SUGGESTED READING:

If you have no experience using Unix computers, you ought to get a copy 
of:

"Learning the Unix Operating System" by Grace Todino, Jerry Peek, and 
John Strang (4th Edition).  

The book is very inexpensive.  Look in the CS 3100 textbook section for 
it if you don't see it in the CS 2500 section.

PROGRAMMING LANGUAGE:

Our text is C++ oriented, and I will present most code samples in C++. If 
you want to do a programming assignment in a different computer language, 
basically I am willing to accept that, but you must speak with me in 
advance and reach an agreement on some ground rules.

COMPUTER EQUIPMENT
SUN Ultra Workstations:

Each of you will need an account that gives you access to all the 
Computer Science Department Sun Ultra 10 and Sun Ultra 30 computers.  
These computers have been specially networked so that you get the same 
environment, including home directory of your personal files, regardless 
of which Sun Ultra you log on to.  

If you had an account on our old Sun network, then it was probably ported 
to the Sun Ultra network.  If so, try to login to one of the Ultra's.  In 
any case, if you don't seem to have access to the Ultra's, then let me 
know right away, preferably by e-mail.  Give me your full name and the 
name of the class.  I'll see to it that an account is created for you, 
and I'll give you the account information at the next class meeting.

We'll have a special lab session to teach you what you need to know in 
order to use the Ultra's for class assignments.

The Ultra's are located in the new Computer Science Lab: P-288.  P-288 is 
in the Professional Schools Building, in the extreme northwest corner of 
the north wing.  

I will test the programs that you write for this course by compiling and 
executing them on a Sun Ultra.  Therefore you must write programs that 
will compile and run without errors on these machines.  If you are 
accustomed to a different computing environment, you will have to be 
careful about this.

Generally, the Ultra's are available for access and use on a 24-hour 
basis.  However the campus computer labs do not remain open at all hours.  
Therefore sometimes network and modem connections will be the only means 
available for connecting to the Ultra's.  For more information about 
network and modem connections, see the sections below entitled "MODEM 
CONNECTIONS" and "INTERNET CONNECTIONS".  Also see the document entitled 
"loginDirections".

P-288 will be open basically mid-morning until about 5:00 p.m..  During 
these times, you can be physically present in the CS Department Lab while 
using a department computer.  This can be very beneficial because you 
then have the opportunity to work and communicate with fellow students 
and members of the faculty.

Due to budgetary constraints beyond our control, the hours during which 
P-288 is open are subject to change on short notice.  Please check the 
postings of the lab hours that are included in the "message of the day" 
that is printed on your screen when you login to your Sun Ultra account.

Incidentally, the CS Department is looking for volunteers and work-study 
students to help keep the lab open longer hours.  For further 
information, ask our system administrator, Julie Gorman: P-288C,  667-
3273, julie@siggraph.csustan.edu.

While you are in the CS Lab, you will be able to access Sun Ultra 
workstations by logging in directly at the console, or by using telnet 
from some other kind of computer in the lab, such as a Macintosh or a 
"Wintel".

Telnet makes it possible for many people to use a given workstation 
simultaneously.  Let me know if you need a demonstration of how to get a 
telnet connection. (You can probably learn how just by asking someone in 
the lab.)  You can also access the Sun Ultra's via a telnet connection 
from most any computer on the campus local network, such as those in P-
106, P-120, L-125 and L-145.  Generally those labs are open during the 
same hours that the campus library is open.  Please check postings at the 
labs or ask lab personnel in order to get further information about lab 
hours.  Lab assistants (wearing red vests) should be able to show you how 
to telnet to a CS Department workstation.

MODEM CONNECTIONS:

Some phone numbers for making modem connections are: from Turlock 667-
3130, 667-3794 & 664-7072 (28.8K); toll-free from Modesto 523-2173; toll-
free from Merced 723-2810 & 723-2826; and toll-free from Stockton 467-
5399.  Check with the computer center's (OIT's) help desk to get the 
latest information.  The help desk is in L-150, and the telephone number 
is 667-3687.

INTERNET CONNECTIONS:

You may want to purchase Internet connectivity.  This is *not* a 
requirement and *not* necessary for success, but it can be a great time-
saver and a convenience once you have gotten past the hurdle of setting 
everything up.  There are several Internet access providers (ISP's) that 
service this area.  You can find many of them by entering the keywords 
"internet service providers ISP" in a WWW search engine.  

Also, you can find ads in the yellow pages and newspapers.

If you get an Internet connection, make sure you get "telnet" and "ftp" 
capability so that you can login remotely to your computer account at the 
college and also transfer files back and forth.  To be ready to do telnet 
and ftp, you may need to get some special add-on software from your ISP.

NETWORK AVAILABILITY OF COURSE MATERIALS:

Many course documents, assignments, supplements, and so on will be made 
available via gopher.  To access my gopher server, you can do the command 
"gopher ishi" from most any networked Unix computer on campus, or you can 
open the URL "gopher://ishi.csustan.edu" from any web browser on any 
computer connected to the campus network or Internet.  From there, just 
select "Classes" and then "CS2500_Programming_II" to get to the area 
containing the class information.

COURSE OBJECTIVES:

The main aim of this course is for you to acquire the knowledge, skills, 
and experience needed to solve programming problems correctly, 
efficiently, and on time.  It will not be easy, but you will do well if 
you are patient and persistent.

Some specific goals are to learn about simple data structures, common 
algorithms, analyzing the efficiency of algorithms, designing programs 
that are easy to check and maintain, the basics of testing and debugging, 
self-reliance, and dealing with the inherent uncertainties and 
complexities of today's computing systems.

Other aims of this course include learning to use advanced C++ features 
such as structures, classes, pointers, arrays, and files; learning to use 
Sun workstations effectively; and gaining facility with jove, a plain-
text editor that is useful for editing program source files.

COURSE COVERAGE:

Basically, we will be covering chapters 1-7 and 10 of "Walls and 
Mirrors".

If you are not yet familiar with Unix, I expect you to read Todino, 
Strang, and Peek in the first 2-3 weeks of the course.  Material from 
Todino, Strang, and Peek will be discussed as needed.

TESTS & GRADING:

The course has two main components: programs, and exams.

The program component consists of assignments to write 5 PROGRAMS.  I 
will require you to design each program using a top-down design 
methodology.  You will use the top-down method to design the data 
structures, documentation, and test data of your program, as well as the 
program instructions themselves.

A programmer using the top-down method develops the program level by 
level.  The programmer starts with a very simple first-level program 
design, and works down, step-by-step, to more detailed levels.  I will 
often require you to turn in two or three "levels" of your programming 
assignments so that I can check your progress in employing the top-down 
design method.

The exam component of this class consists of 3 QUIZZES, and AN *OPTIONAL* 
COMPREHENSIVE FINAL EXAM.  Each quiz and exam can cover topics from 
textbook, programming assignments, and lecture.

Ideally, you will do well on all the programs and quizzes, and your 
course grade will be determined by giving a weight of 10% TO EACH total 
PROGRAM SCORE, and 16.66% TO EACH QUIZ SCORE.  Under these ideal 
circumstances, you will not take the final exam and your quiz scores 
will, in total, account for 50% (3 times 16.66%) of your course grade.

THE OPTIONAL FINAL EXAM:

If you miss a quiz, or if for any reason you wish to improve your average 
on the exam component of the course, you may choose to take the final 
exam.  The final exam is penalty-free:  If your grade on the final exam 
is higher than your lowest quiz score, I will replace your lowest quiz 
score with your grade on the final exam.  If your grade on the final is 
equal to or lower than your lowest quiz score, then your grade on the 
final will not count.

EXCEPTION:

In order to receive a passing grade in this course, you must get a 
passing average in both the programming component and the exam component.  
Also, you must turn in a working solution to each of the programming 
problems.  Late assignments are not accepted, so solutions to programming 
problems have to be turned in by the (final) due date for the project in 
order to receive credit.

LATE ASSIGNMENTS:

Late assignments will not be accepted, however we can discuss due dates 
in class and I may be willing to move a due date back if doing so can be 
justified to my satisfaction.  If you are uncomfortable with a scheduled 
due date, please bring this to my attention as soon as possible, and not 
at the last minute.

If you are not finished with an assignment on a due date, please turn in 
what you *have* done.  (In this case, it may be possible to get up to 
about half credit, depending on the quality of the work and the 
circumstances.)

NOTE: Please bear in mind that you can fail this course just by missing 
some due dates.  If you get bogged down on some aspect of an assignment, 
come and get some help from me in office hours well before the assignment 
is due.  

SPECIAL PROBLEMS:

If you think you are going to be unable to take a test or turn in an 
assignment on time due to circumstances beyond your control, then let me 
know at the very earliest time possible.  I'll try to make some fair 
arrangement with you.

RESPONSIBILITY FOR YOUR OWN WORK:

I encourage you to discuss programming assignments with your classmates 
or whomever you wish.  It is very appropriate and worthwhile for students 
to get together to test their understanding of an assignment, to discuss 
advantages and disadvantages of alternative approaches to solving the 
problem, to talk over the pro's and con's of different ways of organizing 
the program, and to give each other pointers to helpful published 
materials.

You are welcome to use algorithms or segments of source code that you get 
from me, from text books, or from publications available in our library 
or through inter-library loan. (Don't expect all of it to work perfectly!  
You'll have to adapt and even debug some of it.)  Aside from the 
foregoing exceptions, you must be the sole author of all the source code 
that goes into the programs you turn in for this course.

During quizzes and exams, you are allowed to come forward and ask me to 
clarify the meaning of a test question.  It will be up to me to decide 
how to answer, or whether to answer at all. The members of the class will 
be told any new information that arises from such an exchange.  Aside 
from that, you must write quizzes and exams without the help of other 
people or the help of any reading materials.

If there is compelling evidence that programs or tests were not done 
according to the above criteria, credit will be withheld.

PARTICIPATION:

I hope to be accessible, helpful, and responsive to your needs during 
this course.  You can do well, and I want that. 

To optimize your likelihood of success, consider participating fully in 
the class:  Attend all classes.  Faithfully listen and take notes.  
Finish all assignments on time.  Review your notes before each class.  
Reply to questions or remarks addressed to you.  Ask questions.  When you 
are not getting anywhere on some problem, and it's not the kind of thing 
you can get resolved in class, seek my help during office hours.  

Do all this, even when things are not going well.  And have fun!