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

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