Announcements/updates are on the schedule page.
Schedule
Text
References
Grading
H
Attendance
Computer Accounts
Programming Assignments
Academic Integrity
HOMEWORK
Contact
the instructor
Links
Horowitz, Sahni and
Rajasekaran, Computer Algorithms in
C++, Computer Science Press, 1997 (**)
Horowitz, Sahni &
Mehta, Fundamentals of Data
Structures In C++, Computer
Science Press, 1995 (DD)
Sedgewick, Algorithms
in C++, Addison-Wesley, 1995 (**) (3rd
edition Parts 1-4, 1998, and Part 5 , 2002)
Carrano & Prichard, Data Abstraction and
Problem Solving
with C++: Walls
and Mirrors, Prentice-Hall
Langsam, Tenenbaum &
Augenstein, Data Structures Using C and C++, 2nd Ed., Prentice
Hall
Standish, Data Structures in JAVA,
Addison-Wesley
Weiss,
Data Structures and Problem Solving
Using Java, Addison-Wesley, 1998 (DD)
S. Epp, Discrete Mathematics and Applications
Johnsonbaugh, Discrete Mathematics,
Prentice
Hall (**)
Ross
& Wright, Discrete Mathematics,
Prentice Hall
(**) On
reserve
(DD) included on Dr. Dobb's CD
Attendance Policies: If you miss class, it is your responsibility to determine what material you missed or what announcements were made. Attendance will be taken. You are always welcome to call me if you have a question or a problem arises. There will be no make-ups on the tests except in unusual circumstances. Assignments not turned in at class may be mailed to my home address or turned into the reception desk at the Dorsey Center or Mailed to the Dorsey address. Mailed assignments will be credited as having been turned in as of the Postmarked date. Please use adequate postage. Please do not use a method that requires a signature for delivery. Do not submit programming assignments by email, except by special arrangement.
JHU/WSE/EPP Student Services Center
6810 Deerpath Road, Suite 100
Elkridge, MD 21075
The best times to contact me is during business hours at 410-540-2979. During evening and weekend hours, please feel free to call my home number, given out the first night of class.
Logon to the system as newuser and answer the questions. It is possible to reactivate an existing account. Be ready to write down your userid and password. All students are required to obtain an account, even if you plan to use another system. All students are encouraged to go to the computer Lab to obtain handouts on using the student system. Check the posted schedules to see when Lab Instructors are on duty. Additional information is available on http://www.apl.jhu.edu.
Important:
Send your userid on the student
system to the instructor so you can be added to the class mailing list
(just
the account id on aplcenmp). We will
be
using email for announcements, clarifications, etc.
YOU
ARE RESPONSIBLE FOR ANNOUNCEMENTS MADE VIA EMAIL. If
you prefer to receive mail at a
different account you should forward your mail from your aplcenmp
account. Receipt of your userid by the
instructor
before the second class is good for 5 bonus points on your homework.
Project
One Handout (PDF)
EXAMPLE
Project Two Handout (PDF)
All programming
assignments will consist of JAVA or C++ programs coded and executed by
the
student. Assignments received after class on the specified due date
are
considered late and the grade will be reduced by 5 points. The
grade will
be reduced by an additional 5 points for each subsequent
Your code must
incorporate a consistent, well documented style. Close attention will
be given
during grading to the comments. They should be clear, concise and
adequate. The
use of descriptive blocks for each module as well as an introductory
descriptive block for the entire program IS REQUIRED.
Comments should
explain the purpose of a function, its inputs, and outputs. They should
also
explain the algorithm being applied, a particular approach to a
problem, or
restrictions in using the module. Comments like stating that something
is being
printed are not worthwhile.
Write
one
driver that executes your entire code.
Consistent,
well delineated use of both upper and lower case is encouraged.
Use
of
indentation to show nesting of control statements is encouraged. Set tabs to only 2-3 spaces.
Keep lines to
about 78 columns so that when code is printed it doesn't wrap around.
Avoid
confusing programming "tricks"
Keep code
modular. One page is a good rough guide to module size.
Comments
should describe the function performed and explain idiosyncrasies, not
restate
the code in English. Use white space
liberally.
Do
not use
GOTOs.
If you are looking
for a Java style guide, consider The Elements of Java Style, by
Vermeulen, Ambler, et al., published by the Cambridge University Press
as part
of the SIGS Reference Library
A
Complete Programming
Assignment
A complete lab
assignment consists of the following (in this order) placed in a labeled,
pocket folder:
A cover sheet
with your name, JHU ID number, Lab number, due date and date turned in.
A written, analytical
commentary. The commentary
should include comments about what you learned, what you might do
differently
next time, justification of your design decision, issues of efficiency.
etc.
The handout for a specific assignment will usually indicate some more
specific requirements.
It is not necessary to reiterate the requirements of the assignment.
This
commentary will constitute a significant portion of your grade for each
lab
assignment. Please give this some thought. As a guideline, this should
be 2-3
pages or longer.
The source
code. A listing of the source file/s is usually fine. It is important
to
include a copy of all your files (any included file) except standard
libraries.
You are expected to write your own code except as provided in a
specific
assignment. Do NOT download code from the internet or other sources to
be part
of your assignment. Use of standard libraries is permitted.
Copies of all
your input data sets: this should be included although your output
echoes the
input. In most cases, the handouts will
specify some required input, but you are expected to generate
additional input
sets to properly exercise your code. It
is your responsibility to show that your code does all the things it is
supposed to do and that all reasonable error cases are handled. You will be penalized for insufficient input.
Copies of your
output, annotated as needed for clarity.
The grade for each
lab assignment is broken down as follows:
50% -
Correctness - In problem solution and results
10% -
Style/Proper Coding - Following a reasonable, consistent style with
STRONG
documentation, with appropriate use of structures, modularity, error
checking,
etc.
10% -
Input/Output - Labeled, formatted, correct use of prompts, correctly
handles
specified inputs and outputs as well as additional cases, is user
friendly.
20% -
Commentary - See above
10% -
Enhancements - Recognition of superior work on one of the required
aspects of
the assignments or work above and beyond the requirements.
If you do something extra, please make sure
it is reflected in the I/O set so you get proper credit.
I can’t give you credit for something unless
I am aware of it.
This grading policy
is a reflection of the expectation that you can already write minimal,
working
code. If the unexpected comes up, please let me know. I will be happy
to
discuss your grade with you anytime.
Reread this before
turning in lab.
Reread the handout of
the assignment before turning in the
assignment.
Exercise the features
of your code with an extensive I/O
set.
Turn in a hard copy of
your source code.
Do NOT turn in an
assignment that does not compile.
Use a pocket folder to
turn in your programming assignments.
Homework Problem List
It is important to
attempt all the homework problems, even if you are not able to complete
them
all, it will still be beneficial and will help you to participate in
the class
discussion. Late homework will not
be
accepted except by prior arrangement with the instructor.
In writing up your homework, please keep in
mind the following:
The burden of communication is on you. If I do not understand what you mean then I cannot give you proper credit. This means that you should include explanations of your thought process within reason, draw diagrams where appropriate, make it easy for me to follow what you are doing and clearly identify your intended answer.
Use proper
grammar and spelling. Type your
responses as much as possible.
Algorithms
should be written in structured English or pseudo-code, not in Java or
C++. Make sure appropriate detail is
included.
Well thought
out, efficient, correct answers are generally worth more points than
correct
answers which are mundane and less efficient. Both
of these are worth more points than correct, efficient
answers
generated by a literature search. The
value is in working through the problem yourself.
Do not try to sit down on
Sunday night and do all the homework that is due that week. You need to
have time to think about
them.
Suggested
Ideal Strategy for Approaching Homework and Class Preparation
Wednesday – Go to class – Take copious
notes.
Thursday – Review lecture material and read next section of book
Friday or Saturday – Make an initial pass over homework – get the easy ones out of the way. Start
thinking about the harder ones, make a list of questions to ask study partner or in class.
Sunday – Attack the harder
problems – update list of questions
Monday - Revisit hard problems.
Tuesday – Tie
up loose ends for Wednesday.
A hypercube algorithm for the 0/1 knapsack problem
Sorting with
O(nlogn) comparisons and O(n) transports, in-place, in the worst case,
simultaneously. (a paper by V. Geffert)
An
In-Place Sorting with O(n log n) Comparisons and O(n) Moves (
appearing in the Journal of the ACM, Vol. 52, Number 4, July 2005, pp.
515-537)
A free site for downloading Ghostscript and Ghostview (for postscript files)