ICSI 201 - Introduction to Computer Science Syllabus

 

Instructor:        Josh Merlis - jmerlis@bhbl.org

http://www.mrmerlis.com

 

 

 

Term:               Full-Year (September to June)

 

 

 

Location:         Burnt Hills-Ballston Lake High School

 

 

 

Times:              This class meets every other day that school is in session from 11am until 12:20pm.

                        BHBL HS uses a rotating block schedule, whereby students attend a particular class either two or three times per week for 80 minutes each session.

 

 

 

Hours:              Students can come to me for additional help from 2:20pm to 3:15pm Tuesday through Thursday.

                        I can also be reached via email or through the message board on the class homepage.

 

 

 

Grading:          All assignments are worth a particular number of points.  A grade of A-E will be determined by dividing the total number of points earned by the total number of possible points. 
There is no S/U (pass/fail) option – all students will receive a letter grade.  Approximately 50% of the total points will come from programming assignments, with the remaining 50% from quizzes and tests.

 

                        Quizzes and tests will have the students identify errors, write their own blocks of code, as well as evaluate code without the use of a computer. 

 

                        For the programming assignments, 80% of the grade will be for the programming compiling and working successfully.  The remaining part of the grade will be for proper style and documentation.

 

 

 

Attendance:     Attendance is very important.  Missing class should be highly avoided as it is in class where all the material is introduced and demonstrated.  Four missed classes in one semester will result in your grade being lowered by one letter.  If you know you will have an excused absence, let me know in advance and arrange to come Tuesday-Thursday afternoon to make up the class.

 

 

 


Description of the First Semester

 

This is an introductory programming course – it assumes no prior programming experience.  For the first six weeks of the course, we will learn the Karel++ language.  This is an introductory language to familiarize you with the syntax of C++, design and programming principals.  Karel is a robot that can be programmed to do many tasks.  It is fun and visual and also allows you to enter C++ at an intermediate level.

 

The beginning of each block will be used to introduce new topics, demonstrate programs, discuss problems, etc.  The majority of class time will be spent on the computers working through a series of assignments.  Each assignment introduces a new concept and builds on previous assignments.  In class, students are encouraged to interact with those seated nearby, helping and asking questions.  Each student is responsible for understanding all material.

 

The remaining half of the first semester will be spent learning the basics of C++, including input and output, repetition and selection structures, as well as our first look at Object Oriented Programming (making a class called Dice.)  The semester ends with a brief look at vectors, which is covered more thoroughly in the second semester.

 

 

 

 

Description of the Second Semester

 

The second semester of the course explores more of the C++ language and also spends a considerable amount of time examining different algorithms popular in computer science.  Some of these topics include working with files and manipulating strings.  We will also learn about many different ways to sort lists and different searching techniques.  Towards the end of the course, we will learn about graphics.

 

 

 

 

Course Goals

 

  • Design and implement programs in Karel and C++           
  • Develop problem solving skills    
  • Become fluent in elementary computer science vocabulary
  • Use an integrated development environment-Metrowerks CodeWarrior and Code Blocks
  • Understand Object Oriented Design and Programming

 

 

 

 

 

 

Textbooks

 

These are provided to the student.  We will begin the year using “Karel++: A gentle introduction to the art of Object Oriented Programming”, by Bergin, Stehlik, Roberts, and Pattis.  Once we begin C++, we will work with Astrachan’s book, “A Computer Science Tapestry. Exploring Programming and Computer Science with C++”.

 

 

 


Outline of the First Semester of the Intro Course

 

UNIT 1: Introduction to Karel

 

PURPOSE: Introduce the concept of Object Oriented Programming in a simple-to-understand way.  Students will learn about the robot as an object and what it can do as its functions. Students will learn about the idea of a class.  They will learn how to comment their programs and we will discuss basic algorithm development.

 

Class #

Topics

1-4

Look at our Karel textbook and demo a Karel program

Experiment with creating worlds and running programs

Use Code Warrior as our IDE – Discuss Style/Documentation (use of comments)

Read through the first two chapters of the text

Complete many of the exercises

5-7

Discuss extending the language by creating our own special Robots (subclasses)

Examine Stepwise Refinement (writing small main functions that call highly specialized functions)

Go over many of the computer science terms we have learned (vocabulary list)

Continue with many of the exercises in the book

8

Karel Quiz and Karel Race using the specialized Robots the students create

 

 

 

UNIT 2: Conditional Expressions and Elementary Recursion in Karel

 

PURPOSE: This unit allows the students to create “smarter” robots by using IF statements.  We will also explore the basics of recursion in navigating certain worlds.

Class #

Topics

9-12

Learn about the IF statement
Using the IF-ELSE structure
Nesting IFs

Read chapter 4 in the text (conditionals)
Solve problems that involve using conditional expressions

12-16

Create a Racer robot that can navigate hurdles and steeples

Read Chapter 5 in the text (repetition)

Learn about looping (loop [equivalent of a for loop] as well as the while)

