Syllabus

Computer Science 221 - 03

Programming in C++ - Data Structures

Fall Semester 2019



Instructor: Dr. Rick Coleman, former Senior Software Engineer, SAIC Inc. Now retired.
E-mail: rcoleman@cs.uah.edu
CS 221 Web Page: http://www.cs.uah.edu/~rcoleman
Office: N345, Technology Hall
Office Hours: By appointment

Course Catalog Description:

Continuation of CS 121 with emphasis on advanced features of the C++ programming language, including pointers, recursion, classes, inheritance, and polymorphism. Introduction to fundamental data structures including linked lists, stacks, queues, and binary search trees. Basic sorting and searching algorithms. Practical experience in the design, development, and documentation of significant object-oriented programs. Prerequisites: CS 121, MA 113 (Precalculus Trigonometry). Co-requisite: MA 171 (Calculus A).

Textbook (Recommended but not required):
  • C++ Plus Data Structures, 4th ed., Dale, Nell and Teague David,. Jones and Bartlet Publishers, 2003. (This text is optional and not required because of its expense. If you would like to have a copy for reference in your own library any previous edition would be good, and definitely a lot cheaper.)

Course Objectives:

      When you have completed this course you should:
  • Have an understanding of advanced programming using the C++ language including pointers, data structures, and classes.
  • Be familiar with the principles of Software Engineering including algorithm analysis, software design, and documentation with an emphasis on the importance of software testing.
  • Have an understanding of the fundamental principles of algorithm development and program design, development, and testing with a brief introduction to the Unified Modeling Language (UML).
  • Have an understanding of the abstract data types (ADTs): queues, stacks, linked lists, binary trees, and graphs.
  • Have experience in the implementation of abstract data types in C++ programming assignments.
  • Have the ability to apply knowledge of computing and mathematics appropriate for practical experience in the above topics by means of independent programming assignments.

Programming Assignments:
  • There will be 4 programming assignments each designed to provide experience in the topics being covered in class. Details of these assignments will be posted on the web site and discussed in class.
  • You will be required to turn in a report known as a Sprint Report on each programming assignment. Standard forms for this report will be provided when each assignment is posted.
  • Electronic copies of the source code (.cpp and .h files) must be submitted via e-mail by the designated date. Do not turn in any project files with the following extensions .sln, .dsp, .dsw, .ncb, .opt, .plg, .obj, .ilk, .pch, .pdb, .idb, .vcproj, .user, or .exe. Do not turn in a source file containing a main() function. The instructor will compile and run your source code using a special test driver containg a main() function. Source code that will not compile will receive no credit.
  • All programming assignments should be handed in on time, as specified in the course schedule.
  • Each programming assignment is worth 25 points for a total of 100 points (the equivalent of one test).
  • A grace period beyond the due date for each programming assignment has been posted in the course schedule (in the on-line syllabus). Programming assignments may be turned in without penalty up to midnight of that date. Programming assignments will NOT be accepted after that date. No Exceptions.

Final Grade:
Tests(3) 100 pts each 300
Programming assignments(4) 25 pts each 100
Final Exam 200 pts 200
  TOTAL 600
Note on WX grade:
The administration of UAH has established a grade of WX or faculty initiated student withdrawal. Basically, this allows the instructor to withdraw a student from class without any request from the student. It's primary purpose is to allow a faculty member to remove a student from class who is not attending class or putting forth any effort to complete the class work. This grade will not be used to avoid a grade of F for the course.


UAlert Emergency Notification System:
UAHuntsville has implemented the UAlert emergency notification system. UAlert allows you to receive time-sensitive emergency messages in the form of e-mail, voice mail, and text messages.

Everyone who has a UAHuntsville e-mail address will receive emergency alerts to their campus e-mail address. In order to also receive text and voice message alerts, you are asked to provide up-to-date phone contact information. Participation in UAlert text and voice messaging is optional, but enrollment is strongly encouraged. You can’t be reached through UAlert unless you participate. The information you supply is considered confidential and will not be shared or used for purposes other than emergency notification.

To review your UAlert account, add or update phone and alternate e-mail addresses, and set the priority for your contact methods, please visit the UAlert web site: http://ualert.uah.edu.




Topical Outline and Reading Assignments
This Schedule is Subject to Change
  Date* Topic Assignment Due**
1 Wednesday
August 21
Course Introduction
   Course overview and requirements.
   CS 221 web page.
Chapter 1 and supplemental
material from instructor.
 
2 Monday
August 26
Back to Basics
   Review of basic C/C++ programming
   Using Visual Studio C++
Chapter 2 and supplemental
material from instructor
 
3 Wednesday
August 28
Software Engineering
   Classical steps in Software Engineering
   The Software Life Cycle
   The Agile approach to SW development
   The Capability Maturity Model Integrated

Supplemental material
from instructor
 
-- Monday
September 2
Labor Day - No class - University Holiday  
 
4 Wednesday
September 4
C++ Foundation for all ADTs
   Pointers
