การเขียนโปรแกรมในแบบที่คอมพิวเตอร์เข้าใจได้

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

การตีโจทย์ปัญหาไปเป็นภาษาคอมพิวเตอร์ (Problem Solving)

การตีโจทย์ปัญหาไปเป็นภาษาคอมพิวเตอร์เรียกว่า ”ศาสตร์แห่งการแก้ปัญหา หรือ Problem Solving“ เป็นวิธีการทำความเข้าใจเกี่ยวกับปัญหาต่างๆ แล้วแปลงไปเป็นภาษาที่คอมพิวเตอร์เข้าใจ และแก้ปัญหาให้กับเราได้ สำหรับวิธีการที่ใช้แปลงจากปัญหาต่างๆ ไปเป็นภาษาคอมพิวเตอร์นิยมเรียกว่า ”อัลกอริทีม (Algorithm)“ เป็นวิธีการจำแนก และแยกย่อยปัญหาออกเป็นขั้นเป็นตอนอย่างเป็นระบบโดยพิจารณาตั้งแต่ข้อมูลที่ใช้ประมวลผล วิธีการคำนวณ และเอาต์พุตที่ต้องการ

อัลกอริทึมที่ดีต้องประกอบไปด้วย

1.มีการแบ่งย่อยปัญหา และมีลำดับการทำงานที่ชัดเจน

2.ปัญหาเป็นเหตุเป็นผลที่สามารถพิสูจน์ได้

3.ภาษาที่ใช้อธิบายต้องไม่ซับซ้อนและเข้าใจง่าย

4.ลดความกำกวม และการตีความที่ต่างกันให้เหลือน้อยที่สุด

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

1. ถ้านักเรียนไม่เข้าเรียนวิชาคณิตศาสตร์ เป็นปัญหาย่อยที่ 1 ส่งผลให้

2. นักเรียนจะไม่มีสิทธิ์สอบปลายภาค เป็นปัญหาย่อยที่ 2

3. ถ้านักเรียน... → จะไม่มี...เป็นเหตุเป็นผล และลำดับการทำงาน

อัลกอริทึมและโฟลว์ชาร์ต (Algorithm and Flowchart)

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

อัลกอริทีมการต้มบะหมี่กึ่งสำเร็จรูป

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

ขั้นตอน ตำอธิบาย
1 เทบะหมี่กึ่งสำเร็จรูปลงในน้ำ แล้วนำไปต้มจนเดือด
2 เมื่อบะหมี่สุกแล้ว เทน้ำที่ต้มบะหมี่ทิ้ง เพื่อเป็นการเทแว็กซ์ (Wax) ผสมผงชูรสที่เป็นสารพิษทิ้ง
3 ต้มน้ำสะอาดจนเดือดและใส่เส้นบะหมี่ที่ต้มสุก แล้วปิดไฟทันที
4 ใส่เครื่องปรุงในขณะที่น้ำยังร้อน (ผงชูรสในเครื่องปรุงจะได้ไม่กลายเป็นสารพิษ)
5 ถ้าเป็นบะหมี่ชนิดแห้ง ให้เทน้ำครั้งที่สองออก แล้วก็ปรุงรสตามปกติ
6 รับประทาน

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

การเขียนโฟลว์ชาร์ต (Flowchart)

โฟลว์ชาร์ตหรือผังงาน เป็นวิธีการที่ใช้อธิบายอัลกอริทึมอย่างเป็นขันตอน โดยอาศัยรูปภาพและ สัญลักษณ์ (Symbol) ในหนังสือเล่มนี้จะกล่าวเฉพาะสัญลักษณ์ที่นิยมใช้กันโดยทั่วไป ซึ่งมีทั้งหมด 5 แบบ ดังนี้

ชื่อสัญลักษณ์ สัญลักษณ์ ความหมาย
วงกลมหรือวงรี (Start/Stop) ใช้สำหรับระบุเป็นจุดเริ่มต้น (Start) และจุดสิ้นสุด (Stop) ของโปรแกรมใช้สำหรับระบุเป็นจุดเริ่มต้น (Start) และจุดสิ้นสุด (Stop) ของโปรแกรม
สี่เหลี่ยมด้านขนาน (Input/Output) ใช้สำหรับระบุเป็นอินพุตหรือเอาต์พุต (1/0) ระหว่าง ผู้ใช้งานกับคอมพิวเตอร์หรือโปรแกรม
สี่เหลี่ยมผืนผ้า (Process) ใช้สำหรับการคำนวณหรือประมวลผล (Process) ของคอมพิวเตอร์
สี่เหลี่ยมขนมเปียกปูน (Decison) ใช้สำหรับระบุทางเลือกหรือเงื่อนไขในกรณีที่เกิดการ ตัดสินใจมากกว่า 1 เส้นทาง
ลูกศร (Direction) ใช้สำหรับระบุถึงทิศทางการทำงานของโปรแกรม (ขึ้น ลง ซ้าย หรือขวา)

สำหรับขั้นตอนการเขียนโฟลว์ชาร์ตจะเริ่มต้นด้วยสัญลักษณ์รูปวงรี และเขียนข้อความข้างในวงรีดังกล่าวว่า ”เริ่มต้น หรือ Star!“ ซึ่งบ่งบอกว่าโปรแกรมเริ่มต้น ณ จุดนี้ ขั้นตอนถัดไปโปรแกรม ส่วนใหญ่จะพิมพ์ข้อความออกทางจอภาพ เพื่อบอกให้ผู้ใช้งานทราบว่าจะโต้ตอบกับโปรแกรมอย่างไร ซึ่งจะใช้สัญลักษณ์สี่เหลี่ยมด้านขนาน เมื่อรับข้อมูลเข้ามาในโปรแกรมแล้วต้องการคำนวณ ให้ใช้สัญลักษณ์สี่เหลี่ยมผืนผ้า และถ้าเกิดการตัดสินใจมากกว่า 1 ทางเลือกในโปรแกรม ให้ใช้สัญลักษณ์สี่เหลี่ยมขนมเปียกปูน โดยแต่ละขั้นตอนจะเชื่อมต่อด้วยลูกศร เพื่อบ่งบอกทิศทางของโปรแกรม สุดท้ายจะต้องจบ ด้วยสัญลักษณ์วงรีที่มีข้อความว่า ”หยุด หรือ Stop“ เสมอ เพื่อบอกว่าโปรแกรมจบการทำงานแล้ว

ตัวอย่างการเขียนโฟลว์ชาร์ต

เมื่อเด็กชายกลับมาจากโรงเรียนแล้ว เข้าต้องทำการบ้านให้เสร็จก่อน แล้วจึงจะเล่นเกมได้

Programming Languages

1.โฟลว์ชาร์ตเริ่มต้นจากเด็กชายทวีกลับมาจากโรงเรียนแล้ว และเริ่มทำการบ้าน

2.ถ้าการบ้านที่เขาทำยังไม่เสร็จเรียบร้อย

3.เขาจะไม่ได้รับอนุญาตให้เล่นเกมของเขาได้ เขาต้องทำการบ้านต่อไปเรื่อยๆ

4.เมื่อเวลาผ่านไป เขาทำการบ้านเสร็จแล้วจึงจะเล่นเกมได้

5.และโปรแกรมก็จะจบการทำงาน เมื่อเขาได้เล่นเกม

การเขียนซูโดโค้ด (Pseudo Code)

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

คำสั่ง คำอธิบาย
อินพุต (Input) อินพุตที่ป้อนให้กับโปรแกรมคืออะไร
เอาต์พุต (Output) เอาต์พุดที่ต้องการคืออะไร
อ่านค่า (Read) อ่านข้อมูลเข้ามาประมวลผล
เขียน (Write) แสดงผลข้อมูล
กำหนดให้ (Set) กำหนดค่าให้กับตัวแปรต่าง ๆ ในโปรแกรม
เคลียร์ค่าข้อมูล (Reset) เคลียร์ค่าข้อมูลของตัวแปรให้เป็น 0
คำนวณหรือประมวลผล (Compute/Calculate) คำนวณหรือประมวลผลข้อมูล
บวกค่า ลบ คูณ และหาร (Add/Sub/Multiply/Divide) หาผลรวม/ลบ/คูณ หรือผลหารของข้อมูล
ทำ...จนกระทั่ง (Do...while) ทำจนกว่าเงื่อนไขเป็นเท็จ
ทำจนกว่า... (While) ทำจนกว่าเงื่อนไขจะเป็นจริง
ถ้า...แล้ว... (If.…then...) ถ้าเงื่อนไขเป็นจริงจะทำหลัง then
ในกรณีที่... (Case...end) เลือกทำเงื่อนไขใดเงื่อนไขหนึ่ง
เรียก... (Call) เรียกฟังก์ชันให้ทำงาน
กลับ (Return) สั่งให้กลับจากฟังก์ชัน
จบ (End) จบโปรแกรม

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

ตัวอย่างการเขียนซูโดโค้ด

เมื่อเด็กชายทวีกลับมาจากโรงเรียนแล้ว เขาต้องทำการบ้านให้เสร็จก่อน แล้วจึงจะเล่นเกมได้ (เหมือนในตัวอย่างที่ 2 ของการเขียนด้วยโฟลว์ชาร์ต)

อัลกอรึทึม : ตรวจสอบการทำการบ้าน และการเล่นเกมของเด็กชายทวี

อินพุต: การบ้าน

เอาต์พุต : เล่นเกมได้

ทำ การบ้าน

ทำการบ้าน

จนกระทั่ง การบ้านเสร็จหรือยัง? ถ้ายังให้กลับไปทำให้เสร็จ (กลับไป "ทำ การบ้าน" บรรทัดที่3)

พิมพ์ ข้อความออกจอภาพ "คุณภาพสามารถเล่นเกมได้"

จบ

ซูโดโค้ดกับโฟลว์ชาร์ตแบบไหนดีกว่ากัน

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

ข้อดีของการแปลงซูโดโค้ด

สำหรับการแปลงซูโดโค้ดไปเป็นภาษาไพธอนทำได้เช่นเดียวกับโฟลว์ชาร์ต แต่เป็นที่น่าสังเกตว่า ซูโดโค้ดจะแปลงได้ง่ายกว่าโฟลว์ชาร์ตมาก เนื่องจากรูปแบบภาษามีความใกล้เคียงกัน ไม่ต้องตีความหมายจากภาพไปเป็นภาษาไพธอนเหมือนกับโฟลว์ชาร์ต

การแปลงโฟลว์ชาร์ตและซูโดโค้ด (Converting flowchart and pseudo)

จากตัวอย่างที่ 1 ตรวจสอบการไปโรงเรียนสายของเด็กชายทวี สามารถถอดรูปจากโฟลว์ชาร์ตให้กลายเป็นโปรแกรมภาษาไพธอนได้ดังนี้

โฟลว์ชาร์ต

Programming Languages

โปรแกรม

1.# Check out the boys’ school line

2.Time = float(intput(”Enter your time =“))

3.if Time > 7.0 then

5.print(”Your are late“)

4.else print(”Your aren‘t late“)

6.


1.(วงรีที่มีข้อความ Start) โปรแกรมเริ่มต้นการทำงาน ในส่วนนี้ผู้เขียนโปรแกรมอาจจะเขียนคำอธิบายโปรแกรม เพื่อบอกว่าโปรแกรมดังกล่าวทำงานอะไร โดยคำอธิบายจะอยู่หลังเครื่องหมาย ’#?หมายถึง ไพธอนจะไม่แปลความหมาย 2.(สี่เหลี่ยมด้านขนาน) จากโฟลว์ชาร์ตจะถูกแปลงเป็นคำสั่ง input ที่รับข้อมูลเข้ามาเป็นชนิดจำนวนจริง (float) 3.(สี่เหลี่ยมขนมเปียกปูน) จะถูกแปลงเป็นคำสั่งตรวจสอบเงื่อนไข (if..then) ว่า ถ้า Time มากกว่า 7.0 จริง โปรแกรมจะทำงานหลังคำสั่ง then ในขั้นตอนที่ 5.จะพิมพ์ข้อความว่า ”You are late“ แต่ถ้า Time น้อยกว่าหรือเท่ากับ 7.0 จะทำในขั้นตอนที่ 4.ซึ่งเมื่อแปลงจากโฟลว์ชาร์ตมาเป็นโปรแกรมจะอยู่หลังคำสั่ง else นั่นคือ โปรแกรมจะพิมพ์ข้อความว่า ”You aren‘t late“ 6.(วงรีที่มีข้อความ Stop) เมื่อสิ้นสุดแล้วโปรแกรมจะจบการทำงาน

Programming Languages

สรุปท้ายบท

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