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.
Office Hours:

MW 9:15-10am, Acad Block NIB Aud and by appointment in SSE 9-120A

Muhammad Kamran Nishat (co-instructor), TA
Office Hours:
Ahmed Mehfooz, TA
Office Hours:
Amyn Karim Virani, TA
Office Hours:
Asad Alavi, TA
Office Hours:
Babar Naveed Memon, TA
Office Hours:
Bilal Zaidi, TA
Office Hours:
Fareeha Irfan, TA
Office Hours:
Haris Choudhary, TA
Office Hours:
Hasnain Ali Pirzada, TA
Office Hours:
Hassan Mujtaba Zaidi, TA
Office Hours:
Muhammad Raza Mahboob, TA
Office Hours:
Naina Raisinghani, TA
Office Hours:

Course Information

Class meetings

MW 8am–9:15am, Acad Block NIB Aud


Students should be able to operate computers and use a web browser

Required textNone
Optional text



50%Lab exams (Best 10 of at least 11 total (5 points each))
25%Programming assignments (5 total (5 points each))
25%Final Examination


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: 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.

Academic dishonesty

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.

Late submissions

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.

Missed exams

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.

Tentative Schedule

Topic 1: Fundamentals of programming

Introduction, Administrivia

Basic I/O, variables, and types

Operators and expressions

Conditional statements

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

Operator overloading

Templates and generic programming

Topic 1: Dynamic Memory & Pointers

Pointers and memory addresses

Heap & dynamic memory allocation

Smart pointers and dynamic arrays

Linked List

Recursion and pointers

Linked list manipulations

Topic 1: Advanced Concepts

Lambda Expressions



Exception handling

Where to go from here?