Supplemental material
from instructor
 
5 Monday
September 9
Programming assignments following Scrum

C++ Foundation for all ADTs
   Data Structures and Classes

Begin Prog1, Sprint 1
Programming assignment 1 posted
Chapters 2, 3.3 & supplemental
material from instructor.
 
6 Wednesday
September 11
C++ Foundation for all ADTs
   Finish Data Structures and Classes

Hints on implementing and testing
     programming assignment 1


Unified Modeling Language (UML)
   Development of UML
   Symbols of UML
   Using UML to diagram program design
   
7 Monday
September 16
Software Testing
   Approaches to testing
   Types of testing
   Debugging with the VS Debugger

End Prog1, Sprint 1
Begin Prog1, Sprint 2
Chapter 2 & supplemental
material from instructor.
 
8 Wednesday
September 18
Abstract Data Types as Collections
   Introduction to Abstract Data Types
   Strings: a first ADT
   Introduction to STL: Vectors as Arrays

Chapter 2 & supplemental
material from instructor.
 
9 Monday
September 23
Collaborative learning activity
Review for first exam


End Prog1, Sprint 2
  Prog. 1 Code and
Sprint Report
10 Wednesday
September 25
First Exam
   
11 Monday
September 30
Discussion of first exam results

Introduction to Linked Data Structures

Linked Lists
   ADT: Lists--Sorted and Unsorted

Begin Prog2, Sprint 1
Programming assignment 2 posted
Chapters 3, 4 and supplemental
material from instructor.
DDD1 Program 1
12 Wednesday
October 2
Instructor's demonstration of programming
assignment 1 and how it was tested.


Speciality Lists    Stacks and Queues
   Lists in the STL:
      list, deque, stack, queue, priority_queue

Hints on implementing and testing
     programming assignment 2

Chapters 5, 6 and
supplemental material from instructor
 
13 Monday
October 7
Binary Trees
   Introduction to Trees
   Binary Search Trees
   Searching a binary tree
   Inserting into a binary tree
   Hold on to your source code!!!
   Deleting from a binary tree
   Traversing a binary tree

End Prog2, Sprint 1
Begin Prog2, Sprint 2
Begin Prog3, Sprint 1
Programming assignment 3 posted
Chapters 8, 9.2 and
supplemental material from instructor
 
14 Wednesday
October 9
Other types of trees
   AVL trees, Heaps, 2-3 trees, b-trees, tries

Hints on implementing and testing
     programming assignment 3


   
15 Monday
October 14
Collaborative learning activity
Review for second exam


End Prog2, Sprint 2
  Prog. 2 Code and
Sprint Report
16 Wednesday
October 16
Second Exam

   
17 Monday
October 21
Discussion of results of second exam

Analysis of Algorithms
   The yard stick for measuring
      program efficiency.

Recursion
   Programming with Recursion
   Classic examples of Recursion


End Prog3, Sprint 1
Begin Prog3, Sprint 2

Chapter 2.6 and supplemental
material from instructor.


Chapter 7 and supplemental
material from instructor.
DDD1 Program 2
 
18 Wednesday
October 23
Instructor's demonstration of programming
assignment 2 and how it was tested.


Sets
   Set Basics
   Implementing Sets
   Sets in the STL
Hash Tables
   Hash Table Basics
   Collision Resolution
   Hash Functions

Chapter 9.4 and supplemental
material from instructor.


Chapter 10.3 and supplemental
material from instructor.
 
19 Monday
October 28
Graphs
   Graph Basics
   Implementing Graphs
   Graph Algorithms

Begin Prog 4, Sprint 1
Programming Assignment 4 posted

Chapter 9.3 and supplemental
material from instructor.
 
20 Wednesday
October 30
Collaborative learning activity
Review for third exam


End Prog3, Sprint 2
  Program 3 Code and
Sprint Report
21 Monday
November 4
Third Exam
   
22 Wednesday
November 6
Discussion of results of third exam

Hints on implementing and testing
   programming assignment 4

Sorting Algorithms
   Bubble Sort
   Insertion Sort
   Tree Sort
   Selection Sort
   Heap Sort
   Quick Sort
   Merge Sort


End Prog4, Sprint 1
Begin Prog4, Sprint 2
Chapter 10.1 & 10.4 and supplemental
material from instructor.
DDD Program 3
23 Monday
November 11
Instructor's demonstration of programming
   assignment 3 and how it was tested.


Sorting Algorithms
   Shell Sort
   Proxmap Sort
   Radix Sort

Chapter 10.1 & 10.4 and supplemental
material from instructor.
 
24 Wednesday
November 13
Topics in Advanced C++ Programming
   Function overloading
   Namespaces
   Building your own Templates
   C++ Standard Library

End Prog 4, Sprint 2
Chapter 10.1 & 10.4 and supplemental
material from instructor.
Program 4 Code and
Sprint Report
25 Monday
November 18
Topics in Advanced C++ Programming
   Handling exceptions
   Run time type identification
   Threading
