CompSci 351: Programming Data Structures - Spring 2007

Mohamed ElBendary and William Retert

Homepage http://www.cs.uwm.edu/classes/cs351
Please check here for answered questions for assignments, or for schedule changes.


Instructors and TA's


Name Sections E-mail Office Phone Hours
Mohamed ElBendary 401 mbendary EMS E212 5980 T 11:30am:-12:30pm, R 3:00pm-4:00pm
William Retert 801, 802 williamr EMS E212 5980 M 12:45pm-1:45pm, W 4:00pm-5:00pm

We are happy to help you with questions during office hours regardless of which lecture or lab section you attend. Outside these hours, please make an appointment. If you have email questions, please send to either one of the instructors.

Introduction

CompSci 351 is a demanding course, but a rewarding one. It is a course on programming in which you learn by doing. Thus the course involves a lot of hands-on work in the computer lab. However, this course also emphasizes concepts and so written and oral explanations will be required.

Objectives

Students will be competent in object-oriented programming with a practical understanding of the software life-cycle, what an abstract data type is, why one uses them, and how one goes about designing one. In particular, students will be familiar with and able to use stacks, queues, and tables. Students will have programming skills including pointers and dynamic allocation, recursion and recursive data structures, templates, inheritance and dynamic dispatch.

Requirements

Students must have received a `C' or better in CompSci 251. Even those who got less than a ``B'' in CompSci 251 may find they have a lot of catching up to do. If you are unsure whether you should take this course or if you would like some help in making the transition from CompSci 251, please see an instructor as soon as possible.

In particular, this class assumes the following abilities:

  1. Ability to write, compile and execute C++ programs, including simple classes;
  2. Familiarity with C++ control structures: if, while, for and user-defined functions;
  3. Competence using C++ data types: char, int, float or double, arrays, references and char* or string.
  4. Practical knowledge of C++ I/O: cin, cout, «, and ».

Texts

The required textbook for the course is

Nell Dale. C++ Plus Data Structures. Third Edition. Johns and Bartlett.

Grading

The grade for the course will be computed from the following parts:

0%
Pre-Test
You must pass a pre-test given during the first lab section.
40%
Exams
There will be two midterms, each worth 10% of the grade, and one final exam worth 20% of the grade. Make up exams will not be given. The exams are cumulative, thus a better percentage on a later exam will take the place of a lower percentage on an earlier exam. So a 90% on the second midterm would replace an 85% on the first midterm, and 75% on the final would replace a 65% on the first midterm.

35%
Homework
There will be 10 homeworks in all, partly programming and partly text. Each homework is due at midnight on Wednesdays. Late homework will not be accepted. Each homework is worth 3.5% of the grade.

15%
Labs
There will be thirteen lab assignments that should be done during lab. Each completed lab counts 1.5% of the total grade and the highest 10 lab scores will be used. Labs are graded pass/fail, with partial credit given for an incomplete lab. With permission of your TA, you may complete a partially finished lab at later point if you run out of time; it is your responsibility to show the TA that the lab has been completed. Note that you must either be present during lab hours, or pre-arrange your absence with your TA to get any credit for the lab. Missed lab assignments cannot be made up.
10%
Quizzes
Over the course of the semester, there will be at least 10 graded quizzes during lecture. Quizzes are related to material covered during that day's lecture. Each quiz counts 1% of the total grade and the top ten quiz scores will be used. There is no way to make up a missed quiz.
Exceptions to these rules can be made only in extraordinary circumstances. Advance notice of a need for an exception should be given whenever possible.

Criteria

Programs and written assignments will be graded for correctness, suitability, style, clarity and practicality. Typically, there are usually a wide variety of correct answers to any particular assignment.

Academic Honesty

All graded assignments must be your own work (your own words), but you may work with other people as long as you list their names prominently on the first page of the assignment, and/or in a comment at the top of the assignment, for example:

// Wendy Lee, Homework #6, CS 351
// I discussed this assignment with Sam White,
// and Pat Long.  We looked at each other's code
// in hard-copy, but did not exchange the copies.
For this course, all verbal communication and collaboration using non-code text or hand-written code is permitted as long as it is properly documented. The same documentation must be made for help from people not in the course as well, such as a tutor, a friend or relative, and for information off the web.

You may not make copies of assignments through email, disks, scanning or any other automatic copying technique, except where specifically indicated in an assignment. Similarly, you may not make xerographic copies of portions of homework, or give people print-outs of your program. At the very least, you must write every word in your assignments. If you are unsure whether something is permitted, please check with an instructor or TA. If you turn in a program which is an electronic copy (or a minor variation of a copy) of other people's, then the source and people who give credit to the source will receive zero for the assignment, and those who do not give credit will be given an 'F' grade for the course. Do not send your programs by email to other people!

Whether or not you have permission of the other, submitting someone else's work as your own is plagiarism, a serious instance of academic misconduct. Everyone is responsible for learning the material themselves. Some of the assignments may be graded in person; this technique will be used especially in cases where the individual contribution to the assignment is not clear.

In this course, you will be running code written by the instructors. None of these programs are ``Trojan horses'': none will ever attempt to perform covert tasks that invade privacy or destroy data. Similarly, you may not submit Trojan horses as regular assignments. Any such action will be dealt with severely.

Grade equivalents

All assignments will be assigned a numeric grade. Often, however, letter grades will be used. This table shows how letter grades are converted into numeric values. Not all these letter grades will be used.

Letter Grade A+ A AB B BC C CD D DF F _
Equivalent Score 100 95 90 85 80 75 70 65 60 40 NA

A grade written _ is not yet available; it does not mean zero.

Course Grades

At the end of the course, the numeric grade will be converted into a letter grade according to the following scale:

Letter Grade A A- B+ B B- C+ C C- D+ D D- F
Minimum Score 92 90 87 82 80 77 72 70 67 62 60 0
There is no curve, but the instructors reserve the right to increase a grade if they believe it would not reflect the student's mastery of the material. A grade can only be decreased for academic dishonesty.

At any point in the semester, you can check what grades are recorded by logging in to D2L from the uwm.edu web site.

Homework not turned in pull down the grade a lot. Don't skip a homework; always turn in the best you can do.

Schedule


Week Topic Relevant reading
starting    
1/22 ADTs Ch. 2, 3.1, 3.2
1/29 Handling Exceptions, Testing and Debugging Lecture Notes
2/5 Operator Overloading Ch. 3.6, Lecture Notes
2/12 Pointers and Dynamic Arrays Ch. 4.3, 4.4
2/19 Vector, Using Iterators. Midterm #1 Lecture Notes
2/26 Linked Lists I Ch. 5.3
3/5 Linked Lists II Ch. 5.4
3/12 Writing Iterators, Templates and Nested Classes Ch. 4.2, Lecture Notes
3/19 Spring Recess  
3/26 Recursion and Binary Search Trees Ch. 7, 8
4/2 Stacks and Queues. Midterm #2 Ch. 5.1, 5.2
4/9 Hashing Ch. 10.3
4/16 Inheritance Lecture Notes
4/23 Virtual Member Functions Ch. 6.6, Lecture Notes
4/30 STL: containers and algorithms Lecture notes
5/7 Introduction to Design Lecture notes
  Final Examination: 10:00am-12:00 Noon, Wednesday May 16  

Examinations

Lc 401
Midterm # 1 Thursday, Feb. 22, 9:30am
Midterm # 2 Thursday, Apr. 5, 9:30am
Final Wednesday, May 16, 10:00am

Notes



Mohamed Ibrahim ElBendary 2007-01-23