ใบความรู้

ใบความรู้ที่ 4.1

แนวคิดในการเขียนโปรแกรม

 

          การเขียนโปรแกรมเพื่อแก้ปัญหาใดปัญหาหนึ่ง จนกระทั่งได้ผลลัพธ์ออกมาตามที่ต้องการนั้นคงไม่ใช่เรื่องยาก หากผู้เขียนโปรแกรมมีแนวคิดในการเขียนโปรแกรมที่ดี และทำการเขียนโปรแกรมตามแนวคิดที่ได้วางไว้ แต่สำหรับผู้เขียนโปรแกรมมือใหม่ อาจจะยังไม่เข้าใจหลักการในการเขียนโปรแกรมว่าจะต้องเริ่มต้นเขียนโปรแกรมอย่างไร ทำให้คิดว่าการเขียนโปรแกรมเป็นเรื่องยาก ดังนั้น ในใบความรู้นี้จะกล่าวถึงแนวคิดในการเขียนโปรแกรมเพื่อเป็นแนวทางสำหรับผู้เขียนโปรแกรมได้เข้าใจหลักการในการเขียนโปรแกรมมากขึ้น

ขั้นตอนการพัฒนาโปรแกรม

          ในการพัฒนาโปรแกรมมีขั้นตอนหลัก 5 ขั้นตอน ซึ่งไม่ว่าจะทำการพัฒนาโปรแกรมครั้งใดจะต้องปฏิบัติตามขั้นตอนเหล่านี้ แต่หากผู้เขียนโปรแกรมมีความชำนาญเพียงพอ อาจจะข้ามขั้นตอนบางขั้นตอนได้ ในการอธิบายนี้จะขอยกตัวอย่างโจทย์ 1 ตัวอย่าง เพื่อให้ง่ายต่อการทำความเข้าใจในแต่ละขั้นตอน

1.  วิเคราะห์ปัญหา (Analysis)

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

          จากโจทย์ข้างต้น สามารถแตกปัญหาได้เป็น 2 ส่วน คือ

  •           •  ต้องรับข้อมูลเลขจำนวนเต็ม 2 ตัวเข้ามาในโปรแกรม

วิเคราะห์       กำหนดให้ x เก็บเลขจำนวนเต็มตัวที่ 1

                   กำหนดให้ y เก็บเลขจำนวนเต็มตัวที่ 2

  •           •  เลขจำนวนเต็มตัวที่ 1 + เลขจำนวนเต็มตัวที่ 2 มีค่าเท่ากับเท่าไร

วิเคราะห์       กำหนดให้ sum เก็บค่าผลบวกของเลขจำนวนเต็มทั้ง 2 จำนวน

                             นั่นคือ  sum = x + y

2.  วางแผนและออกแบบ (Planning and Design)

          การวางแผน คือ การนำปัญหาที่วิเคราะห์ได้จากขั้นตอนที่ 1 มาวางแผนอย่างเป็นขั้นตอนว่าจะต้องเขียนโปรแกรมเพื่อแก้ปัญหาอย่างไร การวางแผนอย่างเป็นขั้นตอนนี้ เรียกว่า อัลกอริทึม (Algorithm) ซึ่งอัลกอริทึมแบ่งออกเป็น 2 รูปแบบ คือ

  •     •  ซูโดโค้ด (Pseudo code) คือ การเขียนอัลกอริทึม โดยใช้ประโยคภาษาอังกฤษที่สื่อความหมายง่าย ๆ สามารถอ่านแล้วเข้าใจได้โดยทันที 

  • รูปที่ 1 อัลกอริทึมแบบซูโดโค้ด

          จากโจทย์ สามารถเขียนซูโดโค้ดได้ดังรูป จะเห็นว่าเมื่ออ่านซูโดโค้ดแล้วสามารถเข้าใจได้ทันทีว่าขั้นตอนการเขียนโปรแกรมเป็นอย่างไร

 

  •     •  โฟลวชาร์ต (Flowchart) คือ การเขียนอัลกอริทึมโดยใช้สัญลักษณ์รูปภาพเป็นตัวสื่อความหมาย

          จากโจทย์ สามารถเขียนโฟลวชาร์ตได้ดังรูป 

  

รูปที่ 2 อัลกอริทึมแบบโฟลวชาร์ต

 3.  การเขียนโปรแกรม (Coding)

          เป็นการนำอัลกอริทึมจากขั้นตอนที่ 2 มาเขียนโปรแกรมให้ถูกต้องตามหลักไวยากรณ์ (Syntax) ของภาษาซี จากโจทย์สามารถเขียนโปรแกรมได้ดังนี้

