CSC-1720 Advanced Programming with Data Structures
Spring 2021

Instructor:

Roger Shore

Class Schedule:

Office Location:

Couch Hall 150

MWF 7:50-9:00AM CSC-1720

Telephone:

841-9031

MW 12:05-1:45PM CSC-2410

Office Hours:

MTWF 10:00-11:00AM

TTH 1:35-3:15PM CSC-4210


T 7:50-9:30AM CSC-1720 Lab


TH 3:30-5:10AM CSC-2410 Lab

E-Mail: rshore@highpoint.edu

Web site: linus.highpoint.edu/~rshore

Course Description: This is a continuation of CSC 1710 covering more advanced fundamentals of programming including problem-solving strategies, the concept of an algorithm and basic data structures. Various programming concepts will be introduced such as recursion, string processing, records, sorting, searching, linked lists, trees and object oriented programming.

Prerequisites: CSC-1710

Course Materials:

  1. D.S. Malik, C++ Programming - Program Design Including Data Structures, Eight Ed., Cengage Learning - 2017 ISBN 978-1-337-11756-2

  2. Optional: Aho, Alfred and Ullman, Jeffrey, Foundations of Computer Science - C edition, Computer Science Press. Resource found at here at author's web site.

  3. Time and patience.

  4. An account to access the department equipment. FYI - I will develop, implement, and test all C++ programs for this class on an alienware machine running Ubuntu 20. This means I will be grading all work from that perspective. The C++ in this course will be generic. Programs written in this class should work on any machine with any C++ compiler.

Course Objectives: After successfully completing this course, the student will

  1. Describe and apply formal problem solving techniques which involves a functional decomposition to break the problem into simpler tasks.

  2. Discuss the importance of algorithms in problem solving.

  3. Design, implement, test, and debug a program that utilizes the following data structures: arrays, strings, link lists, stacks, queues, heaps, and binary trees.

  4. Describe the concept of recursion and use the concept to implement a divide-and-conquer approach to solve a problem.

  5. Compare iterative and recursive solutions for elementary problems such as factorial.

  6. Design, implement, test, and debug simple programs in an object-oriented language.

  7. Explain the difference between event-driven programming and command-line programming.

Class and Lab Preparation: It is assumed that you will read the assigned material. The lectures will be used mainly to further demonstrate the C++ language and to answer specific questions. The instructor will give an unannounced quiz if he feels the class, as a whole, has not read the assigned textbook material or keeping up with the material presented during class time.

Labs and Programming Assignments: In addition to the major tests and exam, students will participate in a series of labs and programming assignments to further develop their logic problem solving skills. Assuming the students is prepared, the approximately 2 hour weekly lab will focus on a few concepts from lectures and is designed to be completed with the allotted time. Programming assignments are more challenging and require more time outside of class. Each lab and programming assignment requires the student to analyze a problem and decompose it into simpler tasks. At that point, the student will implement, test, and debug a program that solves the problem. Each lab/program will have a value of 20 pts divided between three parts based on the following criteria.

  1. STYLE 30%

    1. Indenting and layout. Is the program readable? Does indenting help debugging and reading? Are parts of the program clearly labeled?

    2. Identifiers. Are the identifiers meaningful and mnemonic? Do they describe their purpose?

    3. Documentation/Comments. Is the program reasonably commented? Does the commenting help both the programmer and the grader? Could another student in the class figure the program out? Are there any extraneous comments that may include debugging code that should have been removed?

    4. Attractive output?

  2. PROGRAM 70%

    1. Algorithm. Is the program sensible? Does it solve the problem in a reasonable manner?

    2. Modularity. Does the program take advantage of subroutines and functions/methods? Are its separate parts easy to isolate for testing and debugging?

    3. Working. Does the program work? Does it fulfill the problem description, or does it solve some other problem? Is it written in a way that it lets shortcomings be recognized and fixed?

    4. Use of required commands?

  3. Late Penalty:

    1. Lab reports should be submitted at the end of the lab. If not, the latest it may be submitted is during class on Friday following the lab and will be assessed a late penalty.

    2. Programming assignments will have due dates. You will automatically get an extension of 7 days if you miss the due date. The penalty will be 1 point per day late. No program will be accepted after 7 days of the assigned due date. Please note, a correct program is only worth 13 pts if submitted 7 days late.

    3. Any two labs (or programs) submitted by different persons but obviously written by the same individual will both receive zeros unless the lab/assignment allows for collaboration.

Course Policy:

  1. Attendance: High Point University recognizes and honors the value of the face-to-face classroom experience for enhancing student engagement and academic outcomes. Attendance will be taken daily at the beginning of class. As such, you are expected to be present in every class meeting with the exception of an illness that requires quarantine or other reasons pre-approved by the instructor. In those cases online accommodations will be provided. If absent from class, you are responsible for all lectures, in-class exercises, assignments, and handouts. Caution: Being absent from class does not change the due date of assignments. Before a student is dropped for non-attendance, I will give a notification as a warning to a student that he/she is in danger of violating the attendance requirements.

  1. Grades: Your final grade will be determined as follows:

Component

Quizzes

Labs/Programming

Assignments

3 major Tests

Cumulative Final Exam

Total

Weight

10%

30%

45%

15%

100%

Range

93-100

90-93

87-90

83-87

80-83

77-80

73-77

70-73

67-70

63-67

60-63

0-60

Grade

A

A-

B+

B

B-

C+

C

C-

D+

D

D-

F

You must score at least the minimum of a category to be given the associated grade, i.e. an average of 80 is a B- not a C+.

  1. Major tests and Final Exam: All tests and final exam will consist primarily of problem solving type questions that test your ability to write as well as interpret C++ code. This includes writing and tracing C++ code. No make up test will be given unless prior arrangements have been made with excusable reasons. If you miss a test your final grade will be used in place of the missed grade. Similarly, if all tests are taken during the semester, the lowest test score will be replaced with the exam score. In both cases, this means the percentage of the final exam will increase. If you miss the final exam, you will receive an F for the course.

  2. Quizzes/worksheets and assignments: Assignments, quizzes, and class worksheets will assist you in the understanding of the material presented during class. These will appear in almost every class meeting during the semester. Quizzes completed during class cannot be made up therefore the lowest two grades will be dropped to allow for an occasional absence. Exercises from the end of each chapter will be assigned and provide excellent sample questions for major tests.

  3. Programming assignments: Each programming assignment will have a due date. With that in mind, please remember that a working program takes time to develop so you must start on each assignment immediately. Any assignment not received by the due date will be charged a late penalty as noted above.

  4. Honor Code: All students are expected to follow the University Honor Code, Full details of the High Point University Honor Code are found here: http://www.highpoint.edu/studentconduct/university-honor-code All academic work should be completed with the highest level of honesty and integrity.

  5. Classroom etiquette:

  1. Lab etiquette:

  2. Face covering: Wearing a face mask reduces the risk of COVID-19 transmission and is a step we can all take to care for the members of our HPU family. Therefore, in compliance with applicable federal, state or local orders, at HPU, students are required to wear face masks when indoors in all classrooms, labs, studios, and other public spaces (such as hallways, building entrances, public restrooms, in HPU transportation such as shuttles, and other common spaces). There is not enough evidence to support the effectiveness of masks with one-way valves or vents, gators, or face shields for controlling transmission of the virus, and thus these face coverings are not an acceptable substitute for cloth face masks. Exceptions may be made for the use of face shields with an approved medical excuse or when giving a public presentation in front of a group, as long as there is greater than six feet of distance between speaker and audience.

  3. Students with Disabilities: High Point University is committed to ensuring all students have equal access to all services and benefits at High Point University. If you are a student with a disability and require academic accommodations due to a diagnosed disability, you must register with the Office of Accessibility Resources and Services (OARS) and submit the appropriate documentation. Requests for accommodations should be made at the beginning of a course  Accommodations are not retroactive. Contact us at oars@highpoint.eduor by telephone at 336-841-9026, for additional information. The Office of Accessibility Resource and Services is located on the 4th Floor of Smith. Library.

  4. Professionalism: The Mission Statement of the Webb School of Engineering is:

To provide an extraordinary engineering education through the delivery of a hands-on, practical education that prepares graduates for a rewarding career or admission into graduate school. The School of Engineering is committed to:

Please treat this class as if it were a company or organization for which you are working. You can exhibit professionalism by attending consistently, arriving on time, communicating your full or partial absence in a timely fashion, completing assignments on time, maintaining engagement, and respecting your peers and the professor.


Course Topics:

  1. Review of topics from 1710

    1. Function Definition and procedure abstraction

    2. Local vs. Global variable definition

    3. Call-by-Value

    4. Functions with return statements

    5. Call-by-Reference/Call-by-address(pointer)

    6. struct definition and dot notation

    7. arrays

    8. Tracing code and debugging techniques

  2. Sorting/Searching techniques

    1. Review of bubble and selection sort

    2. Review of sequential search

    3. Introduce shell sort and binary search

  3. Introduction to object oriented paradigm

    1. Definition a class

    2. Public, private and protected members

    3. Constructors, destructors and mutator methods

    4. is-a vs has-a relationship between objects

    5. Inheritance

    6. Abstract Data type and virtual methods

    7. Function/operator overloading and Polymorphism

    8. deep copy vs shallow copy

  4. Recursion

    1. How to formulate a recursive definition and function

    2. Recursive definitions for fibonacci, factorial, and similar algorithms

    3. Divide-and-conquer algorithms

    4. Faster Sorting algorithms: quicksort, mergesort, heapsort

    5. Recursive binary search

  5. Linked structures

    1. lists

    2. stacks and queues

  6. Algorithms: analysis of and order of magnitude, "Big-O" notation.