Supplemental material from
the instructor.
 
26 Wednesday
November 20
Topics in Advanced C++ Programming
   C/C++: Header files
   C/C++: The C Preprocessor
Supplemental material
from instructor
DDD Program 4
27 Monday
November 25
Instructor's demonstration of programming
   assignment 4 and how it was tested.


Catch Up
   If we have fallen behind in the schedule
   this day is here to catch up. If we are on
   track or ahead of schedule other interesting
   topics will be covered but not included on
   the final exam.
Supplemental material
from instructor
 
-- Wednesday
November 27
No Class - Thanksgiving Holiday
   
28 Monday
December 2
Last Day of Class
   "It's fun to be a computer Geek!"
Supplemental material
from instructor
 
  Wednesday, December 11
6:30 - 9:00 p.m.
Final Exam
Final exam will be comprehensive  
* The dates on this topical outline are approximate and subject to change and probably already have if you are reading this.

** Any time programming assignment or document due dates fall on the date of an examination, these may be turned in at the next class period without penalty.

1DDD = Drop Dead Date, i.e. last day to turn in programming assignment. A programming assignment will NOT be accepted after its' DDD expires. No assignments will be accepted after the DDD except under extenuating circumstances and then, only if you have checked with the instructor beforehand.
Note: "My hard drive crashed", "I lost my thumb drive and all my source code", "I had to reformat my hard drive", etc. will NOT be considered extenuating circumstances.

OFFICIAL UAH COMPUTER SCIENCE DEPARTMENT POLICIES AND PROCEDURES
  1. Responsibilities of the teacher
    1. Provide a detailed syllabus. This syllabus should list office hours, course objectives, textbooks, references, prerequisites, and grading policy/method of assessment.
    2. Come to class prepared, on time, and make full use of the class time.
    3. Provide timely and adequate feedback on grades. Return graded material promptly.
    4. Conduct final exam at the time designated in the class schedule.
    5. Not assign new work (i.e. not listed on syllabus) that is due in last two weeks of classes.
    6. Avoid leaving the examination room without a proctor. Provide paper for exams.
    7. Make reasonable use of the assigned textbook.
    8. Check students have proper prerequisites. Instructor does not waive assigned prerequisites.
    9. Report all incidences of academic misconduct (cheating) to the Department Head and Vice President for Student Affairs.

  2. Responsibilities of the student (see also, Student Handbook Article II)
    1. Come to class with the proper prerequisites, well prepared, on time, and make full use of the class time.
    2. Provide adequate notice of anticipated absences and take full responsibility for finding out about missed work, announcements, and assignments.
    3. Submit assessment material on time and submit only your own work (see Integrity).
    4. Do not allow other students to copy your work.
    5. Read and understand the syllabus and follow announced policies.

  3. Integrity
    We expect CS instructors and students to conduct themselves in a professional manner. Students are subject to all the provisions in the UAH Code of Student Conduct, which is available free from the Office of Admissions and Records. Information on plagiarism and other forms of misconduct is presented in the Student Handbook Article III. Departments are obliged to report all student misconduct to the Office of Student Affairs.

  4. Complaint Procedure
    If you have difficulties or complaints related to this course, your first action should be to discuss them with your instructor. If such a discussion would be uncomfortable for you or fails to resolve your difficulties, you should ask for a meeting with the Chair of the Computer Science Department in Technology Hall N-300, info@cs.uah.edu, telephone 256-824-6088. If you still are unsatisfied, you should discuss the matter with Dr. Emanuel Waddell, Associate Dean of the College of Science.  The Associate Dean's office is MSB C207, telephone number 256-824-6844 and email address adeancos@uah.edu..

  5. Students with disabilities
    Your instructor would like to hear from anyone who has a disability that may require a modification of seating, testing, or other class procedures. Please see instructor after class or during office hours to discuss appropriate modifications. You should also contact Student Disability Services in in WH 317 (Ph. 824-1997) or online at http://www.uah.edu/health-and-wellness/disability-support/requesting-services for further assistance.

  6. Student computer account
    Students enrolled in any CS course are entitled to an account on the departmental computer network. Use of such an account is subject to departmental and university policies. To apply for an account, and see the current policies, go to the departmental web site at http://www.cs.uah.edu/account/

  7. Examination policy
    In response to past student complaints about problems during examinations, the Computer Science Department has developed the following guidelines for in-class examinations in all courses.
    1. Come to the exam prepared to complete it without a break. If you think you will need a break, please inform the proctor before the exam if possible.
    2. Do not communicate with other students. Talk only to the instructor.
    3. Whenever you leave the exam room turn in your exam.
    4. Use only the paper provided by the instructor for all writing.
    5. If assigned a specific seat, remain in that seat.
    6. Unless specifically permitted by the instructor, use no books or other reference materials. Do not bring calculators, computers, pocket-organizers, cell phones, pagers, or other electronic devices to the exam.