Computer Programming II

แผนการสอน

รายวิชา            คพ.311    หลักการเขียนโปรแกรมคอมพิวเตอร์ 2    (3  หน่วยกิต)

                        CS 311    Computer Programming II                    (3 Credits)

                        ทส.311     หลักการเขียนโปรแกรมคอมพิวเตอร์ 2    (3  หน่วยกิต)

                        IT 311      Computer Programming II                    (3 Credits)

รายละเอียดวิชา

ลักษณะของการเขียนโปรแกรมที่ดี การทดสอบและแก้ไขข้อผิดพลาดในโปรแกรม หลักการพื้นฐานของ Data Abstraction และ encapsulation เช่น แสตก คิว ลิงค์ลิสต์ ไบนารีทรี และเทคนิคในการเขียนโปรแกรมขั้นสูง เช่น ฟังก์ชันและชนิดข้อมูลที่สามารถกำหนดได้เอง การเปรียบเทียบ Recursion และ Iteration กลไกการผ่านค่าตัวแปร

Principles of good programming style. Debugging and testing. Fundamental concepts of data abstraction and encapsulation including stack, queue, linked list, binary tree. Advanced programming techniques: user-defined functions and types, recursion versus iteration, parameter-passing mechanisms.

 

วัตถุประสงค์รายวิชา (Course Objectives)

1.   เพื่อให้ผู้เรียนมีความเข้าใจและสามารถพัฒนาโปรแกรมขั้นพื้นฐานและชั้นสูง สามารถทดสอบและแก้ไขข้อผิดพลาดในโปรแกรมได้

2.   เพื่อให้ผู้เรียนสามารถนำไปใช้กับการพัฒนาโปรแกรมเชิงประยุกต์ โดยใช้โครงสร้างข้อมูลแบบต่างๆ ในการจัดเก็บข้อมูล

 

ภาคเรียนที่     1/2556

วิชาพื้นฐาน      CS310: Computer Programming I, IT310: Computer Programming I

อาจารย์ผู้บรรยายและติว (Lecture + Tutor)

ชื่อ

.ชลิตา ลิขนะนันท์ (A.Chalita Likananun)

คุณวุฒิ

วท.ม.(วิทยาการสารสนเทศ) สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง

 

วท.. (วิทยาการคอมพิวเตอร์) มหาวิทยาลัยกรุงเทพ

ที่ทำงาน

คณะวิทยาศาสตร์และเทคโนโลยี มหาวิทยาลัยกรุงเทพ

ห้องพักอาจารย์ อาคาร 3 ชั้น 1(วิทยาเขตกล้วยน้ำไท) 0-2350-3500 ต่อ 1690

ห้องพักอาจารย์ RA4205 (วิทยาเขตรังสิต) 0-2350-3500 ต่อ 2690

Email

chalita.l@bu.ac.th

หลักเกณฑ์การให้คะแนน

                   คะแนนสอบกลางภาค                                                                      30%

                   คะแนนสอบปลายภาค                                                                     30%

                   คะแนนสอบย่อย                                                                             15%

                   คะแนนการบ้าน แบบฝึกหัด และการเข้าห้องเรียน                               10%

                   Lab                                                                                               15%

                                                                                                วม               100%

หนังสืออ้างอิง

  •  เอกสารประกอบการสอนในชั้นเรียน
  • โครงสร้างข้อมูลและการวิเคราะห์อัลกอริทึม, ผศ.อานนท์ สุขเสถียรวงศ์, แผนกตำราและคำสอน มหาวิทยาลัยกรุงเทพ
  •   โครงสร้างข้อมูลและการวิเคราะห์อัลกอริทึม, ผศ.สมจิตต์ ลิขิตถาวร, แผนกตำราและคำสอน มหาวิทยาลัยกรุงเทพ
  • Algorithms in C, Parts 1 – 4: Fundamentals, Data Structures, Sorting, Searching, Robert Sedgewick, 3rd Edition, Addison-Wesley, 1997.
  • Algorithm in C, Part 5: Graph Algorithms, 3rd Edition, Robert Sedgewick, Addison-Wesley, 2001.

 

ตารางแผนการเรียนประจำภาคเรียนที่ 1 ปีการศึกษา 2556

 

สัปดาห์ที่

เนื้อหา

เทคนิคการสอนและงาน

1

Array (One and Two Dimension)

  • การประกาศอาร์เรย์ 2 มิติ
  • การเก็บข้อมูลในอาร์เรย์ 2 มิติ
  • การประยุกต์ใช้อาร์เรย์ 2 มิติ
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Lab 1 : 2D Array

2

Structure Data Type

  • วิธีการประกาศ Struct เบื้องต้น
  • การเรียกใช้งาน Struct เบื้องต้น
  • Array of Struct
  • เปรียบเทียบระหว่าง Array of Struct กับ Parallel Array
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน

3

Structure Data Type (cont.)

  • โครงสร้าง Stuct แบบซ้อนกัน (Nested Struct)
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Lab 2 :  Nested Struct and Array of Struct

4

Linked List

  •  ตัวแปรชนิดพอยต์เตอร์ (Pointer Variable)
  •  การประกาศและการกำหนดค่าให้กับตัวแปรชนิดพอยต์เตอร์
  • การเชื่อมโยงโหนดเป็นลิงค์สิสต์
  • การดำเนินการกับลิงค์ลิสต์

-        การ new โหนด และ free โหนด

-        การแทรกโหนดเข้าไปในลิงค์ลิสต์

-        ขั้นตอนวิธีและฟังก์ชันในการแทรกโหนดด้านหน้า

-    ขั้นตอนวิธีและฟังก์ชันในการแทรกโหนดด้านหลัง

  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน

 

5

Linked List  (cont.)

  • การดำเนินการกับลิงค์ลิสต์    

-       ขั้นตอนวิธีและฟังก์ชันในการแทรกโหนดในลิงค์ลิสต์ที่เรียงลำดับ

-   การท่องเข้าไปในลิงค์ลิสต์ (Traversing the List)

      -    การค้นหาโหนดในลิงค์ลิสต์
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Lab 3: Basic Linked List

6

Linked List  (cont.)

  • การดำเนินการกับลิงค์ลิสต์

-       ขั้นตอนวิธีและฟังก์ชันในการลบโหนดออกจากลิงค์ลิสต์

-    การประยุกต์ใช้ลิงค์ลิสต์

  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Lab 4 : Linked List

7

Test ครั้งที่ 1 ( 7 คะแนน)

หัวข้อที่ออกสอบ

-      2 Dimensional Array

-   Struct และ Array of Struct

  • Test

8

สอบกลางภาค

 

9

Stack

  • หลักการและประโยชน์
  • การดำเนินการกับสแตก (Push, Pop)
  • วิธีการสร้างสแตก
  • การเขียนโมดูลสำหรับสแตก

-        ฟังก์ชันปฏิบัติการ ClearStack, Push และ Pop

-        ฟังก์ชันชนิดบูลีน IsEmptyStack และ IsFullStack

  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน

10

Stack (cont.)

  • การประยุกต์ใช้สแตก
  • สแตกกับนิพจน์ทางคณิตศาสตร์

-       นิพจน์อินฟิกซ์ (Infix Notation)

-       นิพจน์พรีฟิกซ์ (Prefix Notation)

-       นิพจน์โพสต์ฟิกซ์ (Postfix Notation)

  • การแปลงนิพจน์อินฟิกซ์เป็นโพสต์ฟิกซ์

-       การใช้สแตกช่วยในการหาผลลัพธ์จากนิพจน์โพสต์ฟิกซ์

  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Lab 5 : Stack & Prefix Stack

 

11

Queue

  • หลักการและประโยชน์
  • การดำเนินการกับคิว (EnQ, DeQ)
  • วิธีการสร้างคิว
  • การเขียนโมดูลสำหรับคิว

-       ฟังก์ชันปฏิบัติการ ClearQ, Enq และ Deq

-       ฟังก์ชันชนิดบูลีน IsEmptyQ และ IsFullQ

  • การประยุกต์ใช้คิว
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Lab 6 : Queue

12

Recursion

  • Recursive vs. Non-recursive Algorithms
  • Numerical Algorithms

-          Factorial, Fibonacci

  • กรณีตัวอย่างของโปรแกรมรีเคอร์ชัน
  • การทำงานของรีเคอร์ชัน
  • วิธีการเขียนฟังก์ชันแบบรีเคอร์ซีฟ
  • เปรียบเทียบวิธีการเขียนแบบวนซ้ำ (Iteration) กับการเขียนแบบรีเคอร์ซีฟ (Recursive)
  • การประยุกต์ใช้รีเคอร์ชัน
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Lab 7 : Recursion

 

13

Tree Structure

  • นิยามโครงสร้างข้อมูลชนิดต้นไม้
  • โครงสร้างต้นไม้แบบทวิภาค (Binary Tree)
  • ศัพท์ที่ใช้เรียกแต่ละส่วนของต้นไม้
  • โครงสร้างต้นไม้ค้นหาแบบทวิภาค (BST - Binary Search Tree)

Test ครั้งที่ 2 ( 8 คะแนน)

หัวข้อที่ออกสอบ

-    Stack

-    Queue

-    การเขียนฟังก์ชันแบบ Recursive

  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  • Test

14

Tree Structure (cont.)

  • Traversing the Binary Search Tree

-       Inorder Traversal

-       Preorder Traversal

-       Postorder Traversal

  • การค้นหาข้อมูลใน BST
  • การสร้าง BST
  • การแทรกโหนดใน BST
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน

 

