การแก้ปัญหา
บทที่ 2 การแก้ปัญหา
จุดประสงค์ของบทเรียน
1. นักเรียนสามารถอธิบายขั้นตอนการแก้ปัญหาได้
2. นักเรียนสามารถวางแผนการแก้ปัญหาโดยใช้รหัสลำลองและผังงาน
3. นักเรียนสามารถแก้ปัญหาตามขั้นตอนการแก้ปัญหา
2.1 ขั้นตอนการแก้ปัญหา
การแก้ปัญหาเป็นกิจกรรมพื้นฐานในการดำรงชีวิตของมนุษย์ ปัญหาบางปัญหาสามารถหาคำตอบได้ในทันที ขณะที่บางปัญหาใช้เวลานานในการค้นหาคำตอบ อย่างไรก็ตามทุกคนต่างต้องการหาวิธีการในการแก้ปัญหาที่ทำให้ได้คำตอบที่ถูกต้องในเวลารวดเร็ว
การแก้ปัญหา ประกอบด้วย 4 ขั้นตอนดังรูป 2.1 คือ
1. วิเคราะห์และกำหนดรายละเอียดของปัญหา เป็นการทำความเข้าใจเกี่ยวกับรายละเอียดเงื่อนไข ข้อกำหนด รวมถึงข้อจำกัดต่าง ๆ ของปัญหา ข้อมูลที่จำเป็นในการแก้ปัญหา ตรวจสอบว่ามีข้อมูลเพียงพอหรือไม่ จะหาข้อมูลเพิ่มเติมให้ครบถ้วนต่อการใช้แก้ปัญหาได้อย่างไร ข้อมูลผลลัพธ์ที่ได้คืออะไร และจะตรวจสอบความถูกต้องของผลลัพธ์ที่ได้อย่างไร
2.การวางแผนการแก้ปัญหา เครื่องมือที่ใช้ในการวางแผนการแก้ปัญหา สำหรับการพัฒนาโปรแกรม อาจเลือกใช้รหัสลำลอง หรือผังงาน โดยวิธีการแก้ปัญหาที่ได้เรียกว่า ขั้นตอนวิธีหรืออัลกอริทึม (algorithm) ซึ่งเป็นลำดับขึ้นตอนในการแก้ปัญหาหรือการทำงานที่ชัดเจน
3.การดำเนินการปัญหา เป็นกระบวนการที่ได้วางแผนไว้มาปฏิบัติ หรือพัฒนาโปรแกรมเพื่อแก้ปัญหา โดยอาจใช้ภาษาโปรแกรมช่วยในการดำเนินการ
4. การตรวจสอบและประเมินผล ขั้นตอนนี้จะทำควบคู่ไปกับขั้นตอนการดำเนินการแก้ปัญหา โดยการตรวจสอบผลลัพธ์ที่ได้ไม่ถูกต้อง หรือยังมีส่วนที่ต้องแก้ไขปรับปรุงอยู่ ต้องย้อนกลับไปทำซ้ำตั้งแต่ขั้นตอนแรกจนกว่าจะได้ผลลัพธ์ที่ถูกต้อง
ตัวอย่างที่ 2.1 การหาค่ามากที่สุดของจำนวนสามจำนวนที่กำหนดให้
การแก้ปัญหามีขั้นตอนดังนี้
ขั้นตอนที่ 1 การวิเคราะห์และกำหนดรายละเอียดของปัญหา
ข้อมูลเข้า จำนวนสามจำนวน ได้แก่ a, b และ c
ข้อมูลออกหรือสิ่งที่ต้องการ ตัวเลขที่มีค่ามากที่สุดของเลขสามจำนวน
วิธีตรวจสอบความถูกต้อง ดำเนินการหาตัวเลขที่มากที่สุดด้วยตนเอง โดยกำหนดชุดตัวเลข 3 จำนวน เช่น 8, 7 และ 12 ในกรณีนี้ตัวเลขที่มีค่ามากที่สุด คือ 12
ขั้นตอนที่ 2 การวางแผนการแก้ปัญหา
2.1 เปรียบเทียบ a และ b เพื่อหาค่ามากกว่าระหว่างสองจำนวน
2.2 นำค่าที่ได้มาเปรียบเทียบกับ c เพื่อหาค่าที่มากกว่า
2.3 ค่าที่มากที่สุดคือ ผลลัพธ์ที่ได้จากขั้นตอนที่ 2.1
ขั้นตอนที่ 3 การดำเนินการแก้ปัญหาดำเนินการทดสอบตามขั้นตอนที่วางแผนไว้กับชุดตัวเลขที่กำหนดโดยสมมติ a, b และ c เป็น 8, 7 และ 12
3.1 เปรียบเทียบเพื่อหาค่าที่มากกว่าระหว่าง 8 และ 7 พบว่า 8 เป็นค่าที่มากกว่า
3.2 เปรียบเทียบเพื่อหาค่ามากกว่าระหว่าง 8 และ 12 พบว่า 12 เป็นค่าที่มากกว่า
3.3 ค่าที่มากที่สุดของ 8, 7 และ 12 คือ 12
ขั้นตอนที่ 4 การตรวจสอบและปรับปรุง
เมื่อพิจารณาคำตอบที่ได้คือ 12 กับค่าที่เหลือซึ่งได้แก่ 8 และ 7 พบว่า 12 มีค่ามากกว่าค่าที่เหลือทั้งคู่ คำตอบนี้จึงเป็นคำตอบที่ถูกต้องตามข้อกำหนดของสิ่งที่ต้องการ
แนวคิดข้างต้นใช้งานได้เนื่องจากว่าหากพิจารณาจำนวนสามจำนวนใด ๆ เมื่อ a > b และ b > c แล้ว a > c ด้วย
จากตัวอย่างแม้ว่าเราจะไม่ได้นำค่า 12 มาเปรียบเทียบกับ 7 โดยตรง แต่เราได้นำมาเปรียบเทียบกับ 8 ซึ่ง 8 ถูกตรวจสอบมาก่อนหน้านี้แล้วว่ามากกว่า 7 เพราะฉะนั้น 12 จึงมากกว่า 7 ด้วย
2.2 การเขียนรหัสลำลองและผังงาน
กระบวนการในการออกแบบแนวทางการแก้ปัญหานั้น จะต้องถ่ายทอดความคิด และความเข้าใจไปสู่การนำไปสู่การนำไปปฏิบัติได้ การถ่ายทอดความคิดจะต้องมีจุดเริ่มต้น จุดสิ้นสุด และลำดับก่อนหลังที่ชัดเจน อาจอยู่ในรูปของข้อความที่เรียงกันเป็นลำดับซึ่งเรียกว่า รหัสลำลอง (pseudo code) หรือยู่ในรูปผังงาน (flowchart)
2.2.1 รหัสลำลอง
การเขียนรหัสลำลองเป็นการใช้คำบรรยายอธิบายขั้นตอนอย่างชัดเจนในการแก้ปัญหา หรือการทำงานของโปรแกรม ซึ่งรูปแบบการเขียนจะขึ้นอยู่กับประสบการณ์ และความถนัดของผู้เขียน
ตัวอย่างที่ 2.2 รหัสลำลองการคำนวณหาพื้นที่สามเหลี่ยม
2.2.2 ผังงาน
ผังงานเป็นเครื่องมือหนึ่งที่ใช้ในการวางแผนหรืออกแบบการแก้ปัญหา เพื่อให้สามารถนำไปปฏิบัติตามหรือเขียนโปรแกรมเพื่อสั่งให้เครื่องคอมพิวเตอร์ทำงานได้ง่าย สถาบันมาตรฐานแห่งชาติอเมริกา (The American Nation Standard Institute : ANSI) ได้กำหนดสัญลักษณ์ที่เป็นมาตรฐานในการเขียนผังงานไว้ ซึ่งในที่นี้จะแนะนำ การใช้งาน 5 สัญลักษณ์พื้นฐาน ดังตาราง 2.1
ตาราง 2.1 สัญลักษณ์พื้นฐานสำหรับการเขียนผังงาน
จากตัวอย่างที่ 2.2 สามารถเขียนเป็นผังงานได้ดังนี้
ตัวอย่างที่ 2.3 ผังงานการคำนวณหาพื้นที่สามเหลี่ยม
บางครั้งในการเขียนรหัสลำลอง หรือผังงานจะมีชื่อข้อมูลที่ยาจนทำให้เกิดความสับสน เพื่อให้เขียนได้ง่ายและกระชับสามารถแทนชื่อข้อมูลด้วยตัวแปร (variable) ซึ่งอาจเป็นตัวภาษาอังกฤษ
2.3 การกำหนดค่าให้ตัวแปร
การกำหนดค่าอย่างใดอย่างหนึ่งให้กับตัวแปรสามารถทำได้ 3 วิธี คือ
1. การรับค่าจากภายนอก
2. การกำหนดค่าจากค่าคงที่หรือตัวแปรอื่น
3. การกำหนดค่าจากการคำนวณ
จากตัวอย่างที่ 2.2 และ 2.3 สามารถเขียนรหัสลำลองและผังงานที่ใช้ตัวแปรได้ดังตัวอย่างที่ 2.4
ตัวอย่างที่ 2.4 รหัสลำลองและผังงานที่มีการใช้ตัวแปร
ตัวอย่างที่ 2.5 รหัสลำลองและผังงานที่มีการทำงาแบบมีเงื่อนไข
สถานการณ์ หลังรับประทานข้าว ถ้านักเรียนมีเงินเหลือจะซื้อขนม
ตัวอย่างที่ 2.6 รหัสลำลองและผังงานที่มีการทำงานแบบวนซ้ำ
สถานการณ์ นักเรียนร่วมวิ่งแข่งขันในงานกีฬาของหมู่บ้าน ซึ่งหากไม่ครบ 5 กิโลเมตรจะไม่หยุดวิ่ง
2.4 ภาษาโปรแกรม
ภาษาโปรแกรมคอมพิวเตอร์มีวิวัฒนาการมายาวนาน นับตั้งแต่การสั่งงานคอมพิวเตอร์ด้วยภาษาเครื่องที่ประกอบด้วยเลข 0 และ 1 เมื่อเราเขียนโปรแกรมแล้วจึงต้องมีการแปลให้เป็นภาษาเครื่องก่อน
ตัวแปรภาษาโปรแกรมมี 2 ประเภท คือ
1. คอมไพเลอร์ (compiler) จะแปลโปรแกรมทั้งโปรแกรมให้ถูกต้อง จึงจะได้ผลลัพธ์เป็นโปรแกรมภาษาเครื่องที่นำไปสั่งงานคอมพิวเตอร์ได้ ภาษาที่ต้องแปลด้วยคอมไพเลอร์ เช่น C, C++, Java
2. อินเทอร์พรีเตอร์ (interpreter) จะแปลคำสั่งในโปรแกรมทีละคำสั่งให้เป็นภาษาเครื่อง ส่งให้คอมพิวเตอร์ทำงานทันทีโดยไม่ต้องรอให้แปลเสร็จทั้งโปรแกรม เช่น Python, Logo
สรุปท้ายบท
ปัญหาที่นักเรียนพบในชีวิตประจำวันบางปัญหาสามารถหาคำตอบได้ในทันที ขณะที่บางปัญหาอาจต้องใช้เวลาในการค้นหาคำตอบ การปฏิบัติตามขั้นตอนการแก้ปัญหาจะทำให้ได้วิธีการแก้ปัญหาที่มีประสิทธิภาพ เริ่มจากทำความเข้าใจกับปัญหา โดยวิเคราะห์และกำหนดรายละเอียดของปัญหา พิจารณาว่าสิ่งที่ต้องการคืออะไร ข้อมูลเข้าจะเป็นสิ่งใดบ้าง เคยแก้ปัญหาลักษณะเดียวกันมาก่อนหรือไม่ ข้อมูลและเงื่อนไขที่กำหนดให้เพียงพอที่จะหาคำตอบหรือไม่ ถ้าไม่เพียงพอก็จำเป็นต้องหาข้อมูลเพิ่มเติม หลังจากทำความเข้าใจกับปัญหาแล้วให้วางแผนหรือออกแบบอัลกอริทึมในการหาคำตอบโดยใช้เครื่องมือรหัสลำลองหรือผังงาน หลังจากนั้นดำเนินการเขียนโปรแกรม สุดท้ายตรวจสอบผลลัพธ์ว่าถูกต้องหรือไม่ ถ้ายังไม่ถูกต้องก็ดำเนินการปรับปรุงให้ถูกต้อง