Examine what causes loops to repeat infinitely (or not execute at all)

Look at the usefulness of recursion to handle situations in which there is an action (or sequence of actions) that must be performed a different number of times depending upon the situation.

Program robots recursively.

17-18

Written and Programming Exams to conclude the Karel Units

 


 

UNIT 3: Introduction to C++

 

PURPOSE: Look at the basic structure of a C++ program.  Learn basic input and output (cin/cout) as well as using the four basic mathematical operators.  Repetition and selection structures, as well as basic functions.

 

Class #

Topics

19-21

Learn the basic structure of a C++ program.

Look at the basic data types and the use of variables

Complete Assignments 1a and 1b

 

22-25

Writing our own functions

Using IF statements

Random Number Generation

The SWITCH statement

For Loops

Assignments 2 and 3

 

 

UNIT 4: Class Design

 

PURPOSE: This unit introduces students to creating their own classes.  It is similar to the way in which classes were designed when we used Karel.  We will learn how to do this by creating a “Point” class which represents a point on the coordinate plane.

 

Class #

Topics

26-27

Discuss class design (private data, public functions)

The need for accessors

Develop our Point class

28

C++ Exam: What we’ve learned up to now

Exercise on “What will this for loop do?” (a worksheet in which students must determine the output)

29

Look at the capabilities of the math header file <math.h>

30-32

Create the Dice class

Complete Assignment 4

Learn about <iomanip> à in particular, setw()

 

 

UNIT 5: Introduction to Vectors

 

PURPOSE: To expose students to data storage through the use of vectors.

Class #

Topics

33-35

Learn vector basics

Note Sheet #5 à Complete the labs on the note sheet

36-39

Working with vectors of string objects

Look at removal and insertion

39-40

Review for Final

Final Examation

                               


Outline of the Second Semester of the Intro Course

 

UNIT 1: Vectors, Arrays, and Classes

 

PURPOSE: Use vectors to store objects from classes we create, specifically focusing on our Point class.  Understand the helpfulness of inline functions.  Learn about arrays.

 

Class #

Topics

1-3

Learn about flow-charts to represent the flow of a program

Lab 1: Populating and computing statistics on a vector of Points

4-7

Inline functions

Using arrays to represent tables/grids (2d)

Labs 2 and 2a

Use a vector of string objects to create a crossword puzzle on a 2d grid of characters

 

 

UNIT 2: Streams – File I/O – String Basics

 

PURPOSE: Learn how to read and write from files.  Examine the functions of the string class.

 

Class #

Topics

8-9

Note Sheet 3 – Populating a vector with cin

Write a program to input some indefinite (greater than 5 less than 10) number of words. Store them in a vector. Resize the vector. Print them out, one per line. Use functions calls and a short main program.

 

10-12

Note Sheet 4 – Reading and writing from files

Complete Assignment 4

13-14

Note Sheet 7 – String Manipulation (look at the string functions)

Complete Assignment 7

 

 

UNIT 3: Searching Techniques

 

PURPOSE:  Students will learn about linear and binary searching.

 

Class #

Topics

15-16

Note Sheet 5 – Searching Techniques

Using a linear search to examine a vector of words

Complete Assignment 5

17-18

Note Sheet 6 – The Binary Search

Understand how it works (requires a sorted list)

Discuss how many comparisons are necessary (an elementary look at Big O notation)

 


 

UNIT 4: The Dictionary Class

 

PURPOSE:  To expose the students to a practical application of vectors, strings, and searching on a large-scale.

 

Class #

Topics

19-20

Begin the dictionary class (generate the header file together)
Students will create the implementation file

21-22

Assignment 6 – Searching the dictionary using a binary search

23-24

Note Sheet 8 – ASCII

Work with ASCII characters

Complete Assignment 8 (adding additional functions to our dictionary class)

25

Note Sheet 9 – Utility Classes

Assignment 9 – Creating a utility class for word games (we will make a word scramble)

26-28

Word Games – Students will create a game with my approval and program it.

29

Exam on the Dictionary Unit

 

 

UNIT 5: Algorithm Design in Teams

 

PURPOSE:  To get the students to work together to develop a solution to a problem.  They will have to write a program that will unscramble words, comparing their permutations with the vector of actual words.

 

Class #

Topics

30

Note Sheet 10 – Algorithm Design

Discuss the steps necessary, create the teams.

31-33

Design, outline, and create the program.

34

Quiz on the project.

Show off our programs and discuss how we solved the problems.

 

 

UNIT 6: Sorting Techniques

 

PURPOSE:  To have the students learn and understand the different sorting algorithms that exist. Students will also learn more about the idea of Big O (algorithm efficiency.)

 

Class #

Topics

35-36

Note Sheet 11 – Sorting

Discuss bubble sort, insertion sort, merge sort

Begin Assignment 11: Sorting/merging a vector contain strings

37

Finish Assigment 11

Look at the quick sort

38-40

REVIEW

Vectors and arrays

Classes

Strings

Searching

Our dictionary program/algorithm design

Sorting