Approved by University Studies Sub-Committee.  A2C2 Action pending.

 

 

 

University Studies Course Approval

 

Department or Program: Computer Science
Course Number: CS 234
Course Title: Algorithms and Problem Solving I
Semester Hours: 4
Frequency of Offering: every semester; 3-4 sections of 30 students
Catalog Description: An introduction to the major concepts of algorithm design and problem solving.  Emphasis is on algorithm development, analysis and refinement.  Programming strategies and elements of programming also are covered.  Various practical applications of problem solving are demonstrated.  Includes formal labs.  Prerequisites: qualifying score on math placement test or grade of C or better in Math 120 or 150. 
Existing course approved by A2C2: Yes
Department Contact: Tim Gegg-Harrison
Email Address: tsg@wind.winona.edu
University Studies Requirement: Unity and Diversity: 
     Critical Analysis

 

 General Course Outcomes:

Learning how to program a computer is very different from learning how to use a computer.  The purpose of writing a computer program is to have the computer solve a specific problem for you -- in a specific and repeatable way.  As such, the programmer must understand the problem in all of its ramifications and then develop a logical solution to the problem that can be understood by the computer.  I.e., a programmer must use critical thinking skills to analytically solve a problem under the axioms of a well-defined logical system.  In this course, students learn the basics of programming a computer and they learn how to represent their programs in a specific programming language, currently, Java.

Throughout this course, students work on writing computer programs.  They will typically have to write from 4 to 7 programs on their own.  They will also work on shorter programming activities during the lab portion of the class. In the beginning of the course, the students work on simple problems.  As the course progresses and they learn more of the language's constructs, they work on writing programs to solve more complicated problems.   

Specific Course Outcomes:

     a. evaluate the validity and reliability of information;

The complete process of writing a program requires a student to evaluate the validity and reliability of their proposed problem solution.  In particular, the steps of simple programming include the following:
    1. Understand the problem.
    2. Dissect the problem into manageable pieces.
    3. Design a solution.
    4. Consider alternatives to this solution and refine it.
    5. Implement the solution in a specific programming language and computing environment.
    6. Test the solution.
    7. Determine the source of problems found in the solution.
    8. Repeat steps 3-7 as necessary.
Students will work on all of the steps throughout the semester.

b. analyze modes of thought, expressive works, arguments, explanations, or theories;

Step numbers 1-5 above fit into this category.  Students are given exercises to help them develop the skills necessary to perform these steps.  In particular, students usually come into this class thinking that programming is mostly about step number 5.  Thus an emphasis of the class is getting them to understand the importance of steps 1-4 and also in developing the skills they need for these steps.

c. recognize possible inadequacies or biases in the evidence given to support arguments or conclusions; and

Step 6 and 7 above, frequently referred to as "testing" and "debugging" a program, fit into this category.  During testing, the programmer tries to design experiments that will determine if the program is working correctly under certain conditions.  When it is recognized that the program in inadequate for a certain set of test data, then the program must be debugged.  This involves finding the source of the error in the program.

d. advance and support claims.

Frequently students think that they completely understand the use of a certain language construct or that an existing program works correctly in all situations.  By having the students reuse earlier language constructs and also other programs in more complicated, follow-on programming assignments, they are given the opportunity to advance and support their claims.  In some cases, their initial assumptions are supported; in others they find out for themselves some of the limitations to their earlier solutions.

 

horizontal rule


 

Sample Course Syllabus 
Fall Semester - 2001

 

Course:

CS 234 – Algorithms and Problem Solving I CS 210 – Computers in Society

Text: 

Thomas C. Wu, “Object-Oriented Programming using Java”, 2nd edition, 2000

Prerequisites:

Qualifying score on the math placement test or a grade of C or better in Math 120 or Math 150

Credits:

4 S.H.

Course Description:

An introduction to the major concepts of algorithm design and problem solving.  Emphasis is on algorithm development, analysis and refinement.  Programming strategies and elements of programming also are covered.  Various practical applications of problem solving are demonstrated.  Includes formal labs. 

 Instructor:

Prof. X

Office hours:

Anytime

Office: 

Anywhere

e-mail address: 

profX@wind.winona.edu

Office phone: 

555-1234

Course Home Page:

http://wind.winona.edu/~ProfX/CS234/ 

 
University Studies

This course qualifies as a University Studies course satisfying the outcomes of the Critical Analysis category of the Unity and Diversity area.  As such, successful completion of the course requirements will complete the Critical Analysis category of the Unity and Diversity area of the University Studies program.

University Studies Outcomes:  Critical Analysis courses in the University Studies program are devoted to teaching critical thinking or analytical problem solving skills.   These skills include the ability to identify sound arguments and distinguish them from fallacious ones.  The objective of these courses is to develop students’ abilities to effectively use the process of critical analysis.

These courses must include requirements and learning activities that promote students’ abilities to:
    A. evaluate the validity and reliability of information;
    B. analyze modes of thought, expressive works, arguments, explanations, or theories;
    C. recognize possible inadequacies or biases in the evidence given to support arguments or conclusions; and
    D. advance and support claims.

Learning how to program a computer is very different from merely learning how to use a computer.  Unlike other machines that humans have created, the computer is a unique machine.  It is a logically malleable machine that can be molded (or programmed) to solve any problem that can be defined with a set of inputs and outputs and a corresponding set of logical operations to transform the inputs into the outputs.   Solving such problems requires critical analysis skills.  Specifically, the programming process requires the following steps:
    1. Understand the problem (i.e., analyze the problem definition).
    2. Dissect the problem into manageable pieces.
    3. Design a solution.
    4. Consider alternatives to this solution and refine it.
    5. Implement the solution in a specific programming language and computing environment.
    6. Test the solution.
    7. Determine the source of problems found in the solution.
    8. Repeat steps 3-7 as necessary.