ตัวอย่างที่ 1 แสดงซอร์สโค้ด

          หากนำโปรแกรม (source code) มาพิจารณา จะพบว่า การเขียนโปรแกรมมีขั้นตอนเป็นไปตามขั้นตอนของอัลกอริทึมที่ได้วิเคราะห์ขึ้นทุกประการ ดังนี้

รูปที่ 3 แสดงการเปรียบเทียบขั้นตอนการทำงานที่เหมือนกันระหว่างซอร์สโค้ดและอัลกอริทึม

4.  ทดสอบโปรแกรม (Testing)

          เป็นการนำผลลัพธ์จากขั้นตอนที่ 3 มาทำการรัน (run) โดยทดสอบป้อนค่า x และ y เข้าไปในโปรแกรม และตรวจสอบผลลัพธ์ที่ได้ว่าถูกต้องหรือไม่ ให้ทดสอบหลายๆ ครั้ง หากผลลัพธ์ที่ได้ถูกต้อง แสดงว่าโปรแกรมที่เขียนขึ้นถูกต้องแล้ว แต่หากผลลัพธ์ถูกบ้างผิดบ้าง หรือผิดทุกครั้ง แสดงว่าโปรแกรมที่เขียนขึ้นผิดพลาด ผู้เขียนโปรแกรมต้องกลับไปตรวจสอบ และแก้ไขโปรแกรมใหม่อีกครั้ง

          จากโจทย์ สามารถทดสอบโปรแกรมได้ดังนี้

ผลลัพธ์ของโปรแกรม

          ลองทดสอบโปรแกรมหลาย ๆ ครั้ง จนกระทั่งมั่นใจว่าผลลัพธ์ที่ได้ถูกต้อง

5.  จัดทำคู่มือ (Documentation)

          จุดประสงค์ที่สำคัญของการทำคู่มือ คือ ช่วยให้ผู้อื่นศึกษาซอร์สโค้ด (source code) ของโปรแกรมได้ง่ายขึ้น ซึ่งจะเป็นประโยชน์มากสำหรับการพัฒนาโปรแกรมในอนาคต เพราะจะช่วยให้ศึกษาซอร์สโค้ดได้ง่ายและรวดเร็วขึ้น การจัดทำคู่มือไม่มีกฎเกณฑ์ระบุไว้แน่นอน แต่ผู้เขียนโปรแกรมควรจัดทำคู่มือให้มีรายละเอียดมากที่สุด

          จากโจทย์ สามารถจัดทำคู่มือได้ดังนี้ (การจัดทำคู่มือที่จะแสดงต่อไปนี้ เป็นเพียงตัวอย่าง นักเรียนสามารถจัดทำคู่มือออกมาในลักษณะอื่น ๆ ได้ตามที่ต้องการ แต่สิ่งสำคัญ คือ ควรจัดทำคู่มือให้มีรายละเอียดมากที่สุด)

รูปที่ 4 แสดงการจัดทำคู่มือประกอบโปรแกรม

การเขียนอัลกอริทึมแบบโฟลวชาร์ต

          โฟลวชาร์ต (Flowchart) คือ การแสดงขั้นตอนการทำงานโดยใช้สัญลักษณ์รูปภาพเป็นตัวสื่อความหมาย รูปภาพแต่ละรูปจะมีความหมายเฉพาะตัว และใช้ลูกศรกำหนดทิศทางการทานในแต่ละขั้นตอน

 

ตารางที่ 1 สัญลักษณ์รูปภาพของโฟลวชาร์ต

          จากตารางที่ 1 เป็นสัญลักษณ์รูปภาพของโฟลวชาร์ตเพียงบางส่วนที่มีการใช้งานบ่อย ๆ เท่านั้น ซึ่งสัญลักษณ์รูปภาพของโฟลวชาร์ตยังมีอีกมาก

ตัวอย่างที่ 2 จงเขียนโฟลวชาร์ตแสดงขั้นตอนการหาพื้นที่ของรูปสี่เหลี่ยมคางหมู

