Bryn Mawr College
CS 246: Introduction to Computing
Spring 2016

General Information Syllabus and Schedule Text and Software
Course Policies
Reference Links

Last modified: Mon Apr 25 23:09:24 EDT 2016 Subject to change.


General Information
 

Instructor: David G. Cooper
E-Mail: dgc@cs.brynmawr.edu
When you e-mail me, make sure you put "CS246" at the start of the subject line to ensure a quicker response.
Website: http://cs.brynmawr.edu/Courses/cs246/spring2016/
Lecture:
Tuesdays & Thursdays, 11:25AM - 12:45PM
Room: Park 336
Lab: Tuesdays & Thursdays, 10:25AM - 11:25AM, Park 231 (Computer Science Lab)

Text & Software
 

Professional C++, Third Edition, by Marc Gregoire, John Wiley & Sons, Inc., 2014. Available at the Campus Bookstore. Also at Amazon for $36 in paperback, and $27 on kindle.

We'll be using Mercurial, gcc, make, gdb, and a code editor like emacs or vi.

 

Syllabus and Schedule
 

Course Description: Programming in UNIX and C++. Provides an in-depth introduction to C and C++, as well as programming principles such as abstraction, encapsulation and modularization. Another focus of the class is to gain proficiency in the UNIX operating system. Assumes familiarity with conditionals, loops, functions and arrays and will focus on C++-specific topics such as pointer manipulations, dynamic memory allocation and abstract data types. An excellent preparation for classes such as operating systems and software engineering principles and programming techniques to facilitate medium-scaled development projects.
Important Dates

Projects:

Below is a list of programming projects that will be handed in.
  1. Project #1: chars and loops
  2. Project #2: functions and program design (24 game)
  3. Project #3 (Due Tue. Feb. 23,2016): pointers and arrays
  4. Project #4 (Due Thu. Mar 17): Midterm (OpenCV)   FAQ
  5. Project #5: Predator Prey
  6. Project #6: Baby Names
  7. Final Project Option: Texas Hold'em (In lieu of your own)

Schedule (subject to change, check back for updates)
 

Week Date Topic

Reading Completed
(by beginning of class)

Projects

Comments

1

01/19

Lab: Mercurial and Hello, Graphics!
________________________________
Lecture: Introduction



______________
Note: Corrected version of the lab is now available here along with the Lab Exercise needed for the final part of the lab.

01/21

Lab: Mercurial and Hello, Graphics!
Lecture: Java vs. C++
Ch. 1 pgs. 3-24,
Ch. 2 pgs 47-55
______________
Lab is due with all files pushed to your repository by Sunday at midnight.
Work from home:
Windows how to.
Mac X11 client.

2

01/26

Lab: Unix Commands
Lecture: Java vs. C++ Part 2

For lab:Pair Programming
______________
Ch. 12 pgs.345-359
Start: Project 1

01/28

Lab: Unix Commands
Lecture: Java vs. C++, Part 3

Ch. 3 Coding With Style



3

02/02

Lab: gdb, Streams, Pipes, and Redirection
Lecture: Arrays and Pointers

c++.com : Arrays
c++.com : Pointers

Submit: Project 1

02/04

Lab:gdb, Streams, Pipes, and Redirection
Lecture: Functions and Pointers

c++.com : Functions

Start: Project 2

Note: pg. 613 of the book talks about srand() and rand() for random number generation for project 2.


Note: There is now an example of using an interface with multiple definitions for the same interface in a zip file called helloLanguages.zip. It is located in /rd/cs246s2016/shared/hw2/exampleInterface Please unzip the file to your local cs246 directory. Take a look at hello.h and hello.cpp. You can also compile hello.cpp with the command g++ -c hello.cpp and it should result in a file called hello.o The README.txt file will explain the rest.

4

02/09

Lab: prototypes, header files, preprocessor directives, cout, and thg
Lecture: Pointers and Memory

Ch. 1 pgs. pgs. 25-30
Ch. 22 pgs 707 - 740

Submit: Project 2 Design (Step 1)
____________________________

02/11

Lab: prototypes, header files, preprocessor directives, cout, and thg
Lecture: Program Design and Testing


  Submit (Feb 15): Project 2, Initial Implementation (Step 3)


5

02/16

Lab: Make and Makefiles
Lecture: Design and Testing Continued


02/18

Lab: Make and Makefiles
Lecture: Smart Pointers

 

  Submit: Project 2, Full Assignment (Step 5)
Start: Project 3


6

02/23

Community Day of Learning (no class!)


Submit: Project 3


02/25

Lab: Revision Wars
Lecture: OpenCV

OpenCV:
------------------------------
OpenCV Mat tutorial
OpenCV Color Reduction tutorial
OpenCV Mask Filter tutorial
OpenCV Blending Images tutorial



