Project 1 Solution
Assignment Due Date % Final Grade
Homework 1: Thinking about Algorithms Jan 16, before class. 3%
Homework 2: Compiling and Submitting Programs Jan 23, before class 4%
Project 1 Design
Project 1 Solution
Jan 30 3%
Project 1
Feb 6 5%
Project 2 Design Feb 13 3%
Project 2
Project 2 Solution
Feb 20Feb 25 6%
Midterm Exam Mar 6, in class 25%
Project 3
Project 3 Solution
Mar 20Mar 25 8%
Project 4
Project 4 Solution
Apr 8 8%
Project 5 Apr 24 10%
Final Exam May 5th, 2014, 12:30-2:30PM (subject to change, check Registrar, location TBD) 25%

Chapter Sections Due Date (if any)
1 1, 2, 3, 4, 5, 6, 7
2 1, 2, 3, 4, 5
3 1, 2, 3, 4, 7, 8
4 1, 2, 3, 4, 5, 7, 8
5 1, 2, 3, 4, 5, 6 (before midterm), 7, 8, 9 (after midterm)

## Instructor, TA, and Course Information

Please see the Blackboard calendar for the times you can see TAs.

• ### Instructor

Clay Shields
Office: 323 St Mary's Hall
Office Hours: Tuesday/Thursday 1:20 - 3ish, likely later
Contact information here.
• ### Teaching Assistants

• See Blackboard calendar for TA office times
• ### Course Information

Description:
Although intended for computer science majors and minors, other students with a serious interest in learning C++ programming may take this class. Topics include: basic data types; the C++ string class; variables, constants, and their declarations; input/output (cin/cout), assignment, and arithmetic operators; conditional and repetition control structures; basic file operations; programmer-defined functions; value and reference parameters; scoping rules; name precedence; function and operator overloading; template functions; elementary software engineering principles; the Standard Template Library (STL); the vector class; elementary searching and sorting; abstract data types; programmer-defined classes; pointers; self-referential classes; dynamic object creation and destruction; stacks and linked lists; recursion; abstract base classes; virtual functions; polymorphism; template classes; and exception handling. This course will satisfy the college science requirement, and how. Prerequisite: none.

## Resources

• Textbook
The textbook for this class is C++ for Everyone, Second Edition . You will need a copy of this book as there will be assigned readings.
• Tutorials
The official class system is a Unix system. There will be help sessions in the third week of class on how to use cs-class. We also have a number of tutorials available to help you with the system.

• Unix information: For most of you, working on Unix will be odd. There is no graphical interface; you will need to type commands to make things happen. Here are some references to help you find useful commands.

• Editing on Unix: You can use a variety of different programs to edit your code. The easiest to learn is called nano, and I recommend you start with that.

If you plan on doing lots of CS work, I think you should learn emacs. While vi is more widely available than emacs and is smaller and faster to load, but emacs is far more customizable and powerful, can load specific modes that help you with the type of file you are editing, and can include other useful functionalities like web browsing and email. Emacs is probably harder to learn because it does so much more, but once you have mastered it, it is a power tool. It can even emulate vi!

There are other Unix editors that you can choose to learn as well. The most common is vi, which is installed on many Unix systems. Many people swear by its simplicity, others curse its primordial interface. I am in the

• Putting it all together: Professor Maloof created this tutorial which shows how to edit and compile a program on Unix.

• Software
• Remote Connection Software: Even if you use one of the compilers listed below, you will have to make sure your code works on cs-class.cs.georgetown.edu, since that is our reference platform and gets backed up regularly. The software below will allow you to log into cs-class.cs.georgetown.edu and transfer files back and forth.
• SSH terminal and file transfer client for Windows. You can use this to both long in and transfer files over an encrypted connection. I recommend this highly and use it regularly myself.
• For Mac, you can open the Terminal program under /Applications/Utlities, and use ssh from the command line there. For file transfer, you might want to use Cyberduck.
• For linux, open up that terminal window and use ssh and scp
• Compilers: These programs allow you to edit and compile programs on your computer.

## Policies

All my courses are run under the same set of policies which are available here. Students are expected to read and understand these policies. You can also read the Honor Council site.