CMPU-101 -- Section 02

Computer Science I

Spring 2012


This is the web site for Prof. Hunsberger's section of CMPU-101.


Section Professor Class Meetings (OLB 105) Lab Meetings (OLB 105)
CMPU-101-02 Prof. Hunsberger Mon/Wed @ 12:00 - 1:15 p.m. Thu @ 12:00 1:15 p.m.

Note: This web page will be updated throughout the course of this semester.


Contents and Frequented Links


Overview

People use computers to solve problems. To be effective, programmers must thoroughly understand not only the problem to be solved, but also the complex relationship existing between the programmer, the program and the computer. Investigating this relationship raises several unexpected, but important issues. For example, how can we interpret a computer (i.e., a piece of hardware) as a computational device? How can different kinds of data be stored in computers? What sort of language do we want to use to "communicate" with a computer? What sorts of problems can computers be expected to solve? What are the basic elements of computation? What concepts or constructions can facilitate the task of programming a computer? This course addresses these and other important issues by having students directly interact with computers from the very beginning. The lectures involve the exploration of topics not only by discussing them, but also by regularly putting ideas to the test in a live computer session. (The computer code seen in lecture is regularly posted on the course web site.) The course includes weekly lab sessions in which students get regular hands-on experience with the issues being addressed in the lectures. These lab sessions also serve as warm-up exercises for programming assignments, in which students explore issues in greater depth.

The course covers the following topics:

These topics are addressed in the context of the Scheme programming language. Although these topics could be discussed in the context of any programming language, Scheme is a good choice because it has a comparatively simple computational model and syntax, yet is as powerful as any programming language.

To facilitate the writing and running of programs, this course employs the DrScheme software, which is installed on all of the lab computers and is freely available from drscheme.org. (Note: Ignore the pop-up box about DrRacket.)

There is no textbook for this course. Instead, students will be provided with links to handouts and other materials as needed throughout the semester. .

Nuts and Bolts

Instructor Prof. Luke Hunsberger, OLB 121
Prof. Hunsberger's Office Hours See My Web Page
Lectures Mon/Wed @ 12:00 - 1:15 p.m. in OLB 105
Labs Thu @ 12:00 - 1:15 p.m. in OLB 105
Text There is no textbook for this course. Instead, you will be provided with links to handouts and other materials as needed. If you want to print them out, you might consider purchasing a loose-leaf binder to hold them, along with lab and assignment solutions.
Lectures The lectures will augment the material covered in the weekly text segments by providing in-depth examples and analyses. The material covered each week builds on what was covered in prior weeks. As such, it is essential that you attend every lecture (and keep up with the reading assignments).
Labs This course has weekly lab sessions held in the same classroom, OLB 105. The lab computers use the Linux operating system and have the drScheme software that we will be using throughout the semester. Even if you have the DrScheme software installed on your own computer, you must do your lab work in the lab on one of the lab computers during the lab time. Each lab session should be viewed as a warm-up exercise to help prepare you for the next programming assignment. You must do your own work; so asking one of your classmates for assistance is not permitted. If you have questions, ask the professor or one of the lab coaches. We are there to help! There is nothing to turn in or submit for a lab session. Instead, when you are finished, simply ask the professor (or one of the coaches) to verify that you have done the work and your grade will be recorded on a scale from 0 (no work) to 3 (well done).
Exams There will be one in-class midterm exam and one final exam. Both exams will be open-book and open-notes. To reduce the need for printing out lots of materials to bring to the exams, we may provide you with access to a web browser during the exam that will be limited to the cs101 materials. The midterm exam will occur shortly before spring break. It is your responsibility to check the official schedule (see AskBanner) for the final exam.
Assignments There will generally be one assignment every two weeks, usually due on Monday; however, there may be modifications to this schedule to fit in with the timing of spring break and the midterm exam. Most assignments will be programming assignments. Unless explicitly authorized for a particular assignment, collaboration is NOT allowed on assignments. If you run into difficulty with an assignment, you should contact one of the student coaches during their office hours or Prof. Hunsberger during his office hours. All programming assignments must be submitted electronically. As you will find out, submitting assignments electronically is easy to do from the Lab computers. If you want to do a programming assignment on your own computer (see "Software" below), save a copy of your assignment files on a USB flash drive and submit the assignment from one of the Lab computers. More details will be provided in the near future about how to submit an assignment electronically. You must also turn in a paper copy of your programming assignments.
Coaches' Office Hours Office Hours
Software The computers in the lab are set up for you to use the DrScheme software. If you'd like to set up DrScheme on your own computer, then go to drscheme.org to download the software. (Ignore the pop-up window about DrRacket.) (Let me know if you have any trouble. In the meantime, use the computers in the lab.)
Grades Based on Labs (15%), Assignments (50%), Midterm Exam (15%), and the Final Exam (20%).
Note: Although higher numerical scores will necessarily receive higher grades, I do not feel bound to follow the frequently used 90/80/70/60 cut-offs.
Academic Integrity Don't cheat! Read Originality and Attribution: A guide for student writers at Vassar College. The guidelines that apply to writing in general apply equally well to the writing of computer programs. Copying someone else's code without attribution amounts to plagiarism! School policy dictates that instructors must report all suspected incidents of cheating to their department chair. Did you read the preceding sentence?! Please don't put yourself or your professor in that position. In this course, collaboration is not allowed on labs, assignments or exams.
Note: The paragraph above, as well as the one that follows below, were lifted practically verbatim from the web page for sections 02 and 03 of CMPU-101 in the Fall of 2006!
Students with Disabilities Academic accommodations are available for students with disabilities who are registered with the Office of Disability and Support Services. Students in need of disability accommodations should schedule an appointment with me early in the semester to discuss any accommodations for this course which have been approved by the Office of Disability and Support Services, as indicated in your DSS accommodation letter.
Caution! This course starts out with basic concepts, but each week the text segments, lectures, labs and assignments build new ideas on top of what was seen previously. Therefore, it is extremely important that you attend all lectures, keep up with the reading, and do all labs and assignments in a timely fashion. Historically, those students who experienced difficulty with CMPU-101 got into trouble by ignoring this advice. If you find yourself having trouble, by all means, come to my office hours! I'm more than happy to assist!

