Computer Science 1
Clay Shields, Department of Computer Science, Georgetown University
Assignments, Exams, and Readings
Assignment | Due Date | % Final Grade |
---|---|---|
Homework 1: Thinking about Algorithms | September 15, 2010 | 3% |
September 22, 2010 | 4% | |
Project 1 Design | September 27, 2010 | 3% |
Project 1 Project 1 Solution |
October 4, 2010 | 6% |
Project 2 Design | 3% | |
Project 2 Project 2 Solution |
October 18, 2010 | 6% |
Midterm Exam | October 20, 2010 | 20% |
Project 3 Project 3 Solution |
10% | |
Project 4 Project 4 Solution |
10% | |
Project 5 Project 5 Solution |
Assigned November 22nd, 2010 December 8th, 2010 | 10% |
Final Exam | 12:30 - 2:30 December 15th, 2010 | 25% |
Instructor, TA, and Course Information
Times you can get help
Time Monday Tuesday Wednesday Thursday 12 Lindsay (12 - 1) Lindsay (12 - 1) 12:30 1 Allie (1:15- 2) John (1 - 3) 1:30 Allie (1:30 - 4)
Clay (2 - 4)2 Brian (2 - 4) Brian (2 - 4) 2:30 3 3:30 4 Lindsay (4 - 6) 4:30 5 5:30 John (5:30 - 6:30) 6 Instructor
Clay Shields
Office: 323 St Mary's Hall
Office Hours: Tuesday, 2 - 4 and by appointment
Contact information hereTeaching Assistants
- Allie Candido
Office Hours: Tuesday 1:30 - 4, Wednesday 1:15 - 2 - Brian Miller
Office Hours: Monday 2-4, Wednesday 2-4 - John Bufe
Office Hours: Monday 5:30-6:30, Thursday 1-3 - Lindsay Neubauer
Office Hours: Tuesday 12-1, Wednesday 4-6, Thursday 12-1
- Allie Candido
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 "Starting out with C++, Early Objects, 7th edition" by Gaddis, Walters, and Muganda. Most material will be given in lecture, but this is a useful supplement. Will the 6th edition do? Probably, but I haven't seen it. Problems from the book will not be given for grades, but specific problems will be listed as being useful for exam study. - Accounts
Later in the semester you will be given an account on a server named seva.cs.georgetown.edu. This will be the official machine for programming assignments. You can work on your own computer, but your code must work on and be readable on seva. - Tutorials
The official class system is a Unix system. There will be help sessions in the third week of class on how to use seva. Additionally, you might want to sit in on COSC-317 Unix for Non-believers, particularly if you are a CS major. This is a 1 credit hour, pass/fail course. 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.
- nano cheat sheet
- nano information
- small nano tutorial
- nano is very similar to pico, and you might try a pico tutorial
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 seva.cs.georgetown.edu, since that is our reference
platform and gets backed up regularly. The software below
will allow you to log into seva.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.
- Code::Blocks This is a compiler and editor that should work on either Windows or Linux. Please note that the main download site is in Germany and can be slow. I have therefore posted a copy here.Local copy of Code::Blocks
- Apple XCode: For you lucky ones who have a Mac with OS X. You can download it for free from Apple after a free registration. This is what I use for developing the projects.
- If you are running linux, you can just use GCC as described in the tutorials for seva.cs.georgetown.edu. It should be installed natively with the OS.