แนวคิดในการเขียนโปรแกรม
การเขียนโปรแกรมเพื่อแก้ปัญหาใดปัญหาหนึ่ง
จนกระทั่งได้ผลลัพธ์ออกมาตามที่ต้องการนั้นคงไม่ใช่เรื่องยาก
หากผู้เขียนโปรแกรมมีแนวคิดในการเขียนโปรแกรมที่ดี
และทำการเขียนโปรแกรมตามแนวคิดที่ได้วางไว้ แต่สำหรับผู้เขียนโปรแกรมมือใหม่
อาจจะยังไม่เข้าใจหลักการในการเขียนโปรแกรมว่าจะต้องเริ่มต้นเขียนโปรแกรมอย่างไร
ทำให้คิดว่าการเขียนโปรแกรมเป็นเรื่องยาก ดังนั้น
ในใบความรู้นี้จะกล่าวถึงแนวคิดในการเขียนโปรแกรมเพื่อเป็นแนวทางสำหรับผู้เขียนโปรแกรมได้เข้าใจหลักการในการเขียนโปรแกรมมากขึ้น
ขั้นตอนการพัฒนาโปรแกรม
ในการพัฒนาโปรแกรมมีขั้นตอนหลัก 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) คือ การเขียนอัลกอริทึม โดยใช้ประโยคภาษาอังกฤษที่สื่อความหมายง่าย ๆ สามารถอ่านแล้วเข้าใจได้โดยทันที
• ซูโดโค้ด (Pseudo code) คือ การเขียนอัลกอริทึม โดยใช้ประโยคภาษาอังกฤษที่สื่อความหมายง่าย ๆ สามารถอ่านแล้วเข้าใจได้โดยทันที
- รูปที่ 1 อัลกอริทึมแบบซูโดโค้ด
-
• โฟลวชาร์ต (Flowchart) คือ การเขียนอัลกอริทึมโดยใช้สัญลักษณ์รูปภาพเป็นตัวสื่อความหมาย
จากโจทย์ สามารถเขียนโฟลวชาร์ตได้ดังรูป
รูปที่ 2 อัลกอริทึมแบบโฟลวชาร์ต
3. การเขียนโปรแกรม
(Coding)
เป็นการนำอัลกอริทึมจากขั้นตอนที่ 2 มาเขียนโปรแกรมให้ถูกต้องตามหลักไวยากรณ์ (Syntax) ของภาษาซี
จากโจทย์สามารถเขียนโปรแกรมได้ดังนี้
หากนำโปรแกรม (source code) มาพิจารณา จะพบว่า
การเขียนโปรแกรมมีขั้นตอนเป็นไปตามขั้นตอนของอัลกอริทึมที่ได้วิเคราะห์ขึ้นทุกประการ
ดังนี้
รูปที่ 3 แสดงการเปรียบเทียบขั้นตอนการทำงานที่เหมือนกันระหว่างซอร์สโค้ดและอัลกอริทึม
4. ทดสอบโปรแกรม (Testing)
เป็นการนำผลลัพธ์จากขั้นตอนที่ 3 มาทำการรัน
(run) โดยทดสอบป้อนค่า x และ y เข้าไปในโปรแกรม และตรวจสอบผลลัพธ์ที่ได้ว่าถูกต้องหรือไม่ ให้ทดสอบหลายๆ
ครั้ง หากผลลัพธ์ที่ได้ถูกต้อง แสดงว่าโปรแกรมที่เขียนขึ้นถูกต้องแล้ว
แต่หากผลลัพธ์ถูกบ้างผิดบ้าง หรือผิดทุกครั้ง แสดงว่าโปรแกรมที่เขียนขึ้นผิดพลาด
ผู้เขียนโปรแกรมต้องกลับไปตรวจสอบ และแก้ไขโปรแกรมใหม่อีกครั้ง
จากโจทย์ สามารถทดสอบโปรแกรมได้ดังนี้
ลองทดสอบโปรแกรมหลาย ๆ ครั้ง จนกระทั่งมั่นใจว่าผลลัพธ์ที่ได้ถูกต้อง
5. จัดทำคู่มือ (Documentation)
จุดประสงค์ที่สำคัญของการทำคู่มือ คือ ช่วยให้ผู้อื่นศึกษาซอร์สโค้ด
(source code) ของโปรแกรมได้ง่ายขึ้น
ซึ่งจะเป็นประโยชน์มากสำหรับการพัฒนาโปรแกรมในอนาคต
เพราะจะช่วยให้ศึกษาซอร์สโค้ดได้ง่ายและรวดเร็วขึ้น
การจัดทำคู่มือไม่มีกฎเกณฑ์ระบุไว้แน่นอน
แต่ผู้เขียนโปรแกรมควรจัดทำคู่มือให้มีรายละเอียดมากที่สุด
จากโจทย์ สามารถจัดทำคู่มือได้ดังนี้ (การจัดทำคู่มือที่จะแสดงต่อไปนี้
เป็นเพียงตัวอย่าง นักเรียนสามารถจัดทำคู่มือออกมาในลักษณะอื่น ๆ ได้ตามที่ต้องการ
แต่สิ่งสำคัญ คือ ควรจัดทำคู่มือให้มีรายละเอียดมากที่สุด)
รูปที่ 4 แสดงการจัดทำคู่มือประกอบโปรแกรม
การเขียนอัลกอริทึมแบบโฟลวชาร์ต
โฟลวชาร์ต (Flowchart) คือ
การแสดงขั้นตอนการทำงานโดยใช้สัญลักษณ์รูปภาพเป็นตัวสื่อความหมาย
รูปภาพแต่ละรูปจะมีความหมายเฉพาะตัว และใช้ลูกศรกำหนดทิศทางการทานในแต่ละขั้นตอน
จากตารางที่ 1 เป็นสัญลักษณ์รูปภาพของโฟลวชาร์ตเพียงบางส่วนที่มีการใช้งานบ่อย
ๆ เท่านั้น ซึ่งสัญลักษณ์รูปภาพของโฟลวชาร์ตยังมีอีกมาก
ตัวอย่างที่ 2 จงเขียนโฟลวชาร์ตแสดงขั้นตอนการหาพื้นที่ของรูปสี่เหลี่ยมคางหมู
วิเคราะห์ปัญหา
1. ปัญหา คือ ต้องทำการคำนวณหาพื้นที่ของรูปสี่เหลี่ยมคางหมู
จากสูตร
พื้นที่สี่เหลี่ยมคางหมู = ½ x ผลบวกของด้านคู่ขนาน x สูง
2. ตัวแปรที่ใช้ คือ
w1 ใช้เก็บความยาวของด้านคู่ขนานด้านที่ 1 ของรูปสี่เหลี่ยมคางหมู
w2 ใช้เก็บความยาวของด้านคู่ขนานด้านที่ 2 ของรูปสี่เหลี่ยมคางหมู
h ใช้เก็บความสูงของรูปสี่เหลี่ยมคางหมู
Area ใช้เก็บพื้นที่ของรูปสี่เหลี่ยมคางหมู
3. ข้อมูลนำเข้า คือ ค่าของ w1, w2, และ h
4. ผลลัพธ์ คือ คำนวณพื้นที่ของรูปสี่เหลี่ยมคางหมู จากสูตร
ขั้นตอนการทำงาน
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 ใช้เก็บผลบวก
นั่นคือ ค่าของตัวบวกตัวใหม่
จะได้มาจากการนำค่าของตัวบวกเดิมมาบวกด้วย 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
รูปที่ 8 โฟลวชาร์ตแสดงการแปลงค่าจาก ค.ศ. ไปเป็น พ.ศ.
โดยอาศัยหลักการทำงานของโปรแกรมหลักร่วมกับการทำงานของโปรแกรมย่อย
ไม่มีความคิดเห็น:
แสดงความคิดเห็น