7

03/01

Lab: Midterm Description & emacs tips  


 

Start: Project 4, Midterm FAQ  





03/03

Lab: Midterm Q & A





03/08

Spring Break

 



03/10

Spring Break

 

 


8

03/15

Lab: Midterm Q & A
Lecture: Classes and Objects, Writing Large Programs  
Ch. 7 pgs. 143-175


03/17

Lab: Midterm Q & A
Lecture: Dynamic Memory in Objects  

Ch 8: pgs. 177-197

Submit: Project 4, Midterm
Friday Start: Project 5


9

03/22

Lab: Conditional Compilation
Lecture: Inheritance in C++

Ch. 9: pgs. 217 - 237

03/24

Lab: Conditional Compilation
Lecture: Templates and the STL

Ch. 11: pgs. 315-330
Ch. 15: pgs. 443-457


10

03/29

Lab: Final Project Discussion
Lecture: Implementing ADT's

Read ahead for next week.


03/31

Lab: Final Project Discussion
Lecture: Implementing ADT's cont.
Read ahead for next week
Submit: Project 5
Class Code:
BinaryNode.h
CircList.cpp
BinaryTree.h
BinaryTree.t

11

04/05

Lab: Generic Linked List
Lecture: Recursive functions, types, and templates.

Ch 14: pgs. 413-415,423-427
Ch 21: pgs. 685-689

Submit: Final Project Proposal

Start: Project 6


04/07

Class cancelled

Ch 18 pgs. 575-599


 


12

04/12

Lab: Generic Linked List
Lecture: Recursive functions, types, and templates. Regular Expressions

Book:

04/14

Lab: Finish Up Lab/Work on Final Project
Lecture: Regular Expressions


Submit: Project 6

Note: If you haven't chosen a final project. I have created this option which you must do with a group. Please send me a list of group members and their responsibilities before class on Tuesday.

13

04/19

Lab: Baby Name Regex or GUI Tutorials
Lecture: Odds and Ends: Multi-process/thread communication, Balancing Binary Trees

Book:



04/21

Lab: (Baby Name Regex and Baby Name Histograms); or (GUI Tutorials and Drawing GUI)
Lecture: Odds and Ends cont.

Book:  

 

14

04/26

Lab: Baby Name Histograms or Drawing GUI
Lecture: Term Project Presentations

Book:


04/28

Term Project Presentations
 

Submit: Final Project Skeleton (needs to compile and run)


FINALS WEEK

05/03

 

 

Final Projects Due May 7, at 5pm for Seniors and May 13, at 12:30pm for everyone else in a Mercurial Repository called finalProject


 

 




Course Policies
 

Communication

Attendance and active participation are expected in every class. Participation includes asking questions, contributing answers, proposing ideas, and providing constructive comments.

As you will discover, I am a proponent of two-way communication and I welcome feedback during the semester about the course. I am available to answer student questions, listen to concerns, and talk about any course-related topic (or otherwise!). Come to office hours! This helps me get to know you. You are welcome to stop by and chat. There are many more exciting topics to talk about that we won't have time to cover in-class.

Whenever you e-mail me, be sure to use a meaningful subject line and include the phrase "CS246" at the beginning of that line. Your e-mail will catch my attention and I will respond quicker if you do this. I make an effort to respond to e-mails within 24 hours on weekdays and 48 hours on weekends.

Although computer science work can be intense and solitary, please stay in touch with me, particularly if you feel stuck on a topic or project and can't figure out how to proceed. Often a quick e-mail, phone call or face-to-face conference can reveal solutions to problems and generate renewed creative and scholarly energy. It is essential that you begin projects early, since we will be covering a variety of challenging topics in this course.

Grading

At the end of the semester, final grades will be calculated as a weighted average of all grades according to the following weights:

Labs & Class Participation: 25%
Predefined Projects: 35%
Midterm Project: 15%
Final Project: 25%
Total: 100%

Incomplete grades will be given only for verifiable medical illness or other such dire circumstances.

Submission and Late Policy

All work must be turned in electronically using mercurial and our course directory. The use of mercurial will document the time and date of submission.  Extensions will be given only in the case of verifiable medical excuses or other such dire circumstances, if requested in advance and supported by your Academic Dean.

Late submissions will receive a penalty of 20% for every 0-24 hours it is past the due date and time (e.g., assignments turned in 25 hrs late will receive a penalty of 40%).

Exams

In lieu of exams this class will have a midterm and a Final Project. The final project will involve integrating an open source project into your project.

Study Groups

We encourage you to discuss the material and work together to understand it. Here are our thoughts on collaborating with other students:

If you have any questions as to what types of collaborations are allowed, please feel free to ask.


Links
 

Reference Links These references will be useful throughout the semester: