Computer Science 161.02
Fall 2014

Meetings:

MWF 9:30AM-10:20AM Bagby 020

Instructor:

Professor Tom Valente
Bagby 123 x6210
email: tvalente

Office Hours:

MTWR 2:30PM-4:00PM, other times by appointment and by announcement

Textbook:

Foundations Of Computer Science, 2nd Edition by Forouzan and Mosharraf

Course Description:

This is a broad based introduction to computer science, using a hands-on approach to learning. This course has no prerequisites except a willingness to pursue the course objectives.

Computer Science is the study of the kinds of problems that computers can solve and how they actually, in the end, solve them. At the heart of computer science is the notion of algorithm . An algorithm is a careful and thorough step-by-step description (or "recipe") of how to solve a problem. The process of programming a computer begins with the programmer expressing (perhaps informally) an algorithm that will do so. The process continues with the programmer then encoding the algorithm in a programming language such as Java or C++ or Python. Remarkably, a computer does not understand nor can it execute instructions written in such languages. Instead, the algorithm is executed by a computer's hardware, the circuits of which understand only 0 and 1 (by detecting either high or low voltage).

The first part of the course will focus on how the computer, at its lowest levels, actually processes information. We'll learn how all information, regardless of its type (textual, numerical, audio, video) is represented in binary. We'll then learn how a computer's circuits can perform fundamental tasks such as adding two numbers or comparing two numbers.

After we've understood enough about the behavior of the computer at is lowest levels, we'll "zoom out" to think about what a person (i.e. programmer) must do in order to have the computer solve a problem. We'll study algorithms, both how to express them and how to understand whether or not an algorithm can produce answers in a reasonable amount of time. We'll do this by investigating algorithms to solve problems such as sorting a list of numbers or searching a list of names for some desired name.

Of course, an algorithm must expressed as a computer program in order for a computer to execute its instructions. Thus, later in the course, we will look at how computer programming languages have evolved to the ones that are in use today. We'll use a modern high-level programming language to learn about both procedural and object-oriented programming, the latter being particularly important in modern programming.

Finally, we'll investigate one of today's hot issues - that of secure communications. We'll study a couple of modern methods for encoding secret messages (an area known as Cryptography). In doing so, we'll understand once and for all that computers DO have limitations, and that this is not necessarily a bad thing!

Grading:

In-class Tests (3 in class - Sep 26th, Oct 31st, Nov 24th) 30% (12-12-6)
Final Exam (Saturday Dec 13th at 9:00AM) 25%
Quizzes 10%
Homework 35%
Tests must be taken at the date and time announced, unless you provide a legitimate excuse prior to the time of the test. Quizzes must be taken when given. Homework will be due about once weekly, usually on a Friday. No homework will be accepted after that Friday. Unless told otherwise, you may work in pairs on your homework.

List Processing Algorithms

A real FUN demo of Linear Search
A real FUN demo of Binary Search
Selection Sort   Insertion Sort and Bubble Sort

Notes

Wednesday Aug 27   Week of Sep 1   Week of Sep 8   Week of Sep 15
Test 1 Study Guide

Week of Sep 29   Week of Oct 6
Wed Oct 15   Fri Oct 17   Mon Oct 20   Fri Oct 24
Test 2 Study Guide (Download)
Wed Nov 5

JavaScript Worksheet Downloads

Oct 15   Oct 17   Oct 22
Play a game of craps   Simulate MANY games of craps
Wed Nov 5   Fri Nov 7
Nov 10 Sequential Search
Nov 12 Binary Search
First Pass of Selection Sort
The Completion of Selection Sort!
Some Practice Problems for Test 3
Test 3 info
Exercises for the Last Day of Class

Homework

Homework 1 Due Friday September 5th
Homework 2 Due Monday September 15th
Homework 3 Due Friday September 19th
Homework 4 (to be done in class Mon Sep 22nd)
Homework 5 Due Monday October 6th
Homework 6 Due Friday October 10th
Homework 7 Due Monday October 20th
Homework 8 (DOWNLOAD) Due Tuesday October 28th at 5PM
Homework 9 (DOWNLOAD) Due Friday November 7th at 3PM
Homework 10 (DOWNLOAD) Due Monday November 17th at 5PM
Homework 11 Due Friday November 21st
Homework 12 (DOWNLOAD) Due Friday December 5th
Homework 13 (optional) Due Saturday Dec 13th at 9AM

Solutions to Recent Homework

Homework 8 (DOWNLOAD)
Homework 9 (DOWNLOAD)
Homework 10 (DOWNLOAD)

Links

A Scratchpad for doing basic Javascript programming

Our first day attendance experiment as a Javascript program.

Click here for a simulator that allows us to construct circuits that use the logic operations we learned.

Click here to program the VSC-32 in machine language.

Click here to enter a VSC-32 machine language program in hex.

Assembly Language Programming on the VSC-32

A cipher used by Julius Caesar

A Caesar cipher with no word length clues!

A more general substitution cipher

Dr. Koether's RSA Web Site