\documentstyle{article}

\begin{document}

\title{Syllabus for ``Introduction to Programming in C''}
\author{SP 299}

\maketitle

\section{Generic Stuff}

\begin{itemize}

\item INSTRUCTOR:  Thomas Colthurst (thomasc@mit.edu).

\item TAs: Adrian Banard (inki@mit.edu) and Morris Matsa (mematsa@mit.edu).

\item TEXT: ``C:  How to Program'' by Deitel and Deitel.  Available at the Coop.

\item LECTURES:  Tuesdays and Thursdays from 4 to 5:30 in room 1-390.

\item ASSIGNMENTS:  All assignments will be due on a Friday.  Depending on the
week, either a programming assignment or a written homework assignment
will be due.  Written homework assignments should be put into the box of your
recitation instructor by 5 pm.  Turning in a programming assignment has two parts:
first, you must demonstrate your program to a TA during one of the computer
lab sessions.  Immediately after this demonstration, you must email your
program's source code to your recitation instructor.  Note that you will
receive two grades for your program:  one based on the correctness of its
execution and another based on the quality of its source code.

All programming assignments must compile under gcc and run on athena.  You
can develop, write source code, and debug on whatever computer system you
like, but you will be graded on whether it works under athena/gcc.

\item RECITATIONS:  Each of you will be assigned a recitation instructor.
Recitation sections will meet once a week to discuss homework problems,
programming assignments, and lecture topics.  They are not mandatory.

\item COMPUTER LAB SESSIONS:  These are just times when we have reserved
the electronic classroom for you to work on your programming assignments.
On Wednesdays and Fridays, one or more TAs will be there to answer your
questions, help you debug, and grade your programs.

We have scheduled the computer labs to be held in room
1-115 from 7 to 9 pm on Mondays, Wednesdays, and Fridays.

\item CREDIT: You have the option of taking this class for 6, 9, or 12
credits.  Taking it for 12 credits entails doing all the assignments
and taking the final.  Taking it for 9 credits means you don't have to
do the written homeworks and you don't have to take the final.  Taking
it for 6 credits can only be done pass/fail and means just doing the
written homeworks.  Of course, you are always free to do more work ...

\item HOMEPAGE:  http://www.mit.edu:8001/people/thomasc/prog/ is the official
class home page.  Check it out for online versions of class documents,
lectures, problem sets, and the like.

\item OTHER USEFUL BOOKS.  These are some other books you might find useful
as you increase your knowledge of C and C++.  All are available from
the Coop, Quantum Books, and Baker Library. 
\begin{itemize}
\item  Kernighan, B. W. and D. M. Ritchie, {\em The C Programming Language}
(Second Edition), Englewood Cliffs, NJ:  Prentice Hall, 1988. 
\item  Stroustrup, B.  {\em The C++ Programming Language} (Second Edition),
Reading, MA:  Addison Wesley, 1991.  
\item Stroustrup, B.  {\em C++:  The Annotated Reference Manual}.
\end{itemize} 

\item ACADEMIC HONESTY.  You should be the sole author of all programs and
homework that you turn in for this class.  If it is determined that you
have copied (either electronically or manually) someone else's
work, you will automatically fail this course and we will give your name
to the Dean's and all sorts of bad things will happen.

Some clarifications:  For the final team programming project, all of the
above paragraph still applies, just with the word ``you'' replaced with
``your team.''  You are allowed to talk with your classmates and others
about your assignments, just as long as you (a) credit them appropriately
[e.g., write ``I talked to Leslie Lamport about Problem 4'' on your homework
or ``/* the algorithm in this function is based on an idea of 
Alfred Aho's */''], (b) do your write up [no copying!], and (c) understand
everything you turn in.

For more clarifications or grey situations, consult your TAs and instructor.
 
\end{itemize}

\section{Schedule of Classes and Assignments}

