online
online, MWF 2-2:50pm,
and asynchronously
C or better, CSCI 216
Dr. Don Allison
online, Blackboard Collaborate
Ultra
436-3439
allisodl (at) oneonta.edu
MWF 5-7pm
Others by appointment
using Blackboard Collaborate Ultra or Microsoft Teams
Covers the
representation of complex information in computer memory. Considers such
structures as graphs, trees, stacks, strings, lists, and queues, with
implementation of algorithms using a contemporary programming language.
This course is a
programming-intensive course. It is intended
to expose you to all the basic data structures and many of the algorithms used
commonly in computer science. A
secondary aim is to give you lots of practice writing programs in C/C++ that
are more involved than the simple programs that you wrote in CSCI 116/216, when
you were mastering the syntax of the language.
There will be a programming assignment every couple of weeks. Each assignment will be to implement a major data
structure, and to write a program that uses that data structure to solve a
problem. Although there will be fewer
programs to write than in 116, each program will be larger and longer. (Expect that these programs will take several
hundred to a few thousand lines of code, as compared to a hundred or so for the
more complex 116 programs.)
The purpose of this
course is for students to develop fluency in the algorithms and data structures
that are the foundation of any reasonable sized computer program. At the end of the course, students should
have a good understanding of the basic data structures used in computer
science, the ability to implement any of the accompanying algorithms, and should
be able to explain the advantages, disadvantages, and computational complexity
of each.
A second objective of
the course is to develop your programming abilities further. To this point all the programs you have
written have been to illustrate specific concepts and principles, and have been
short enough to be contained in one file.
The programs we write in this course will be larger and more complex,
and often will span several files. We
will not only implement a particular data structure with all its supporting
functions, but will then use that data structure to solve a problem. By the end of this course you should be able
to write any program required of you in any of the advanced computer science
courses that you will take.
A Practical Introduction to Data Structures and Algorithm
Analysis,
by Shaffer, 2nd edition, published by Prentice Hall, ISBN
0-13-028446-7.
C++ Pocket Reference, by Loudon, published by O’Reilly,
ISBN-0-596-00496-6.
The first text will be
our reference for data structures and algorithms, and advanced topics in C++
programming. The second book is a quick
reference for the C++ language, the language that will be used for all
programming assignments for this course.
If you have already taken 116 and 216 in C++ then you will want to refer
to this book for some of the more advanced concepts we will be using. However, if all your previous programming has
been in Java, you will definitely want to read this book from cover to
cover! For the programming projects, we
will be using Microsoft Visual Studio 2019 under Windows 10, or GNU C++ under
Linux, for program development.
Programs
for this course can be developed on any platform that supports the C++
programming language. However, I will be
using (and will assume your assignments will work with) Windows 10 and
Microsoft Visual Studio 2019, both of which are for free to our students. You will need your own computer and the
Microsoft products if you want to replicate the teaching environment. If you need a copy
of Windows 10, it is free for students here. You can get the community edition of Visual
Studio for free from here. You can also get a copy of both Windows 10 and Visual
Studio 2019 through the MSDN Academic Alliance—email me for details, but be
warned that Visual Studio 2019 has gotten so large that the install won’t fit
on a DVD anymore! You’ll need a high
speed internet connection to install it.
Other options include using TextPad
(shareware) and the free Borland command line version of their C++ compiler
which you can download from their web site.
If you prefer a UNIX/Linux environment, G++ is probably the best C++
compiler currently available, and is available for free as well. You could also try Dev C++, Eclipse, Netbeans, OpenWatcom, or
Clang. Macs have gcc
and g++ available in the command line of the underlying BSD Unix.
Items of possible
interest found in our library:
· The Annotated C++ Reference Manual, Margaret Ellis,
QA76.73.C153 E35 1990
· C++ Primer, Lippman & Lajoie, QA76.73.C15 L57 1998
· The C++ Programming Language: Special Edition, Bjarne Stroustrup, Addison-Wesley, 3rd edition, ISBN
0201700735 (apparently culled?!?!?)
· Accelerated C++: Practical Programming by Example, Koenig & Moo,
Addison-Wesley Professional, 1st edition, ISBN 020170353X
· C++ Coding Standards: 101 Rules, Guidelines, and Best
Practices,
Sutter & Alexandrescu, Addison-Wesley
Professional, ISBN 0321113586
· The C++ Standard Library: A Tutorial and Reference, Nicolai Josuttis, Addison-Wesley Professional, 1st
edition, ISBN 0201379260 QA76.73.C153
J69 1999
· The Art of Computer Programming, Donald Knuth, 2nd
edition, QA76.6.K64v. (volume 1, Fundamental
Algorithms, volume 2, Seminumerical
Algorithms)
· The Art of Computer Programming, Volumes 1-3 Boxed Set, Donald Knuth,
Addison-Wesley Professional, 2nd edition, ISBN 0201485419
· Data Structures and Algorithms, Aho,
Hopcroft & Ullman, QA76.9.D35 A38 1983
· Expert C Programming: Deep C Secrets, Peter Van der Linden,
SunSoft Press, 1994 QA76.73.C15 V356
1994
(order of readings &
other assignments, by due dates, course activities, course content by expected
order of coverage, test dates and test coverage)
Dates |
Monday |
Tuesday |
Wednesday |
Thursday |
Friday |
Aug 24-Aug 28 |
Classes start Add-Drop begins Vesuvius Day |
National Banana Split Day |
National Dog Day |
Just Because Day |
Add-Drop ends Sunday Stuffed Green Bell Peppers Day |
Aug 31-Sep 4 |
National Eat Outside Day |
National Cherry Popover Day |
VJ Day |
Skyscraper Day |
Last day to add a full semester course College closes after last class Newspaper Carrier Day |
Sep 7-Sep 11 |
Labor Day National Salami Day |
Classes resume National Ampersand Day |
Teddy Bear Day |
Swap Ideas Day |
Make Your Bed Day |
Sep 14-Sep 18 |
National Cream Filled Donut Day |
Felt Hat Day |
National Play Doh Day |
Constitution Day |
Rosh Hashanah |
Sep 21-Sep 25 |
TAP Certification begins Miniature Goof Day |
Autumn Equinox |
Dogs in Politics Day |
National Cherries Jubilee Day |
National Comic Book Day |
Sep 28-Oct 2 |
Ask a Stupid Question Day Yom Kippur ends |
Confucius Day |
National Mud Pack Day |
International Coffee Day |
National Custodial Worker Day |
Oct 5-Oct 9 |
World Teacher’s Day |
Mad Hatter Day |
Bald and Free Day |
American Touch Tag Day |
Moldy Cheese Day |
Oct 12-Oct 16 |
Columbus Day |
Interim progress reports due International Skeptics Day |
National Dessert Day |
White Cane Safety Day |
Dictionary Day |
Oct 19-Oct 23 |
Evaluate Your Life Day |
Brandied Fruit Day |
Last day to drop International Nacho Day |
National Nut Day |
National Mole Day |
Oct 26-Oct 30 |
National Mincemeat Day |
Black Cat Day |
Plush Animal Lover’s Day |
Hermit Day |
Sunday, turn clocks back End Daylight Saving Time National Candy Corn Day |
Nov 2-Nov 6 |
Deviled Egg Day |
Cliché Day Election Day |
King Tut Day Sorting program due |
Guy Fawkes Day |
Saxophone Day |
Nov 9-Nov 13 |
Spring Pre-enrollment begins Chaos Never Dies Day |
Forget-Me-Not Day |
Veteran’s Day |
Chicken Soup for the Soul Day |
Friday the 13th |
Nov 16-Nov 20 |
National Fast Food Day |
Homemade Bread Day |
Occult Day Hashing program due |
Great American Smokeout |
College closes after last class Absurdity Day |
Nov 23-Nov 27 |
BREAK National Espresso Day |
BREAK All our Uncles are Monkeys Day |
BREAK Last day to withdraw National Parfait Day |
BREAK Thanksgiving |
BREAK Black Friday |
Nov 30-Dec 4 |
Classes resume remotely Cyber Monday |
Eat a Red Apple Day |
National Fritters Day |
National Roof over Your Head Day |
Santa’s List Day |
Dec 7-Dec 11 |
LAST DAY OF CLASSES Last day for Incompletes Pearl Harbor Day |
STUDY DAY National Brownie Day |
Exams Begin (8 MWF) 8-10:30am (11 MWF) 11am-1:30pm (2MWF) 2-4:30pm CSCI 203 Graphs program due Christmas Card Day |
(8:30 TR) 8-10:30am (11:30 TR) 11am-1:30pm (2:30 TR) 2-4:30pm Hanukkah begins |
(9 MWF) 8-10:30am (12 MWF) 11am – 1:30pm CSCI 100 (3 MWF) 2-4:30pm CSCI 243 National Noodle Ring Day |
Dec 14-Dec 18 |
(10 MWF) 8-10:30am (1 MWF) 11am-1:30pm CSCI 310 (4MW) 2-4:30pm CSCI 343 Roast Chestnuts Day |
(10 TR) 8-10:30am (1 TR) 11am-1:30pm (4 TR) 2-4:30pm Exams End National Lemon Cupcake Day |
National Chocolate Covered Anything Day |
National Maple Syrup Day |
Hanukkah ends |
https://suny.oneonta.edu/academics/college-calendar/spring-key-dates-deadlines
http://www.holidayinsights.com/moreholidays/
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. SUNY Oneonta Course Policies and Procedures
This course meets synchronously,
MWF 2-2:50. You are expected to be on
blackboard at those times, ready to participate. In addition, I will post lectures on
blackboard that you are to watch before the next class meeting. In general, you will watch lectures on the
material asynchronously, and then during the synchronous portion, I will answer
questions, we will discuss the topic more in depth, we will write code
illustrating the concepts, etc. The
asynchronous portion builds a foundation for your knowledge, while the synchronous
portion solidifies it and helps you apply it.
Both are important to doing well in the class!
Cheating or other
academic dishonesty hurts others as well as yourself and will not
be tolerated! You are expected to
personally produce everything you hand in for this class yourself. Plagiarism can get you in trouble in the
“real world”, and it will get you in trouble in this
class. It is okay to ask your neighbor
or a friend how to do something for one of the projects (at the algorithm
level), but you should actually write the code yourself when creating anything
you are turning in. It is not
okay to ask your neighbor or friend how to do something during any of the
exams! It is also not okay to directly copy
your neighbor’s or friend’s code! You
should also be able to answer any question I have about how every one of your
programs works.
Since this is an upper division
course, it is expected that your programs will follow good programming style
conventions. 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 203 Data Structures Fall 2020
// Program #2: Stacks and Queues
// Author: Joe Student
// Date Due: September 16, 2020
// This program uses stacks and queues
// to implement data structures
// for an operating system.
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.
You should print out
all your code as PDF files, along with sample output appended as comments to
the end of the file that contains the main function, and turn that in to me
using Blackboard.
Any time you need to
communicate with me about the course via email, you MUST put “CSCI 203” in the
subject line. Otherwise it will get lost
and I won’t see it.
There will be two
midterm exams and a final exam experience.
The midterms will each count 15% toward your final grade, while the
final exam experience will count 20%.
The projects are an
integral part of the course, since this is where much of the learning will take
place. They are to be done individually,
and turned in as described above. There will
tentatively be 7 projects, including the getting started project. In addition, I might assign homework
exercises from the text. The homework
exercises, if any, will be combined and their total will count as another
programming project.
Evaluation |
Weight |
Tentative Date |
Midterm
Exam #1 |
15% |
23
September |
Midterm
Exam #2 |
15% |
28
October |
Final
Exam Experience |
20% |
9
December, 2pm |
Projects |
50% |
See
schedule above |
Total |
100% |
|
Assignments are due at
the beginning of class on the day shown on the schedule above. Late projects will not be accepted without a
really good reason. Any adjustments to
project due dates will be announced in class and posted on the web version of
the syllabus. Assignments turned in late
will be penalized 50% for the first week after the due date, and not accepted
after that. (You should be working on
the next project by then instead of trying to finish the previous one—otherwise
you will ALWAYS be late with your assignments!) You should plan to complete your tests on the
day and time when scheduled. Any makeups
will be allowed only for legitimate, school-approved excuses, and should be
arranged with the instructor as soon as possible after you discover you can’t
take the exam at the scheduled time (before the exam is given whenever
possible). In any case, all work must be
completed by the last class, including any makeup exams. Exams missed for unexcused absences, or exams
not made up by the last day of classes will be recorded as a zero grade.
For students wishing to
explore further or to find answers to questions not covered in the text, there
are many books and web sites on what is traditionally called the CS2
course. If you have any particular areas
you would be interested in for further reading and study, please ask me and I
can recommend a range of books for you to consider. For further readings in
the area of C++ or data structures, some of the classics are listed above.
Unlike more traditional
memorize and regurgitate courses, this course has a strong hands-on learning,
or learning by doing component, represented by the projects. This enhances retention, reinforces
understanding, and ensures that the student masters the material well enough to
be able to use it in other projects.
Students more comfortable with a traditional classroom approach might want
to switch to another section.
Since I
don’t know where you are living, it is up to you to know the evacuation
procedures for your dorm or residence.
If you are on campus, the procedures are described here: http://www.oneonta.edu/security/documents/EmergencyEvacuationProcedures.pdf.
Students Diagnosed with
a Disability—All individuals who are diagnosed with a disability are protected
under the Americans with Disabilities Act, and Section 504 of the
Rehabilitation Act of 1973. As such, you may be entitled to certain
accommodations within this class. If you are diagnosed with a disability, please
make an appointment to meet with Accessibility Resources, 133 Milne Library,
ext. 2137. All students with the necessary supporting documentation will be
provided appropriate accommodations as determined by the Accessibility
Resources Office. It is your responsibility to contact Accessibility Resources
and concurrently supply me with your accommodation plan, which will inform me
exactly what accommodations you are entitled to. You will only receive
accommodations once you provide me with an Accessibility Resources
accommodation plan. Any previously recorded grades will not be changed.
Addendum
added by the provost
Campus Resources
Academic
Department Information
· Department Phone
Number: (607) 436-3708
· Department Email
Address:
· Department Location:
274 Fitzelle
·
Accessibility
Resource Center
·
Office
of Equity and Inclusion
Course Policies
See the SUNY
Oneonta Course Policies and Procedures web page.
Campus “Actions for Safety” Requirements and Guidance
See the Actions
for Safety campus web site.
I am trying a couple of
new things this semester since the class is online. If they work, I will continue them throughout
the semester…if they aren’t working, I will switch to something else, but I
will let you know if things change, and I will seek your feedback before making
changes.
Flipped
Classroom:
This semester I’m going
to try something called a flipped classroom.
Instead of lecturing during class time and having you do homework
outside of class, I’m going to post lectures as videos for you to watch outside
of class, and then in class, we will discuss the material in the lectures,
answer questions about it, ask questions about it, write programs, go over
assignments, etc. For this to work, you
are going to have to watch the videos before class, so that you are familiar
with the material and can discuss it.
Hopefully, this will make the classes more interactive, and also help
you understand and retain the material better as you are exposed to it twice,
and also work with it in class.
Extra
Credit:
To encourage
participation and your keeping up with the material, I will be asking questions
during the synchronous part of the class.
I will call on specific people for the answers, until I get the answer
or give up. If you answer the question
correctly, I will record a ‘+’ by your name; if you answer the question
incorrectly, I will record a ‘-‘ by your name; and if you don’t answer at all (eg you aren’t online), I will record as ‘X’ by your
name. At the end of the semester, I will
count the number of ‘+’s and subtract the number of ‘X’s. Minuses don’t count because you at least
attempted the question, even if you got it wrong. If the total score is positive, I will scale it
to be between 0 and 5, and that will be the number of points added to your final
grade.