Spring 2013 (Section 1, 10097; Section 2, 12180; Section 3, 16971) - 4 credit hours
JMU
Syllabus


An algorithm is a procedure for finding the correct solution to a problem (in a finite amount of time). Hence, a course on algorithm development is principally about problem-solving. This course focuses on developing algorithms that can be executed by a digital computer. Since the algorithms developed in this course are relatively simple, most of the attention is on how to specify them formally and correctly.
The primary textbook for this course is:

Gaddis, Tony (2012) Starting Out with Java , Pearson Education , Boston, MA.
(Order from amazon , order from Barnes and Noble , compare at bigwords , compare at CampusBooks4Less , order from Chegg , or search eFollett )

You are expected to complete all reading assignments before the first day they are discussed in class.
Outline: This course is organized as follows, though specific topics and dates may change. (Readings are listed in the right-most column.)
Part I: Introduction to Algorithm Development
1/7 Algorithms and Course Overview 1.1-1.4
1/8 Lab: (1) Experimenting with Algorithms without Computers
1/9 Data Types, Variables and the Assignment Operator and Using Arrays 2.3-2.4, 2.9
1/10 Lab: (2) Gaining Experience Writing Algorithms without Computers
1/14 Arithmetic Operators , Pattern: Arithmetic on a Circle , Pattern: Divisibility , Pattern: Digit Manipulation and Using Functions/Methods 2.5, 2.2
1/15 Lab: (3) Gaining Experience with Arithmetic Operators
1/16 Developing Applications in Java 1.5-1.6, 2.11-2.12
1/17 Lab: (4) Skills - Using a Text Editor
1/21 Martin Luther King, Jr. Day - No Lecture
1/22 Lab: (5) Questions about the Collaboration Policy
1/23 Functions and Modularity 5
1/24 Lab: Programming Assignment 1, Part d
1/28 Implicit and Explicit Type Conversion 2.7
1/29 Lab: Programming Assignment 2, Part b
Part II: Conditional Algorithms
1/30 Relational and Logical Operators 3.1, 3.5
1/31 Lab: (6) Gaining Experience with Logical and Relational Operators
2/4 Conditions and Decisions and Pattern: Inference 3.1-3.4,3.8-3.9
2/5 Lab: (7) Gaining Experience with Conditions and Decisions
2/6 Basics of Debugging and Debugging Conditionals
2/7 Lab: (8) Skills: Using a Command Shell
2/11 Pattern: Logical Functions
2/12 Lab: Assessment Day - No Lab
2/13 Input and Output Basics 2.2, 3.11
2/14 Lab: (9) Experimenting with Debugging Conditional Algorithms
2/18 Exam 1
2/19 Lab: Discussion of Exam 1
Part III: Iterative Algorithms
2/20 Repetition and Looping and Testing and Debugging Iterative Algorithms 4.1-4.6
2/21 Lab: (10) Experimenting with Loops
2/25 Patterns: Breaking Out , Accumulators and Interval Membership
2/26 Lab: Work on Programming Assignment 5
2/27 Patterns: Sequential Loops and Nested Loops 4.7-4.9
2/28 Lab: (11) Gaining Experience with Nested and Sequential Loops
Part IV: Introduction to Object-Oriented Programming
3/11 Object-Oriented Programs , Using Classes and Objects and Using Static Attributes and Methods 2.9, 3.6, 4.11
3/12 Lab: (12) Gaining Experience Using Objects
3/13 Using Input and Output Streams 3.10-3.11, 4.10
3/14 Lab: (13) Skills: Using a Debugger
3/18 Using Strings
3/19 Lab: Work on Programming Assignment 6
3/20 Objects and References 8.2-8.3
3/21 Lab: (14) Experimenting with Reference Types
3/25 University Closed due to Inclement Weather
3/26 Lab: Exam 2 (in Lab)
Part V: Developing Classes
3/27 An Introduction to Developing Classes 6.1-6.5
3/28 Lab: (15) Gaining Experience Developing Classes
4/1 Information Hiding 6.7-6.9
4/2 Lab: (16) Questions about Information Hiding
4/3 Overloaded Methods 6.6
4/4 Lab: (17) Gaining Experience with Overloading
4/8 Developing Classes with Static Attributes and Methods 8.1
4/9 Lab: (18) Experimenting with Static Attributes and Methods
4/10 Arrays Revisited and Arrays and References 7.1-7.7
4/11 Lab: (19) Experimenting with Arrays and References
4/15 Programming Patterns: Conformal Arrays , Look-up Arrays and Accumulator Arrays
4/16 Lab: Work on Programming Assignment 8
Part VI: Some Advanced Topics
4/17 Array-Like Objects (and Wrapper Classes) 7.13, 9.1
4/18 Lab: (20) Experimenting with Array-Like Objects
4/22 Exceptions
4/23 Lab: Work on Programming Assignment 9
4/24 Enumerated Types
4/25 Lab: Work on Programming Assignment 9