[All dates listed below for assignments are the assignment's DUE DATE.]

\begin{itemize}
\item Feb. 6: What Programming Is (The Art \& Science of Giving Directions)
\item Feb. 8: How Your Computer Works (CPU, RAM, Bus, Devices)

Reading:  Chapter 1.

\item Feb. 9: {\bf Homework Assignment \#0: Wire World!}
 
\item Feb. 13: Programming in Unix (emacs, vi, gcc, cd, ls, mkdir, gdb)

Reading:  Handouts.
\item Feb. 15: Introduction to C (main, statements, printf, variables)

Reading:  Chapter 2.
\item Feb. 16: {\bf Programming Assignment \#0:  Mailing Label}

\item Feb. 20: No class because of President's Day.
\item Feb. 22: Introduction to C Continued (scanf, arithmetic, if)
\item Feb. 24: {\bf Homework Assignment \#1}:  p. 49 \#2.7, 2.23 

{\bf Programming Assignment \#1:  Operation Detector}
            
\item Feb. 27: Control Flow (if, else, while, for, do until, switch )

Reading:  Chapters 3 and 4.
\item Feb. 29: Functions (declaration, definition, parameter passing, return values, void)

Reading:  Chapter 5.
\item Feb. 30: {\bf Programming Assignment \#2}:  Decimal $\leftrightarrow$
 Binary Converter

{\bf Homework Assignment \#2}:  p. 90, \#3.11,3.13,3.29,3.30,3.31;

\item Mar. 5: Recursion.  Local variables.
\item Mar. 7: Variables (int, float, double, and char; declaration; assignment, printing) 

Reading:  Chapter 9.
\item Mar. 8: {\bf Homework Assignment \#3}: p. 139, \#4.5abcdefg,4.8,4.38;
                                             p. 200, \#5.46,5.47,5.48,5.50;

{\bf Programming Assignment \#3:  The Two Fibonacci's}

\item Mar. 12: Pointers (* and \&) 

Reading:  Chapter 7.
\item Mar. 14: Arrays

Reading:  Chapter 6.
\item Mar. 15: {\bf Programming Assignment \#4:  Towers of Hanoi}

{\bf Homework Assignment \#4}:  p. 311, \#7.23abcef; p. 391 \#9.6bg  
\item Mar. 19: Strings 

Reading:  Chapter 8.
\item Mar. 21: Data Structures (struct, union, enum, cast)

Reading:  Chapter 10. 
\item Mar. 22: {\bf Programming Assignment \#5:  Turtle Graphics}  (p. 251, \#6.23)

{\bf Homework Assignment \#5}:  p. 311, \#7.21, 7.22, 7.30;
 p. 391, \#9.6acdefhi;  

\item SPRING BREAK!
\item Apr. 2: Using Standard Libraries (math, io, misc, string).  Software Reuse.

Reading:  Appendix B
\item Apr. 4: FILE I/O (fopen, fclose, fprintf, fscanf) 

Reading:  Chapter 11.
\item Apr. 5: {\bf Programming Assignment \#6: Complex Number Library}

\item Apr. 9: Dynamics allocation (malloc, free).  Lists and trees.

Reading:  Chapter 12.
\item Apr. 11: Sorting Algorithms.  qsort().
\item Apr. 12: {\bf Programming Assignment \#7:  Hardware Inventory}
\item Apr. 16: No class (``Patriot's Day'').
\item Apr. 18: Searching Algorithms. 
\item Apr. 19: {\bf Programming Assignment \#8: Guess My Animal}
\item Apr. 23: Software Engineering \#1 (make, making libraries, cvs)
\item Apr. 25: Software Engineering \#2 (assert, lifecycles, metrics)
\item Apr. 26: {\bf Proposal for Final Team Programming Project Due}
\item Apr. 30: C++ and object oriented programming.

Reading:  Chapters 16 and 17.
\item May 2: C++ continued: overloading and inheritance.

Reading:  Chapters 18 and 19.
\item May 3: {\bf Homework Assignment \#7}:  p. 591, \#15.21; p. 677, \#17.5
\item May 7: C++ continued:  polymorphism, exceptions, and templates.

Reading:  Chapter 20.
\item May 9: Java and object oriented programming.
\item May 10: {\bf FINAL TEAM PROGRAMMING PROJECT DUE}
\item May 14: Parallel and multi threaded programming (fork).
\item May 16: Programming in Multi-tasking and Event-driven OS (X, Windows, Mac)

\end{itemize}

\end{document}