วิเคราะห์ปัญหา

          1. ปัญหา คือ ต้องทำการคำนวณหาพื้นที่ของรูปสี่เหลี่ยมคางหมู จากสูตร

          พื้นที่สี่เหลี่ยมคางหมู = ½ x ผลบวกของด้านคู่ขนาน x สูง

          2. ตัวแปรที่ใช้ คือ

          w1     ใช้เก็บความยาวของด้านคู่ขนานด้านที่ 1 ของรูปสี่เหลี่ยมคางหมู

          w2     ใช้เก็บความยาวของด้านคู่ขนานด้านที่ 2 ของรูปสี่เหลี่ยมคางหมู

          h        ใช้เก็บความสูงของรูปสี่เหลี่ยมคางหมู

          Area   ใช้เก็บพื้นที่ของรูปสี่เหลี่ยมคางหมู

          3. ข้อมูลนำเข้า คือ ค่าของ w1, w2, และ h

          4. ผลลัพธ์ คือ คำนวณพื้นที่ของรูปสี่เหลี่ยมคางหมู จากสูตร

          Area = ½ x (w1 + w2) x h

ขั้นตอนการทำงาน

          1. รับค่า w1, w2, h เข้ามาในโปรแกรม

          2. คำนวณพื้นที่ของรูปสี่เหลี่ยมคางหมู

                    จากสูตร    Area = ½ x (w1 + w2) x h

รูปที่ 5 โฟลวชาร์ตแสดงการหาพื้นที่ของรูปสี่เหลี่ยมคางหมู

ตัวอย่างที่ 3 จงคำนวณหาเกรดวิชาคอมพิวเตอร์ของนักเรียนชั้นมัธยมศึกษาปีที่ 3 จากแฟ้มข้อมูลคะแนน พร้อมทั้งแสดงเกรดของนักเรียนแต่ละคน โดยเกณฑ์ที่ใช้ในการตัดเกรด คือ

คะแนน

เกรด

ตั้งแต่ 80 ขึ้นไป

A

70 ถึง 79

B

60 ถึง 69

C

50 ถึง 59

D

น้อยกว่า 50

F

ตัวอย่างแฟ้มข้อมูลคะแนน คือ

ชื่อ

คะแนน

สมพร

70

สมชัย

85

สมศักดิ์

45

สมชาย

73

สมศรี

66

วิเคราะห์ปัญหา

          1. ปัญหา คือ ต้องทำการคำนวณหาเกรดวิชาคอมพิวเตอร์ของนักเรียนชั้นมัธยมศึกษาปีที่ 3 จากช่วงคะแนนที่กำหนด เช่น นักเรียนได้ 77 คะแนน จะได้เกรด B เป็นต้น

          2. ตัวแปรที่ใช้ คือ

                    points          ใช้เก็บคะแนนของนักเรียนชั้นมัธยมศึกษาปีที่ 3

                    grade           ใช้เก็บเกรดของนักเรียนชั้นมัธยมศึกษาปีที่ 3

          3. ข้อมูลนำเข้า คือ ค่าคะแนนของนักเรียน (ค่า points) โดยต้องนำเข้ามาจากแฟ้มข้อมูลคะแนน ซึ่งข้อมูลน้ำเข้านี้แตกต่างจากตัวอย่างที่ 1 เนื่องจากตัวอย่างที่ 1 จะรับค่าข้อมูลนำเข้ามาจากผู้ใช้งานโปรแกรมโดยตรง (ผู้ใช้ทำการป้อนข้อมูลเข้ามา) แต่สำหรับตัวอย่างนี้เป็นการนำข้อมูลคะแนนเข้ามาจากแฟ้มข้อมูล คือ มีข้อมูลเป็นจำนวนที่แน่นอนเก็บอยู่ในแฟ้มข้อมูลแล้ว เพียงแต่ดึงข้อมูลเหล่านี้ออกมาใช้ อย่างไรก็ตาม การดึงข้อมูลคะแนนออกมาใช้จะต้องคำนึงด้วยว่า ได้ดึงข้อมูลจากแฟ้มออกมาจนกระทั่งจบแฟ้มข้อมูลแล้วหรือยัง กล่าวง่าย ๆ คือ ต้องพิจารณาด้วยว่า ทำการอ่านคะแนนของนักเรียนครบทุกคนแล้วหรือยัง

  •     •  หากอ่านคะแนนของนักเรียนยังไม่ครบทุกคน (ยังไม่จบแฟ้มข้อมูล) ให้อ่านข้อมูลต่อไป
  •     •  หากอ่านคะแนนของนักเรียนครบทุกคนแล้ว (จบแฟ้มข้อมูลแล้ว) ให้หยุดการทำงาน เนื่องจากข้อมูลของนักเรียนทุกคนได้รับการคำนวณเกรดหมดแล้ว

                   การพิจารณาว่าจบแฟ้มข้อมูลหรือยัง ให้ใช้ EOF (End Of File) ในการพิจารณาดังนี้

                   IF EOF THEN

                                      STOP

                   ELSE

                                      ......

                   END IF

 

          4. ผลลัพธ์ คือ เกรดของนักเรียน ซึ่งได้จากการนำคะแนนของนักเรียนคนนั้นๆมาพิจารณาตามเกณฑ์ที่กำหนด

          ตัวอย่างผลลัพธ์

