COSC110 Computer Science I
Spring 2014
Instructor: Robert Lowe
Email:
[email protected]
Office: SSC 214
Office Hours: M 10:00AM - 11:30 AM; 1:00PM - 1:50PM
T 9:00AM - 10:50AM
R 1:30PM - 4:00PM
F 10:00AM - 11:30AM
Class Meetings: MW 2:00PM - 4:15PM SSC 204
Gopher Site:
gopher://sdf.org/1/users/pngwen/courses/cs1
Introduction and Goals
======================
This course is an introduction to the topic of computer science.
The goals for this course are as as follows:
- Gain proficiency with the algorithms
- Gain proficiency with the C++ programming language
- Introduce software development and computer science skills
The main thing I want to convey in this class is how to think about
computer science. This is not just a course in computer
programming, this is intended to be a foundation for the exploration
of a very vast and rewarding field!
Recommended / Compatible Texts
==============================
- C++ For Everyone by Cay Hortsmann 2nd Edition
ISBN: 978-0-470-92713-7
- Problem Solving with C++ by Walter Savich 8th Edition
ISBN: 978-0-132-16273-9
Recommended Reference Texts
===========================
- The C++ Programming Language by Bjarne Stroustrup 3rd Edition
ISBN: 978-0-201-88954-3
Grading
=======
Midterm Exam 10%
Final Exam 10%
Guided Labs 30%
Self Labs 50%
Expectations
============
In order to succeed in this course, I expect you to:
* Strive for perfect attendance. We will be doing many hands on
activities, and if you miss these, there is no way to get the
experience back!
* Turn in all assignments on time. No individual extensions will
be given under any circumstances. If you ever find that you
won't complete an assignment, turn in as much as possible. Any
credit is better than 0!
* Attend every exam. Exams times will be announced at least 1
week in advance. If you cannot be present for an exam, you must
make arrangements with me BEFORE the exam class meeting. Failing
to attend an exam, without prior permission, will result in an
exam grade of 0.
* Ask lots of questions! If you are confused about something,
then I there is probably someone else in the same boat.
Education works best if it's a dialog. Otherwise, you might as
well just record me and play my lectures over and over. You're
paying top dollar to be in a room with a live professor. Avail
yourself of the opportunity and talk to me.
* If you get stuck, visit me during office hours. At the very
least, email me. If you tell me that you are stuck early on, I
can get you unstuck and help you complete your assignments.
* Work together, but do your own work! I don't mind if you bounce
ideas off of each other. That's actually a good thing, but be
sure to write your own code.
* Don't try to find solutions on the Internet. For starters, my
labs are weird enough to be difficult to find drop in code.
Also, if you plagiarize code, I'm very good at picking up on
that. If you do this, you will get an irrevocable 0 on the
assignment, and you will possibly be reported to the dean. Just
don't do it!
* Explore and have fun! This class will cover a lot of ground,
but nothing can replace the experience of simply tinkering with
code. Write lots of programs, think up things you want to make
a computer do and try it. You'll stumble a bit, but you'll come
out a much stronger programmer for your pains!
Content Outline
===============
1. Introduction to CS and Computing
1.1 Definition of Computer Science
1.2 Pseudocode and Algorithms
1.3 Overview of Programming Languages
1.4 The UNIX command line environment
2. Introduction to C++
2.1 Basic Program Structure
2.2 The C++ Compilation Process
2.3 Variable Types
2.4 Operators
3. C++ Basics
3.1 Invoking Functions
3.2 Best Practices
3.3 Block Structure
3.4 Introduction to Flow Control
4. Flow Control
4.1 Definition of Truth
4.2 Branching with If
4.3 Branching with Switch
4.4 Designing Algorithms With Branches
4.5 Introducing Repetition Structures
5. Flow Control
5.1 Loop Basics
5.2 Precondition Loops
5.3 Post Condition Loops
5.4 Loop Control Strategies
5.5 Designing Algorithms with Loops
5.6 Introduction to Runtime Analysis
5.7 GOTO: A privelege, not a right
6. Building Abstractions
6.1 Procedure Oriented Thinking
6.2 Modular Decomposition
6.3 Designing With Procedures
6.4 Function Syntax
7. Functions
7.1 Using Functions in C++
7.2 Recursive Functions
7.3 Recursive Problem Solving
7.4 Evaluating Recursive Runtime
8. Functions & File I/O
8.1 Finishing up Functions
8.2 Introduction to Objects
8.3 Streams as Objects
8.4 Interacting with Files
9. Arrays
9.1 Memory and Addressing
9.2 Single Dimensional Arrays
9.3 Multiple Dimensional Arrays
9.4 Memory Organization of Arrays
10. Arrays, Pointers, and Strings
10.1 Arrays and Pointers
10.2 Array Sorting
10.3 C Strings
10.4 C++ String Objects
11. Pointers, Structures, and Classes
11.1 Advanced Pointer-Fu
11.2 Using Structures
11.3 Designing Classes
11.4 Pointers to Structs and Classes
12. Designing Classes
12.1 Introduction to Object Orient Analysis and Design
12.2 Pseudocode and Classes
12.3 Best Practices in Class Design
12.4 Examples in OOP
13. Dynamic Memory & Introduction to Data Structures
13.1 Allocating and Deallocating Memory
13.2 Dynamic Allocation and Arrays
13.3 Correct Dynamic Allocation of Multidimensional Arrays
13.4 An Inefficient Dynamically Resizeable Array
14. Data Structures & Some Advanced Language Features
14.1 Linked Lists
14.2 ListNode Class
14.3 List Container Class
14.4 Introduction to Templates
14.5 Exception Handling
15. Final Exam