วันจันทร์ที่ 22 พฤษภาคม พ.ศ. 2560

ใบความรู้ที่4.1 แนวคิดในการเขียนโปรแกรม

ใบความรู้ที่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 โฟลวชาร์ตแสดงการแปลงค่าจาก ค.ศ. ไปเป็น พ.ศ.
โดยอาศัยหลักการทำงานของโปรแกรมหลักร่วมกับการทำงานของโปรแกรมย่อย


ไม่มีความคิดเห็น:

แสดงความคิดเห็น

ใบความรู้ที่4.1 แนวคิดในการเขียนโปรแกรม

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