ชื่อ

เกรด

สมพร

B

สมชัย

A

สมศักดิ์

F

สมชาย

B

สมศรี

C

ขั้นตอนการทำงาน

1. อ่านชื่อนักเรียนและคะแนนของนักเรียนจากแฟ้มข้อมูล แล้วทำการตรวจสอบว่าจบไฟล์หรือยัง

  •     •  หากจบไฟล์ แสดงว่าไม่มีข้อมูลคะแนนของนักเรียนให้อ่านแล้ว ให้หยุดการทำงาน
  •     •  หากยังไม่จบไฟล์ สามารถไปทำขั้นตอนต่อไปได้

2. ตรวจสอบค่าคะแนนของนักเรียนว่าอยู่ในช่วงใด และได้เกรดเท่าไร

3. แสดงชื่อและเกรดของนักเรียนแต่ละคน

4. ทำรายการของนักเรียนคนต่อไป โดยวนกลับไปทำขั้นตอนที่ 1 ใหม่อีกครั้ง

 

รูปที่ 6 โฟลวชาร์ตแสดงการหาเกรดวิชาคอมพิวเตอร์ของนักเรียนชั้นมัธยมศึกษาปีที่ 3

ตัวอย่างที่ 4 จงเขียนโฟลวชาร์ตแสดงการหาผลบวกของเลขคู่ที่มีค่าอยู่ในช่วง 1 ถึง 100

วิเคราะห์ปัญหา

1.ปัญหา คือ ต้องทำการคำนวณหาผลบวกของเลขคู่ที่มีค่าอยู่ในช่วง 1 ถึง 100

2 + 4 + 6 + 8 + 10 + 12 + 14 +16 + 18 + ... = ?

เลขคู่ตัวแรกที่มีค่าอยู่ในช่วง 1 ถึง 100 คือ 2 และตัวถัดไปคือ 4, 6, 8, ...

เริ่มต้น กำหนดตัวบวก = 0 และผลบวก = 0

รอบที่

ค่าตัวบวก

ผลบวก

1

ตัวบวก = ตัวบวกเดิม + 2

          = 0 + 2

          = 2

ผลบวก = ผลบวกเดิม + ตัวบวก

           = 0 + 2

           = 2

2

ตัวบวก = ตัวบวกเดิม + 2

          = 2 + 2

          = 4

ผลบวก = ผลบวกเดิม + ตัวบวก

           = 2 + 4

           = 6

3

ตัวบวก = ตัวบวกเดิม + 2

          = 4 + 2

          = 6

ผลบวก = ผลบวกเดิม + ตัวบวก

           = 6 + 6

           = 12

4

ตัวบวก = ตัวบวกเดิม + 2

          = 6 + 2

          = 8

ผลบวก = ผลบวกเดิม + ตัวบวก

           = 12 + 8

           = 20

2.ตัวแปรที่ใช้ คือ

count  ใช้เก็บค่าตัวบวก

sum    ใช้เก็บผลบวก

เพราะฉะนั้น หากนำตัวแปรไปใช้กับปัญหาที่วิเคราะห์ได้จากขั้นตอนที่ 1 จะได้สูตร 2 สูตร ดังนี้

          นั่นคือ ค่าของตัวบวกตัวใหม่ จะได้มาจากการนำค่าของตัวบวกเดิมมาบวกด้วย 2 (นำค่าของตัวแปร count มาบวก 2 แล้วเก็บผลลัพธ์ที่ได้ลงตัวแปร count เหมือนเดิม) ส่วนค่าของผลบวกใหม่ ก็จะได้มาจากการนำค่าของผลบวกเดิมมาบวกด้วยค่าตัวบวก (นำค่าของตัวแปร sum มาบวกกับค่าของตัวแปร count แล้วเก็บผลลัพธ์ที่ได้ลงตัวแปร sum เหมือนเดิม)

