Mohamed ElBendary and William Retert
| Name | Sections | 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 |
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.
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.
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:
The required textbook for the course is
Nell Dale. C++ Plus Data Structures. Third Edition. Johns and Bartlett.
The grade for the course will be computed from the following parts:
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.
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.
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 |
_ is not yet available; it does not mean zero.
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 |
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.
| 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 |
| Lc 401 | |||
| Midterm # 1 | Thursday, Feb. 22, 9:30am | ||
| Midterm # 2 | Thursday, Apr. 5, 9:30am | ||
| Final | Wednesday, May 16, 10:00am | ||