Lecture | Office Hours | ||
Time: | MWF 12:10-1:00pm | Time: | M 1:10-2:30pm | W 11:00-11:50am | F 10:00-10:50am | (Or by appointment) |
Room: | 205 Carver Hall. | Office: | 416 Carver |
Teaching Assistants: (Office Hours in Pearson 0145) | |||
Yalin Ke | yke@iastate.edu | Office Hours: | TR 1:00-3:00pm |
Jucheol Moon | moon@iastate.edu | Office Hours: | MW 11:00am-12:00pm, TR 11:30am-12:30pm |
Priyangika Piyasinghe | rumesh@iastate.edu | Office Hours: | T 9:30-10:30, F 11:00-12:00 |
Guolei Yang | yanggl@iastate.edu | Office Hours: | TR 4:00-5:00pm |
Syllabus |
This course will guide students to build fluency in a new programming language and expand their understanding of a computer's inner workings. At the end of the course, students should be able to
Students will plan an implement significant software projects from basic requirements.
Object-oriented programming experience using a language suitable for exploring advanced topics in programming. Topics include memory management, parameter passing, inheritance, compiling, debugging, and maintaining programs. Significant programming projects.
The first half of the course will cover the C programming language and the second half will cover C++.
During lecture, we will be writing example code together. It is expected that you bring a laptop or other computer device to class in order to follow along.
A laptop with full keyboard would be most appropriate, but if you have a tablet (such as an iPad) you can download an SSH app and use that to log in to pyrite.cs.iastate.edu and do development on that machine.
There will be two projects in this course, one in C and one in C++.
Project 1: Project 1 Web Page Project 1.A SpecificationThese are individual projects spanning several weeks. Start Early! Starting on a project the weekend before the due date is a common way to fail (or drop) this course.
Your code will be tested on one of the department's Linux machines, probably pyrite.cs.iastate.edu. Your code must compile and run correctly on this machine. Code that does not compile may receive a grade of zero points! The projects will require one or two thousand of lines of code to implement (give or take; your mileage may vary). These should be organized into more than one source file, with the appropriate supporting documentation (a README file). Part of your grade will be on programming style: code should be legible and well-documented.
You must use a Makefile
, so that all your executables may be built by simply typing make in the shell.
You are responsible for understanding the project specifications. These are written in natural language (English), and may be vague or contradictory (it is not easy to describe what a thousand lines of code should do). There will be an online discussion forum for the course, where students may clarify any questions about the specifications. (This is another reason to start early.)
Grade Breakdown The course grade will be based on two projects, one in C and one in C++ (25% each), three in-class exams (10% each) and the final exam (20%). Your final exam score can replace your lowest in-class exam score (and hence no make-up exams will be allowed).
Letter Grades The overall letter grade for the course is assigned based on the weighted total score, and a curve decided at the end of the semester. The classic ten-point scale gives you a lower bound on your grade: if your overall score is 0.90 or above, then you are guaranteed a grade of A- or higher; if your overall score is 0.80 or above, then you are guaranteed a grade of B- or higher; etc. Historically, letter grades have been shifted in favor of the students.
Late Policy Items turned in within 24 hours of due date will receive 75% credit. Items turned in within 24 and 48 hours will receive 50% credit. Items turned in later than 48 hours after the deadline will receive no credit.
M 01/13 | Course Syllabus, Introduction to Unix, The Unix Command Line. |
W 01/15 | Unix shell redirection and pipes. Getting started with C, Hello World!, Basic Input/Output. |
hello.c fibonacci.c | |
F 01/17 | Slightly less basic C, structs, functions, prototypes. |
meet.c | |
M 01/20 | Holiday: MKLjr. Day. |
W 01/22 | The History, Philosophy, and Features of C. Comparisons to Java. |
F 01/24 | Stages of the compiler, organizing source code files, Makefiles. |
tttboard.h tictactoe.h tictactoe.c ttt.c Makefile | |
M 01/27 | Project 1.A, Command-Line Arguments. |
arg.c | |
W 01/29 | File I/O, Types. |
copy.c filetest.c.txt (NOT COMPILABLE!) | |
New: types.c (See this link for more information) | |
F 01/31 | Arrays, malloc and free . |
array.c | |
M 02/03 | realloc , Memory management for structs, pass-by-value, -reference, and -pointer. |
real.c stringstruct.h string.c | |
W 02/05 | Project QA, C Programming QA, Arrays of structs. |
structarrays.c Makefile | |
F 02/07 | Debugging with valgrind and gdb . |
Buggy Code: knapsack.tar.gz | |
Corrected Code: knapsack-fixed.tar.gz | |
M 02/10 | Header file best practices, operators in C. |
Buggy Code: people.tar.gz freeerror.c | |
Fixed Code: people-fixed.tar.gz operators.c | |
W 02/12 | Bit-wise Operators, C String Library |
Incomplete Code: optest.c | |
Finished Code: optest-finished.c increment.c | |
F 02/14 | Exam 1 |
M 02/17 | Project 1B discussion, string manipulation with pointer arithmetic. |
Code: words.c | |
W 02/19 | Exam 1 returned. Exercise: parens. |
F 02/21 | Extras from C. |
Code: pixeltest.c | |
M 02/24 | Self-referential structs, linked list. |
Code: linkedlist.h linkedlist.c | |
W 02/26 | Linked lists with void* values, Function pointers. |
Code: linkedlist.h linkedlist.c | |
F 02/28 | More on function pointers, super-awesome Makefile. |
Code: error.c fibonacci.c linkedlist.c linkedlist.h matrices.c | |
Code: A Generic Makefile | |
M 03/03 | C++ : History, Philosophy, Features, Non-Features. A basic "Hello, World!" |
W 03/05 | C++ Object-Oriented I/O. Pass-By-Reference. |
Code: hello.cpp copy.cpp testoutput.cpp sort.cpp reftest.cpp | |
F 03/07 | C++ Class by example: String. |
Code: String.hpp String.cpp Makefile (Makefile is for 03/10 lecture) | |
M 03/10 | C++ Using classes, new , delete , copy constructors, operator overloading. |
Code: String.hpp String.cpp stringtest.cpp Makefile | |
W 03/12 | Project 1B Questions, Exam 2 Review, Project 2 Sneak-Peek. |
F 03/14 | Exam 2. |
SPRING BREAK | |
M 03/24 | Project 2 discussion, Graphs, Directed Graphs, Paths, and Breadth-First Search. |
W 03/26 | Inheritance and polymorphism in C++, the virtual keyword, multiple inheritance. |
Code: Tarball | |
F 03/28 | Project 1B grades, Exam 2 grades, Group Discussion. |
M 03/31 | A very brief intro to the Standard Template Library |
Code: Tarball | |
W 04/02 | Interfaces and Abstract Classes in C++, const functions. |
Code: interfacefail.tar.gz abstract.tar.gz | |
F 04/04 | Template Classes. |
Code: 0404.tar.gz | |
M 04/07 | Template Functions. |
Code: 0407.tar.gz | |
W 04/09 | Lab Day for Project 2A. |
F 04/11 | Exceptions, try , catch . |
Code: 0411.tar.gz | |
M 04/14 | Project 2A Post-Mortem. |
W 04/16 | Namespaces, Nested Classes, and Friends. |
F 04/18 | Exam 3 |
M 04/21 | Snapshot of the Future: Design Patterns. |
W 04/23 | Snapshot of the Future: Algorithms and Complexity. |
F 04/25 | Snapshot of the Future: Applications of Reachability. |
M 04/28 | Lab Day. Work on Project 2B. |
W 04/30 | Project 2B Due. Snapshot of the Future: Algorithms and Complexity. |
F 05/02 | Project 2B Post-Mortem. |
To reach the instructor, send an email to dstolee [at] iastate [dot] edu with "229" somewhere in the subject heading. By placing 229 in the subject heading, it helps me organize the emails so that I can be sure to respond within 2 business days.
Email is a professional, written communication medium and thus what you write in an email is part of the official record. Please treat every email as if it were a graded assignment.
If you are looking to gain more practice in the art of computer programming, then you can start exploring the wide open world of programming! By fulfilling quests, you can build your skills in the necessary areas for becoming a great warrior programmer.
Visit the Programming Skills Builder webpage for more details.
Follow @proskillbuilder for updates.
Debugging
valgrind Quick Start
gdb
gdb Tutorial
Debugging with gdb
Libraries
Printf Reference
C Programming Tutorials
C Types on Pyrite
C Tutorial from CProgramming.com
C Tutorial from B. W. Kernighan
ISU Computer Science Technology Services
Pyrite Account Request Form
Frequently Asked Questions: Account Information
SSH Tutorial (for accessing pyrite.cs.iastate.edu)
X Forwarding Tutorial (for using X windows on your computer)
Tech Support Main Page (for any other questions)
Unix
Unix Commands
Unix Tutorial
Linux Command Reference (ISU)
VI tutorial
Emacs Tutorial
Pico commands
Academic Dishonesty The class will follow Iowa State University's policy on academic dishonesty. Anyone suspected of academic dishonesty will be reported to the Dean of Students Office.
Disability Accommodation Iowa State University complies with the Americans with Disabilities Act and Sect 504 of the Rehabilitation Act. If you have a disability and anticipate needing accommodations in this course, please contact (instructor name) to set up a meeting within the first two weeks of the semester or as soon as you become aware of your need. Before meeting with (instructor name), you will need to obtain a SAAR form with recommendations for accommodations from the Disability Resources Office, located in Room 1076 on the main floor of the Student Services Building. Their telephone number is 515-294-7220 or email disabilityresources@iastate.edu . Retroactive requests for accommodations will not be honored.
Dead Week This class follows the Iowa State University Dead Week policy as noted in section 10.6.4 of the Faculty Handbook.
Harassment and Discrimination Iowa State University strives to maintain our campus as a place of work and study for faculty, staff, and students that is free of all forms of prohibited discrimination and harassment based upon race, ethnicity, sex (including sexual assault), pregnancy, color, religion, national origin, physical or mental disability, age, marital status, sexual orientation, gender identity, genetic information, or status as a U.S. veteran. Any student who has concerns about such behavior should contact his/her instructor, Student Assistance at 515-294-1020 or email dso-sas@iastate.edu, or the Office of Equal Opportunity and Compliance at 515-294-7612.
Religious Accommodation If an academic or work requirement conflicts with your religious practices and/or observances, you may request reasonable accommodations. Your request must be in writing, and your instructor or supervisor will review the request. You or your instructor may also seek assistance from the Dean of Students Office or the Office of Equal Opportunity and Compliance.
Contact Information If you are experiencing, or have experienced, a problem with any of the above issues, email academicissues@iastate.edu.