Calendar

The following calendar of lecture topics will be filled out during the course of the semester. Typical calendar entries will also include links to the code we looked at in class that day.

Mon. (Class)

Wed. (Class)

Thu. (Lab)

Jan. 18
Introduction to Scheme and DrScheme: Primitive Data, Evaluating Primitive Data.
Scheme handout, pages 1-14 (Intro plus DEFINE special form).
Jan. 19
Lab 1: Welcome to your CS account. How to submit an assignment.
Jan. 23
The default rule for evaluating non-empty lists.
Jan. 25
Special forms: define and quote
Scheme handout, pages 15-16 (QUOTE special form).
Jan. 26
Lab2: Defining functions using define and lambda.
Scheme handout, pages 17-26 (Predicates; Defining functions using the LAMBDA special form). Code from class
Jan. 30
More creating functions with the lambda special form.
Scheme handout, pages 27-30 (Strings, PRINTF, LOAD, Run Button, Comments), Code from class, Interactions.
Feb. 1
Scheme handout, pages 31-37 (Conditional expressions).
Code from class.
Feb. 2
Lab 3 SOLUTIONS!!.
Feb. 6
Output vs. side effects; conditional expressions; and recursive functions
More fun with Lab 3, Code from class.
Scheme handout (Recursion)
Feb. 8
Homework advice; More fun with recursion.
Code from class.
Feb. 9
Lab 4 SOLUTIONS!!.
Feb. 13
More recursion; tail recursion; accumulators.
Code from class
Scheme handout (Tail Recursion)
Feb. 15
More accumulators and tail recursion.
Code from class
Feb. 16
Lab 5 SOLUTIONS!!
Feb. 20
The LET and LET* special forms.
Scheme handout (The LET special form)
Code from class
Feb. 22
More LET and LET* special forms
Code from class
Feb. 23
Lab 6 SOLUTIONS!!
Feb. 27
MIDTERM EXAM!!
Covers everything through accumulators and tail recursion, but no LET or LET*.
Feb. 29
Exam solutions; a bit more about LET and LET*
Code from class
Mar. 1
Lab 7 SOLUTIONS!!
Spring Break is over :(
Mar. 19
Lists and List-based Recursion
Scheme handout (Lists) (pp. 60-62), Code from class.
Mar. 21
More fun with list-based recursion.
Code from class
Mar. 22
Lab 8 SOLUTIONS!!
Mar. 26
More examples of list-based recursion
Code from class
Mar. 28
More examples of recursion involving lists.
Code from class
Mar. 29
Lab 9 SOLUTIONS!!
Apr. 2
The MERGE-SORT algorithm.
Code from class
Apr. 4
Vectors and Destructive Programming!
Code from class
Apr. 5
Lab 10 SOLUTIONS!!
Apr. 9
Vectors and custom-made data structures!
Code from class
Apr. 11
Implementing a deck of cards
Code from class
Apr. 12
Lab 11 SOLUTIONS!!
Apr. 16
Continuing to implement blackjack.
Code from class.
Apr. 18
Continuing to implement blackjack.
Code from class.
Apr. 19
Lab 12
Note: No solutions necessary for Lab 12.
Apr. 23
Using MODULES to manage the development of a complex piece of software; BLACKJACK with a text-based or graphical user interface.
Notes from class; Modules example; Blackjack code.
Apr. 25
Code & Notes from class.
Apr. 26
Lab 13 SOLUTIONS!!
Apr. 30
A little animation
Code from class