Attendance is not mandatory but is strongly encouraged. You are expected to come to class prepared to ask and answer questions. Hence, you should complete the readings on a topic before it is discussed in lecture.

Grading: Final grades will be based on your performance on: 2 in-class exams (15% each) , 1 final exam [during the exam period at the lecture (MWF) time] (30% total) , several programming assignments (30% total) and several labs (10% total). Note: Students who do not earn 60% of the points on the final exam will receive a letter grade no higher than D+ for the course.
Programming Assignments: 9 programming assignments will be assigned during the semester. Note that their due dates are subject to change.
Programming Assignment 1 (Arithmetic Operators and Functions)
Part a. Understanding the Problem. Points: 10%. Due: 1/14 @ 11:00PM.
Part b. Creating an Algorithm. Points: 10%. Due: 1/16 @ 11:00PM.
Part c. Programming in Java. Points: 70%. Due: 1/22 @ 11:00PM.
Part d. Programming in Java. Points: 10%. Due: 1/24 @ End of Lab.

Programming Assignment 2 (Arithmetic Operators and Functions)
Part a. Understanding the Problem and Creating an Algorithm. Points: 10%. Due: 1/28 @ 11:00PM.
Part b. Understanding the Java Language. Points: 10%. Due: 1/29 @ End of Lab.
Part c. Programming in Java. Points: 80%. Due: 1/31 @ 11:00PM.

Programming Assignment 3 (Integer Arithmetic)
Part a. Understanding the Problem. Points: 20%. Due: 2/1 @ 11:00PM.
Part b. Creating an Algorithm and Programming in Java. Points: 80%. Due: 2/4 @ 11:00PM.

Programming Assignment 4 (Conditional Algorithms)
Part a. Creating Part of the Algorithm. Points: 10%. Due: 2/7 @ 11:00PM.
Part b. Creating More of the Algorithm. Points: 20%. Due: 2/11 @ 11:00PM.
Part c. Programming in Java. Points: 70%. Due: 2/14 @ 11:00PM.

Programming Assignment 5 (Iterative Algorithms)
Part a. Understanding the Problem. Points: 10%. Due: 2/20 @ 8:00PM.
Part b. Understanding the Java Language. Points: 10%. Due: 2/20 @ 11:00PM.
Part c. Creating an Algorithm and Programming in Java. Points: 30%. Due: 2/22 @ 5:00PM. (Extended to 2/28 @ 11:00PM)
Part d. Creating an Algorithm and Programming in Java. Points: 50%. Due: 2/26 @ 11:00PM. (Extended to 2/28 @ 11:00PM)

Programming Assignment 6 (Using Objects)
Part a. Understanding the Problem. Points: 10%. Due: 3/13 @ 8:00PM.
Part b. Understanding the Java Language. Points: 10%. Due: 3/13 @ 11:00PM.
Part c. Creating an Algorithm and Programming in Java. Points: 30%. Due: 3/15 @ 5:00PM.
Part d. Creating an Algorithm and Programming in Java. Points: 50%. Due: 3/19 @ 11:00PM.

Programming Assignment 7 (Developing Classes)
Part a. Points: 20%. Due: 4/1 @ 11:00.
Part b. Points: 60%. Due: 4/8 @ 11:00.
Part c. Points: 20%. Due: 4/12 @ 5:00.

Programming Assignment 8 ; Due: 4/16 11:00PM (Unit Testing)
Programming Assignment 9 ; Due: 4/26 5:00PM (Arrays and References)

Make sure you read and understand all of the policies related to programming assignments.

Laboratory Exercises: There will be two lab periods every week. During most lab periods you will be given a step-by-step exercise to complete. Some laboratory exercises will be experimental in nature (i.e., help you "discover" various things), some will help you gain experience with things you already know, and some will help you improve your programming-related skills (rather than knowledge).
Office Hours: You may meet with Prof. Bernstein during his scheduled office hours or you may schedule an appointment with him. The lab assistants for CS139 are: Brian Brown , Eddie Olson , Jonathan Watson , Jamie Martin , Josh Spencer , and Adam Doll . You can get help from them during labs and during their evening hours.

Copyright 2015