3.ข้อมูลนำเข้า  ไม่มี

4.ผลลัพธ์ คือ ผลบวกของเลขคู่ทั้งหมดที่อยู่ในช่วง 1 ถึง 100

ขั้นตอนการทำงาน

1.กำหนดค่าเริ่มต้นให้กับตัวแปร count และ sum คือ count = 0, sum = 0

2.เพิ่มค่าตัวบวกเพื่อเป็นตัวบวกตัวถัดไป คือ count = count + 2

3.ตรวจสอบตัวแปร count ว่ามีค่ามากกว่า 100 หรือไม่

  •     •  หากมากกว่า 100 ให้จบการทำงาน
  •     •  หากไม่มากกว่า 100 ให้ทำขั้นตอนต่อไป

4.ทำการคำนวณหาผลบวกจากสูตร sum = sum + count แล้วกลับไปทำขั้นตอนที่ 2 ใหม่อีกครั้ง 

 

รูปที่ 7 โฟลวชาร์ตแสดงการหาผลบวกของเลขคู่ที่มีค่าอยู่ในช่วง 1 ถึง 100

ตัวอย่างที่ 5 จงเขียนโฟลวชาร์ตแสดงการแปลงค่าจากคริสต์ศักราช (ค.ศ.) ไปเป็นพุทธศักราช (พ.ศ.) พร้อมทั้งแสดงผลลัพธ์ โดยให้แยกส่วนของการรับค่าข้อมูล ค.ศ. ออกจากส่วนของการแปลงค่าจาก ค.ศ. ไปเป็น พ.ศ. (แนะนำ : ให้เขียนโฟลวชาร์ตแยกเป็นการทำงานของโปรแกรมย่อยที่เรียกว่า subprogram)

วิเคราะห์ปัญหา

1.ปัญหา คือ ต้องทำการแปลงค่าข้อมูลจาก ค.ศ. ไปเป็น พ.ศ. จากสูตร

พ.ศ. = .ศ. + 543

2.ตัวแปรที่ใช้ คือ

BE      ใช้เก็บค่าปี พ.ศ.

CE      ใช้เก็บค่าปี ค.ศ.

3.ข้อมูลนำเข้า คือ ค่าปี ค.ศ. โดยรับค่ามาเก็บไว้ในตัวแปร CE

4.ผลลัพธ์ คือ ค่าปี พ.ศ. ซึ่งได้จากการแปลงค่า ปี ค.ศ. โดยใช้สูตร

BE = CE + 543

หมายเหตุ  โจทย์สั่งให้แยกส่วนของการรับค่าข้อมูล ค.ศ. ออกจากส่วนของการแปลงค่า ค.ศ. ไปเป็น พ.ศ. ดังนั้น ในที่นี้จะกำหนดให้การรับค่าข้อมูล ค.ศ. เป็นส่วนของโปรแกรมหลัก และกำหนดให้ส่วนของการแปลงข้อมูลจาก ค.ศ. ไปเป็น พ.ศ. เป็นส่วนของโปรแกรมย่อย หรือ subprogram

          เริ่มต้นการทำงานจากส่วนของโปรแกรมหลักทำการรับค่าข้อมูล ค.ศ. เข้ามา จากนั้นโปรแกรมหลักก็จะไปเรียกส่วนของโปรแกรมย่อยขึ้นมาทำงาน เพื่อแปลงค่าจาก ค.ศ. ไปเป็น พ.ศ.

 

ขั้นตอนการทำงาน

1.รับค่า CE เข้ามาในโปรแกรม

2.ทำการเรียกโปรแกรมย่อยขึ้นมาทำงาน

3.โปรแกรมย่อยทำการแปลงค่าจาก ค.ศ. ไปเป็น พ.ศ. โดยใช้สูตร

BE = CE + 543 

4.กลับเข้าสู่การทำงานของโปรแกรมหลักอีกครั้ง โดยโปรแกรมหลักจะแสดงผลลัพธ์ที่โปรแกรมย่อยประมวลผลได้


รูปที่ 8 โฟลวชาร์ตแสดงการแปลงค่าจาก ค.ศ. ไปเป็น พ.ศ.

โดยอาศัยหลักการทำงานของโปรแกรมหลักร่วมกับการทำงานของโปรแกรมย่อย