IM 1003: Programming Design, Spring 2015

Instructor: Ling-Chieh Kung
Department of Information Management
National Taiwan University

In this course, we will introduce how to write computer programs for general purposes. The programming language we will study is C++, one of the most popular and powerful high-level programming language nowadays. We will start from the procedural programming part of C++, which is quite similar to the programming language C, and then discuss those object-oriented features of C++. While we will spend a lot of time on how to write "correct" programs, we will also try to write "good" programs, i.e., those running faster, using less memory, having better formats, generating friendly user interfaces, being more extendable, etc. The language C++ is just something that facilitates the delivery of the principles of computer programming. What really matter are the conceptual principles, not the C++ syntax or rules. Our objective is not to teach you how to write C++ programs; we want to make you be able to teach yourself any other programming languages in the future. C++ is chosen to be taught in this course mainly because, in my opinion, it is a "broad" language. This will be discussed in lectures.

This is a required course for first-year undergraduate students in the Department of Information Management in National Taiwan University. We do not assume any background in computer programming, and there is no prerequisite for this course. However, some experiences in courses like Introduction to Computer Science and Discrete Mathematics helps. In most cases, all students who want to enroll in or audit this course are welcome. This course is taught in English.

Note. Though this course counts for three units officially, students are suggested to treat it as at least five units and put efforts accordingly. In my opinion, this course should be (and indeed is) heavier than most introductory programming courses in NTU. If you do not have any programming experience, you do need to spend enough time on programming to really learn something. Studying programming is definitely not easy. Please do not hesitate to let me know if you need any help.


Basic information

Instructor
  • Ling-Chieh Kung (孔令傑)
  • E-mail: lckung(AT)ntu.edu.tw
  • Office: Room 413, Management Building II
  • Tel: 02-3366-1176.
  • Office hour: 9-10am, Tuesday or by appointment.
Teaching assistants
  • Willy Liao (廖偉宏). E-mail: r03725035(AT)ntu.edu.tw.
  • Tammy Chang (張翔). E-mail: r03725017(AT)ntu.edu.tw.
  • Shelley Sun (孫至緣). E-mail: r03725004(AT)ntu.edu.tw.
Meetings
  • Lectures (in ENGLISH):
    • 2:20-5:20pm, Monday.
    • Room 305, Management Building II.
  • Labs (in CHINESE):
    • 6:30-8:15pm, Wednesday.
    • The large computer classroom, Management Building I.
Textbook
  • C++ How to Program: Late Objects Version by Paul Deitel and Harvey Deitel, Seventh edition, Pearson Education.
    臺灣代理: 歐亞圖書, (02) 8912-1188.
References
  • A First Book of C++ by G. Bronson.
  • C++ Primer by S. B. Lippman, J. Lajoie, and B.E. Moo.
  • The C++ Programming Language by B. Stroustrup.
On-line resources
  • To check grades: CEIBA.
  • To download materials: This website.
  • To submit homework: PDOGS (the link will be provided when the system is ready).
  • To discuss: the bulletin board "NTUIM-lckung" on PTT.


Syllabus

For a detailed description about this course, including course policies, grading rules, references, etc., please see the syllabus. Whenever there is an update, a new version will be posted with a short note describing the update.

Posted on Syllabus Notes
2015/2/24 Link The basic planning of this course
2015/5/13 Link The grading rule for attending PDAO


Important Dates

Week Date Special Event
72015/4/8Lab exam 1
122015/5/11Midterm exam
122015/5/13Lab exam 2
182015/6/22Final project demonstrations
182015/6/24Lab exam 3


Lecture materials

Note: For codes in the slides, if they are put in green boxes, they will be provided in the "Codes" section.

Week Topic Slides Codes Lab materials Note
1 (No class: national holiday) N/A N/A (No lab) N/A
2 Introduction Slides Codes Materials N/A
3 Control statements Slides Codes Materials N/A
4 Arrays Slides Codes Materials N/A
5 Functions Slides Codes Materials N/A
6 Recursion, searching, and sorting Slides Codes (No lab: spring recess) N/A
7 (No class: spring recess) N/A N/A (Lab exam 1) N/A
8 Pointers Slides Codes Materials N/A
9 Self-defined data types Slides Codes Materials N/A
10 Classes (1) Slides Codes (No lab: IM Night) N/A
11 Classes (2) Slides Codes Materials N/A
12 (Midterm exam) N/A N/A (Lab exam 2) N/A
13 Operator overloading Slides Codes (No lab) N/A
14 File I/O and strings Slides Codes Materials N/A
15 Inheritance Slides Codes Materials N/A
16 Polymorphism Slides Codes Materials N/A
17 Data structures Slides Codes Slides
18 (Final Project Demonstrations) (Lab exam 3)


Homework

Problems Solution
Homework 1 Solution 1
Homework 2 Solution 2
Homework 3 Solution 3
Homework 4 Solution 4
Homework 5 Solution 5
Homework 6 Solution 6
Homework 7 Solution 7
Homework 8 Solution 8
Homework 9 Solution 9
Homework 10 Solution 10
Homework 11 Solution 11
Homework 12A Solution 12A
Homework 12B Solution 12B


Bonus problem

Here is the description of the bonus problem. Here is the set of data you need.


Final project

Here is the description of the final project.

Here are some suggestions for formatting your reports.


Exams


Date Problems Solutions
2015/4/8 Lab exam 1 problems Lab exam 1 solutions
2015/5/11 Midterm problems Midterm solution
2015/5/13 Lab exam 2 problems Lab exam 2 solution
2015/6/24 Lab exam 3 problems Lab exam 3 solution