CSS 342A: Mathematical Principles of Computing
Autumn 2003
MW 330-535pm

Prof. Munehiro Fukuda


Professor:

Munehiro Fukuda <mfukuda@u.washington.edu>, room UW1-331, phone 352-3459, office hours MW 2:30pm-3:30pm and 5:45-6:15

Course Description:

This sequenced course integrates mathematical principles with detailed instruction in computer programming. Topics include presentation of formal arguments to prove mathematical statements; development of algorithms; sorting and searching; algorithm analysis; introduction to object-oriented programming; basic abstract data types including stacks, queues, and lists.

Prerequisites:

Calculus, Probability & Statistics, and two quarters of programming (C/C++ competency).

Grading:

Assignments 40% A scale of 90s (3.5-4.0), 80s (2.5-3.4), 70s (1.5-2.4),
Midterm Exam 30% 60s (0.7-1.4) will be approximately followed.
Final Exam 30% Assignments consist of chapter problems and programs.

All homework assignments are graded in accordance with the corresponding grading guide which you can see through the class website. The key answer will be made available to you when you receive your graded work. You have a right to discuss about regrading your work, which is however given for a week after you have received your grade. Regrading will be discussed thoroughly based on the grading guide and key answer. From my experience, the class average generaly stays in mid 80s (3.0 - 3.2), however there may be some assignments that turn out harder, and thus the averages are lower. In this case, I will adjust for them before returning the graded work to you.

Textbooks:

  1. Data Structures and Problem Solving Using C++, Second Edition, Mark Allen Weiss, Addison-Wesley, 2000.
  2. Discrete mathematics and Its Applications, Fifth Edition, Kenneth H. Rosen, McGraw Hill, 2003.
  3. A C++ book of your choice.

Some C++ Books:

References:

Policies:

All homework assignments are to be done independently. Any collaboration of work will result in severe penalty. You may discuss the problem statement and any clarification with each other, but any actual work to be turned in, must be done without collaboration.

Hard copies of your assignemnt work are due at the beginning of class on the due date. Soft copies are due at 5 minutes prior to the beginning of class on the due date. No late submissions will be accepted. No make-up exams will be given, either. Except for special circumstances such as medical and other emergencies, in which case you must present a written proof to me. Barring emergencies, I must be informed before the assignment due date or the exam. Note that disk crash is not considered as an emergency.

To request academic accommodations due to a disability, please contact Disabled Student Services (DSS) in Library Annex Building, Room 106, (email rlundborg@bothell.washington.edu, TDD: 425-352-5303, and FAX: 425-352-5444). If you have a documented disability on file with the DSS office, please have your DSS counselor contact me and we can discuss accommodations.

Course Goals:

The overall goal of CSS 342 is to learn discrete mathematics concepts and computer programming. You solve mathematical problems, present formal mathematical arguments, and program solutions to problems. You review programming basic data types, learn searching and sorting algorithms, are introduced to object-oriented programming and basic abstract data types, and study algorithm analysis. The programming language C++ is studied. Good software engineering techniques are used throughout. As with most technical courses, besides ability and motivation, it takes time to learn and master the subject. Expect to spend an additional 10 to 15 hours a week outside of class time on the average.

Programs:

Turn in both a hard and a soft copy of your assignment work.

Topics covered and tentative 342 winter schedule:

Note that this is an approximate ordering of topics. Chapters will take about the allotted time and not all sections in all chapters are covered. (Topics labeled C++, refer to Data Structures and Problem Solving Using C++. Topics labeled Math, refer to the Discrete Mathematics and Its Applications.)

Week Date Topics Reading Assignment
1 Sep 29 Introduction, Preliminaries, unix email accounts,
principles of programming and software engineering, and
review of arrays, pointer, and structures
C++ ch1 Program 1 assigned
  Oct 1 Objects and classes C++ ch2  
2 6 Templates C++ ch3, ch5  
  8 Algorithm analysis C++ ch6
Math Ch2.2,2.3
 
3 13 Algorithm analysis (continued)   Program 1 due
Program 2 assigned
Writing Exercise 1 assigned
  15 Recursion C++ ch8
Math Ch6.1-6.3
 
4 20 Recursion (continued)    
  22 Induction Math 3.2,3.3,3.5  
5 27 Sorting algorithms C++ ch9,
Math 2.1,3.5
Program 2 due
Program 3 assigned
  29 Sorting algorithms (continued)   Writing Exercise 1 due
6 Nov 3 Midterm exam    
  5 Linked lists C++ ch17  
7 10 Linked lists (continued)
Quiz example Application examples
  Program 3 due
Program 4 assigned
  12 Stacks and Compilers C++ ch12  
8 16 Last day to drop a course    
  17 Stacks (continued)    
  19 Queues C++ ch16  
9 24 Queues (continued)
Application examples
  Program 4 due
Project assigned
  26 Project    
10 Dec 1 Propositions Math ch1.1,1.2 Writing Exercise 2 assigned
  3 Quantifiers Math ch1.3,1.4  
11 8 Proofs Math ch1.5,1.7,3.1  
  10 Review & wrap-up   Write Exercise 2 due
12 15 Final exam, in class on Monday   Project due

Programming assignments:

  1. Program 1 exercises how to construct abstract data types through implementing a feet/inches class in C++. It also reviews type conversions for classes, operator overloading, and input/ouput including the friend concept.
  2. Program 2 analyzes the worst case of Euclidean algorithm.
  3. Program 3 This programming assignment draws complex graphics using recursive calls.
  4. Program 4 exercises dynamic memory allocation, copy constructor design, and special cares for the link head through constructing a doubly-linked list. You are also supposed to implement a text editor with your doubly-linked list.
  5. Program 5 (Project) searches for a shortest path by extending the recursive solution of search problem you learnt in the Stacks section. (No Dijkstra's algorithm is used.) You are supposed to use arrays, lists, stacks, and queues.