The entire programming process is an example of outcome A.  Steps 1-5 are examples of outcome B.  Finally, outcomes C-D are covered in steps 6-7.  In this class, you will practice the programming process in two distinct ways.  First of all, you will participate in weekly closed labs where new material will be introduced and small projects will be completed in groups that enable you work collaboratively while learning the new material.  You will also be given more major programming projects that are expected to be completed individually outside of class.  These activities enable you to solidify your understanding of the material that is presented in the lectures and closed labs.

Course Specifics

Topics we will attempt to cover include, but are not limited to, the following:

  1. Introduction to Computers and Programming Language
  2. Introduction to Object-Oriented Programming and Software Development
  3. Programming Basics
  4. Numerical Data
  5. Defining Instantiable Classes
  6. Selection Statements
  7. Repetition Statements
  8. Characters and Strings
  9. Arrays
  10. Inheritance and Polymorphism

This list indicates topics to be covered; it does not necessarily reflect the order in which we will cover them.

Grading Distribution:
    1.   4-7 Programming Projects (40%)
    2.   2-3 Exams (40%)
    3.   Final exam (20%)

Grading Policy:
The following policy will be in effect for all programs.  Programs are due at the beginning of the class period on the due day.  Late programs will be accepted prior to the beginning of the following class period for a 20% reduction.  No programs will be accepted after that time.  Programs that do not compile will receive no credit.   You must complete at least one program in order to pass the class, regardless of your performance on the exams.

Academic Dishonesty Policy:
Cheating is a deplorable act and it will not be tolerated in CS234 or any other class that I teach.  Anyone who is caught cheating in this class will receive a grade of F for the class.  Note also that if you are caught cheating then you will not be permitted to withdraw from the class (i.e., the F will go on your permanent transcript).

All programming assignments that are assigned in CS234 are individual assignments.   That means that you must do all of the work entirely by yourself.  To ensure that you adhere to policy, for each programming assignment you are required to turn in a signed note indicating that you alone were responsible for the work.  It is considered cheating to copy any portion of the assignment from anyone else or to knowingly permit someone else to copy your assignment.  All exams in CS234 are closed book/closed notes.  It is considered cheating to view your notes or to communicate with or copy from a classmate during an exam.

 

horizontal rule

 

Sample LabYou may work with a lab partner on this lab assignment. You need turn in only one algorithm design and pseudo code and Java source listing for the group. Use the Loan Calculator from the book as a reference for this lab. Note that you should declare all of data areas and perform all of the computations in the main method. Further note that you should use symbolic constants rather than literal constants. Also be sure to adequately comment your program, including the program title, program description, input, and output.

Joe's Discount Coffee is an international coffee distributor. In order to simplify production, Joe's Discount Coffee has decided to carry only one brand of coffee, a special blend that Joe's great-grandfather's second cousin created 75 years ago. Currently, all orders are handled by Joe's younger sister, Susy, who takes the orders over the telephone and hand writes all of the bills. Unfortunately (for Joe, not Susy), Susy is getting married next month and is moving to Europe. In order to keep his business afloat after his sister departs, Joe has decided he must enter the information age. In order to do that, he will need your help. He would like you to produce a Java application that takes the place of Susy. This application should accept the weight of coffee per bag and the number of bags of coffee desired and then create a "bill" that displays the total price of the sale. The total price of the sale can be calculated by multiplying the "weight per bag of coffee" by the "number of bags of coffee" by the "price per pound" (which is $5.99). You must also include sales tax of 7.25%.

The bill should have the following format (assuming the customer wants 32 5-lbs bags):

 

     Number of bags sold:   32
          Weight per bag:   5 lbs
         Price per pound:   $5.99
               Sales tax:   7.25%
                                       
             Total price:   $ 1027.884      

 

Draw the design diagram and pseudo code for this problem.  Then write the Java application named AutomatedSusy that uses a MainWindow with an InputBox to input the information from the customer and an OutputBox to output the "bill" to the customer.  Turn in your design diagram and pseudo code and a signed printout of the source code of your Java program.

 

horizontal rule

 

Sample ProjectFor this individual project, you are to create a Java Applet that creates an identification card like the one given below:

Complete the class named MiniMe that is an extension of the Applet class.  Note that "image" a portrait of your face.  Be sure to include any features that are unique to you (e.g., glasses, narrow vs. wide face, long vs. short hair, curly vs. straight hair, etc.).  I realize that most of you are not artists, but do the best you can.

This program is due at the beginning of class on some date.  Absolutely no late programs will be accepted!  This like all programming assignments in this class is an individual assignment.  As a reminder, cheating will not be tolerated in this class. It is considered cheating to copy any portion of the program from anyone else or to knowingly permit someone else to copy your program.  Anyone who is caught cheating in this class will receive a grade of F for the class.  Note also that if you are caught cheating then you will not be permitted to withdraw from the class (i.e., the F will go on your permanent transcript).    You must do all of the work entirely by yourself.  To ensure that you adhere to policy, for each programming assignment you are required to sign it, indicating that you alone were responsible for the work.   Unsigned programs will not be graded.

For this program you are to turn in a signed printout of the Java source code (i.e., MiniMe.java), a printout of the applet as it appears in the Appletviewer, and a floppy containing the MiniMe.java, MiniMe.class, and MiniMe.html files.