|Course Number:||CS 3321|
|Taught During:||Winter 1996|
|Instructor:||Prof. Shashi Shekhar|
|Lab expt descr.||huffman.ps|
|Audience:||Student Background Survey|
William Ford and William Topp,
"Data Structures with C++"
Prentice Hall 1996 (ISBN 0-02-420971-6).
The textbook provides introductory material on data structures including linear structures ( stacks, queues, priority lists ), and non-linear data-structures (binary trees, binary search trees). It also provides intermediate level material on C++ (classes, operator overloading, templates, interaction between pointers and class constructors/destructors/assignment operators, inheritance/polymorphism). The book has excellent classification of data-structures for beginners. It provides adequate number of exercises, discussion questions and programming projects.
The book may have too little details of C++ for students unfamiliar with C language. It was supplemented with notes on C++ language details. Probably a C++ book should be used as a supplement.
Response: Ford/Topp: Chapters 1-8, and 11.
Response: A video tape titled "Design and Evolution of C++" by Bjarne Stroustrup, the designer of C++, was shown in the class. Several demonstrations were used in the course with the help of makefiles, to illustrate how to organize C++ program into files, how to compile, #include, link and test C++ classes, how to implement classes, inheritance and templates.
Makefiles provided a useful mechanism to convey the industrial practices relating to C++. It helped illustrate the file organization, linking and #include facilities. Student could follow industrial practice of separating major classes into independent file-pairs (.h file, .C file), without remembering and executing scores of commands.
Illustration of industrial practices in testing C++ programs were provided with the help of a c-shell driver and testcases. A common practice is to develop a driver for each class (e.g. classAdriver.C for classA.h and classA.C). The testcases were organized as file pairs ( classA.inp, classA.exp)
Response: Inheritance was conceptually difficult. Templates were difficult to implement due to the limitations of the C++ compiler (gcc) and its error messages. C++ compilers did bring up many other surprises from time to time. In particular, it did not compile class templates split into a .h and a .C file.
Response: A simple quiz on the pre-requisite material revealed that students were not prepared for the class. One third of the class failed the quiz on "C" (Csci 3113). It is surprising in view of the fact that the quiz was based on the CS 3113 final and most students took CS 3113 in the recent past.
Response: Reduced the overlap with CS 3322 by eliminating discussion of complexity analysis, and advanced algorithms (e.g. sorting). Emphasis on basic C++ languages was increased. I taught template functions and classes in Fall 1994 offering, a first in CS 3321 history. We also included material on industrial practices in C++, including use of makefiles for managing programs spread across multiple files, and use of testcase and driver programs to test C++ classes.
Response: Course description should explicitly state that this course is more than a C++ programming course. Syllabus needs to be revised to reduce overlap with CS 3113 (C programming) and CS 3322 (Algorithms and Data-Structures II). It should focus on intermediate level C++ as emphasized in the book. It should not discuss elementary data-structures (e.g. linked lists, arrays) and elementary C++ issues (control structures), which are covered in CS 3113. The name of the course should also be changed to "C++ and Data Structures" from "Algorithms and Data Structures I" to reduce overlap with CS 3322.
Response: Reduce the class size. Younger students are not very motivated and need closer interaction.
Response: Recitations were used to provide detailed information related to laboratory exercises and conceptual topics. Discussion of C++ compilers, linkers, makefile, testing conventions were discussed. The typical errors and error messages related to various features of C++ were discussed. In addition, a set of discussion questions and exercises were assigned from the textbook for recitation sections. Practice exams. were used to motivate students to go beyond programming.
Response: Introduce Laboratory sections.
Response: Introduce scheduled Laboratory sections supervised by TAs or graders.
Response: There were four regular assignments. The weighting scheme used for grading is: Quiz - 10 percent, Midterm exam - 25 percent, Final exam - 35 percent, Assignments - 30 percent, Following were the two necessary conditions for passing this class: (i) submission of all assignments, (ii) scoring at least 50 percent on the final examination.
Response: Quiz, Mid-quarter and Final were designed to be closed-book examinations. However, Students were allowed to refer to the textbook and notes. Examination emphasize problem solving (60%), discussion questions (20%) and programming in C++ (20%).
|Lab experiment descriptions|
|Class notes distributed|
|Major quizzes & Final|