15

Tree Structure (cont.)

  • การลบโหนดใน BST
  • การประยุกต์ใช้ BST ในการแก้ปัญหา
  • บรรยาย
  • แบบฝึกหัดในชั้นเรียน
  •  Lab 8 : BST

 

16

สอบปลายภาค

 

 


หลักเกณฑ์การให้คะแนน Lab

หลักเกณฑ์การให้คะแนน          

             แต่ละ Lab มีคะแนนเต็ม 100 คะแนน

 วิธีการส่ง Lab

ให้ print โปรแกรมและผลลัพธ์

 มีหลักเกณฑ์การให้คะแนนดังนี้

1.       Output                    50% (print หน้าจอแสดงผล, ไฟล์ผลลัพธ์)
2.      
Program Style         40%
3.      
Variable                  5%
4.      
Comment               5%

ตารางหลักเกณฑ์การหักคะแนน

หัวข้อ

หักคะแนน

- ข้อมูลส่วนตัว

- เขียนไม่ครบหักจุดละ1
- เขียนผิดหักจุดละ 1
- ไม่เขียนเลยเหมารวม 10

- การเยื้องตำแหน่งการเขียน Code

- หักตำแหน่งละ 1
- ถ้ามากกว่า 10 จุด เหมารวมเป็น 10

- การตั้งชื่อตัวแปรให้สื่อความหมาย

- หักตำแหน่งละ 1
- ถ้ามากกว่า 10 จุด เหมารวมเป็น 10

- คำอธิบายรายละเอียดของโปรแกรม (Description) อย่างน้อย 20 คำ

- ถ้าไม่เขียนเลยหักเหมารวม 3
- เขียน 1 – 10 คำ หัก 2
- เขียน 11 – 19 คำ หัก 1

- Comment อธิบายคำสั่งแต่ละบรรทัด อย่างน้อย 5 Comments

- ถ้าไม่เขียนเลย 5
- ถ้าขาดไปหักจุดละ 1

- Print Input & Output

- ถ้าไม่พิมพ์หักอย่างละ 10

- ผลลัพธ์ของโปรแกรมที่ทำไม่ตรงกับ Source Code (Make Output)

- หัก 50

 

สิ่งที่ต้องส่ง

1.       Source Code - ส่วนต่างๆ ที่อยู่ใน Source Code (ให้ดูที่อธิบายเพิ่มเติม)
2.      
Input - ใช้ Input ที่อาจารย์กำหนดให้ในใบ Lab เป็นตัวทดสอบโปรแกรม แต่ถ้าในใบ Lab ไม่ได้กำหนดตัวอย่างไว้ ให้นักศึกษากำหนดข้อมูลขึ้นมาเองตามความเหมาะสม)
3.      
Output - ต้องพิมพ์ผลลัพธ์ที่ได้จากการรันโปรแกรมจริงๆ ห้ามมิให้มีการปลอมแปลงหรือแก้ไข

 

กำหนดส่ง Lab

1.       กำหนดส่งตามเวลาที่อาจารย์ผู้บรรยายกำหนดไว้

2.       สามารถส่งช้าได้ 3 วัน แต่จะหักคะแนนวันละ 10 คะแนน
3.      
ถ้าส่งช้าเกิน 3 วัน จะถือว่า Lab นั้นได้ 0 คะแนน
4.      
กรณีที่มีการคัดลอก Lab นักศึกษาจะได้ 0 คะแนน และติดลบอีก 50 คะแนน

*** ทั้งผู้ลอกและผู้ให้ลอก ***

 

/******************************************************************************************************************/

/* AUTHOR          : Mr. Mario Minority                                                                                          */

/* ID                     : 1-53-07-0065-1                                                                                               */

/* SECTION         : 1141                                                                                                             */

/* COURSE          : CS311 Computer Programming II                                                                    */

/* INSTRUCTOR   : A.Chalita Likananun                                                                                       */

/* DATE               : August 17, 2013                                                                                             */

/* LAB NUMBER   : 1                                                                                                                   */

/* DESCRIPTION : This program indicates the calculating of class                                                 */

/*                           average with sentinal-controlled repetition.                                                        */

/*                            It also shows that result on screen.                                                                */

/******************************************************************************************************************/

#include <stdio.h>

#include <conio.h>

int main()

{

   clrscr();                                                          // clear screen

   float average;                                                 // declaration

   int cnt, score, total;

   total = 0;                                                        // initialization

   cnt = 0;

   printf("Enter score, -999 to end: ");                   // prompt

   scanf("%d", &score);                                       read a score

   while (score != -999)

   {

      total = total + score;                                     // calculate the total score

      cnt = cnt + 1;

      printf("Enter score, -999 to end: ");

      scanf("%d", &score);

   }

   return 0;                                                         // successful termination

}