Introduction to Programming
Fall 2013 offering at LUMS as CS 200
In this course, we will study the process of translating algorithms into computer programs. Students should be able to write small computer programs (few thousand lines of code) after completing this course. The course will start with fundamental concepts of imperative programming: variables, expressions, and statements. Later, we will cover functions and classes which form the basis of procedural and object-oriented programming. There will be emphasis on writing programs that are easy to read, test, and maintain. We will use the C++ language to understand these concepts.
MW 9:15-10am, Acad Block NIB Aud and by appointment in SSE 9-120A
MW 8am–9:15am, Acad Block NIB Aud
Students should be able to operate computers and use a web browser
|50%||Lab exams (Best 10 of at least 11 total (5 points each))|
|25%||Programming assignments (5 total (5 points each))|
We will be using Piazza for class discussions and announcements. The system is highly catered to getting you help fast and efficiently from classmates, the teaching assistants, and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza.
Find our class page at: https://piazza.com/lums.edu.pk/fall2013/cs200/home. Register using your LUMS email address.
There will be a weekly required lab session. The first lab session will introduce the programming environment while the rest of the sessions will be graded exams or ungraded exercises. Best 10 of the graded exams will constitute 50% of your percentage score. There will be 5 programming assignments constituting 25% of the percentage score and there will be an on-paper final examination of 25%.
Your final grade will be determined by your percentage score. You will get A- or better at 90, B- or better at 75, C- or better at 60, and pass at 50 or less.
Attendance is expected but not required. If you attend, be there on time. If you do not attend, do not expect me or any TA to repeat the material for you. Mute your cell phone in class.
You must not turn in work that is not yours. You must not enable someone else to turn in work that is not his or hers. Do not share your work with anyone else and adequately protect all your files. You must not allow someone to openly violate this policy because it diminishes your effort as well as that of your honest classmates.
Changing your exam answers after they have been graded, copying answers during exams, or plagiarizing the work of others will be considered academic dishonesty and will be subject to disciplinary penalties, including the possibility of failure in the course and/or dismissal from the University. Plagiarism detection software will be used on the programs submitted in this class.
All work must be turned in by electronic submission by the deadline (no e-mailed submissions). You can earn a late day by submitting your assignment 3 days (72 hours) before the deadline or earn 2 late days by submitting your assignment 6 days before the deadline. You can earn up to 5 late days per assignment. You can use these late days on a later assignment. If you submit your assignment late (even by a second), it will be considered late by a day (24 hours). You need to earn late days before you can use them. If you are out of late days, your assignment will not be accepted.
Under exceptional situations (e.g. emergency medical), I may permit somone to use one or more late days before they are earned. This will move their deadline for the next assignment earlier.
There is no retake for a missed lab exam. You cannot retake a lab exam with the other section. Missed final examination has to be approved by the Office of Student Affairs. Approved cases will most likely receive an average score according to their semester performance.
|Topic 1: Fundamentals of programming|
Basic I/O, variables, and types
Operators and expressions
Dealing with strings and vectors
Iterative statements and arrays
References and custom types
|Topic 1: Functions|
Introduction to functions
Arguments, return type, system stack
Recursion and stack frames
Searching and multiple file programs
Sorting and unit tests
|Topic 1: Classes|
Abstract data types, encapsulation, static members
Constructors and copy control
Templates and generic programming
|Topic 1: Dynamic Memory & Pointers|
Pointers and memory addresses
Heap & dynamic memory allocation
Smart pointers and dynamic arrays
Recursion and pointers
Linked list manipulations
|Topic 1: Advanced Concepts|
Where to go from here?