หลักการแก้ปัญหาด้วยคอมพิวเตอร์
6.1 หลักการแก้ปัญหา
ในชีวิตประจำวันทุกคนต้องเคยพบกับปัญหาต่างๆ ไม่ว่าจะเป็นปัญหาด้านการเรียน การงาน การเงิน หรือแม้แต่ในกาเล่นเกม จนอาจกล่าวได้ว่าการแก้ปัญหาเป็นกิจกรรมพื้นฐานอย่างหนึ่งของมนุษย์ เอพบกับปัญหาแต่ละคนมีวิธีที่จะจัดการหรือแก้ปัญหาเหล่านั้นแตกต่างกันไปซึ่งแต่ละวิธีการอาจเหมือนหรือแตกต่างกัน ทั้งนี้ขึ้นอยู่กับความรู้ ความสามารถ และประสบการณ์ของแต่ละบุคคลอย่างไรก็ตาม เมื่อได้มีการนำวิธีการแก้ปัญหาต่างๆมาวิเคราะห์ จะพบว่าวิธีการเหล่านี้สามารถสรุปเป็นทฤษฎีซึ่งมีรูปแบบที่แน่นอนได้ และปัญหาบางลักษณะอาจต้องอาศัยความรู้ในระดับสูงเพื่อแก้ไขได้อย่างสมบูรณ์แบบ ในบทนี้ผู้เรียนจะได้ศึกษาเกี่ยวกับหลักและวิธีการแก้ปัญหาด้วยคอมพิวเตอร์ และการนำภาษาโปรแกรมคอมพิวเตอร์และเครื่องมือต่างๆมาช่วยในการแก้ปัญหาโดยทั่วไป การแก้ปัญหาใดปัญหาหนึ่งอาจทำได้หลายวิธี ตัวอย่างเช่น ปัญหาจากการเล่นเกมทายใจในตัวอย่างที่ 6.1 ต่อไปนี้ ก็สามารถแก้ได้หลายวิธีเช่นกัน เพียงแต่ว่าแต่ละวิธีที่แตกต่างกันจะทำให้ผู้เล่นเกมแก้ปัญหาได้ช้าเร็วไม่เท่ากัน
ตัวอย่างที่ 6.1 เกมทายใจ (Master mind)
เกมทายใจ คือ เกมที่จะให้ผู้เล่นทายตัวเลข 3 ตัว โดยต้องทายถูกทั้งตัวเลขและตำแหน่งซึ่งต้องใช้ผู้เล่น 2 คน ผู้เล่นคนที่หนึ่งกำหนดตัวเลข 3 ตัวที่ไม่ซ้ำกัน โดยเลือกจากตัวเลข 1-9 และผู้เล่นคนที่สองจะทายคำตอบ การทายตัวเลขแต่ละครั้ง ผู้เล่นคนที่หนึ่งต้องแจ้งผลการทายว่าตัวเลขที่ทายนั้นถูกต้องกี่ตัว และถูกต้องกี่ตำแหน่ง ตัวอย่างเช่น ถ้าตัวเลขที่กำหนดไว้เป็น 8 1 5 และผู้เล่นคนที่สองทายว่า 1 2 3 ผู้เล่นคนทีหนึ่งต้องแจ้งว่าตัวเลขที่ทายนั้นถูกเพียงตัวเดียว และไม่มีตัวใดถูกตำแหน่ง
ตัวอย่างที่ 6.1 ตัวอย่างการเล่นเกมทายใจ
เลขที่ทาย
|
จำนวนตัวเลขที่ถูก
|
จำนวนตำแหน่งที่ถูก
|
123 1 -
415 2 2
416 1 1
715 2 2
815 3 3
| ||
วิธีการเหล่านี้ล้วนมีขั้นตอนหลักที่คล้ายคลึงกัน ซึ่งประกอบด้วย 4 ขั้นตอน
[1] การวิเคราะห์และกำหนดรายละเอียดของปัญหา
[2] การเลือกเครื่องมือและการออกแบบขั้นตอนวิธีในการแก้ปัญหา
[3] การดำเนินการแก้ไขปัญหา
[4] การตรวจสอบและปรับปรุงวิธีการ
(1) การวิเคราะห์และกำหนดรายละเอียดของปัญหา
ขั้นตอนแรกของการแก้ปัญหาใดๆก็ตาม จะต้องเริ่มต้นด้วยการทำความเข้าใจกับปัญหาให้ถ่องแท้ เพื่อวิเคราะห์เงื่อนไขของปัญหาให้ชัดเจน รวมไปถึงข้อมูลที่จำเป็นในการแก้ปัญหาและรูปแบบหรือลักษณะของผลลัพธ์หรือคำตอบที่ต้องการโดยสิ่งเหล่านี้จะเป็นประโยชน์ในการเลือกวิธีการแก้ปัญหาต่อไป กล่าวโดยสรุป การวิเคราะห์และกำหนดรายละเอียดของปัญหามีองค์ประกอบดังนี้
1.1 การระบุข้อมูลออก
1.2 การระบุข้อมูลเข้า
1.3 ราบละเอียดของปัญหา
ข้อมูลออกหรือคำตอบคือสิ่งที่โจทย์ต้องการในการแก้ปัญหาด้วยคอมพิวเตอร์ จำเป็นต้องระบุให้ชัดเจนว่าสิ่งที่ต้องการให้เป็นผลลัพธ์ของปัญหาคืออะไร และต้องการให้แสดงออกในรูปแบบใด เช่น การประมวล ผลข้อมูลการเบิกถอนเงินจากเครื่องเอทีเอ็ม ต้องมีการแสดงข้อมูลออกเป็นจำนวนเงินที่ถอนไป และจำนวนเงินคงเหลือในบัญชี อีกทั้งยังต้องออกแบบการจัดวางข้อมูลเหล่านี้เพื่อพิมพ์ลงในใบบันทึกรายการด้วย1.2 การระบุข้อมูลเข้า
ข้อมูลเข้า คือ ข้อมูลเริ่มต้นหรือเงื่อนไขที่โจทย์กำหนดมาให้ตั้งแต่แรก ในการแก้ปัญหา ผู้แก้ปัญหาจะต้องใช้ข้อมูลเหล่านี้ในการประมวลผลเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ ตัวอย่างเช่น การเบิกถอนเงินด้วยบัตรเอทีเอ็มข้างต้น ผู้ถอนเงินต้องมีข้อมูลระบุตัวตนว่าเป็นเจ้าของบัญชีตัวจริง ได้แก่ บัตรเอทีเอ็ม และรหัสประจำตัว 4 หลัก และยังต้องระบุข้อมูลให้ครบถ้วนว่าต้องการเบิกถอนจากบัญชีใดเป็นจำนวนเงินเท่าใด เป็นต้น
1.3 รายละเอียดของปัญหา
รายละเอียดของปัญหา คือ การพิจารณาความต้องการของปัญหา ตัวอย่างที่ 6.2 และ 6.3 ต่อไปนี้ แสดงรายละเอียดแต่ละขั้นตอนของตัวอย่างปัญหา
ตัวอย่างที่ 6.2
องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดรายละเอียดขอปัญหาสามารถแสดงได้ดังนี้
ข้อมูลออก
|
ข้อมูลเข้า
|
รายละเอียดของปัญหา
|
ค่าเฉลี่ย จำนวนเต็ม 5 จำนวน คำนวณหาค่าเฉลี่ย
ของจำนวนเต็ม 5 จำนวน คือ 0 3 4 8 และ 12 ของจำนวนเต็ม 5 จำนวน
| ||
ตัวอย่างที่ 6.3
องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดราบละเอียดของปัญหาสามารถแสดงได้ดังนี้
ข้อมูลออก
|
ข้อมูลเข้า
|
รายละเอียดของปัญหา
|
ค่า x - จำนวนเต็ม 4 จำนวน คือ 3 4 8 คำนวณหาค่า x ที่ทำให้ค่าเฉลี่ย
และ 12 ของ 3 4 8 12 และ x เท่ากับ 10
- ค่าเฉลี่ย
| ||
(2) การเลือกเครื่องมือและออกแบบขั้นตอนวิธีในการแก้ปัญหา
เมื่อได้รายละเอียดเบื้องต้นของปัญหา รวมทั้งวิธีการประมวลผลแล้ว ขั้นตอนต่อไปเป็นการตัดสินใจว่าจะใช้เครื่องมือใดในการแก้ปัญหา ถ้าหากเป็นปัญหาทั่วไปในชีวิตประจำวันหรือปัญหาทางคณิตศาสตร์ง่ายๆ ในตัวอย่าง 6.2 และ 6.3 อาจไม่ต้องใช้เครื่องมือพิเศษในการแก้ปัญหา แต่ใช้เพียงการคำนวณด้วยกระดาษทด หรือเครื่องคิดเลขก็สามารถหาคำตอบได้แล้ว ตัวอย่างเครื่องมือในการแก้ปัญหา
สำหรับปัญหาที่มีขั้นตอนในการแก้ปัญหาอย่างซับซ้อน หรือต้องมีการแก้ปัญหาในลักษณะเดิมซ้ำอีกหลายครั้ง จำเป็นต้องใช้คอมพิวเตอร์เป็นอุปกรณ์ในการแก้ปัญหา โดยเขียนโปรแกรมเพื่อรับข้อมูลไปประมวลผล และยังต้องเลือกว่าจะใช้โปรแกรมคอมพิวเตอร์ภาษาใด ซึ่งขึ้นอยู่กับความคุ้นเคยในการใช้งานของผู้เขียนโปรแกรม และลักษณะเฉพาะของแต่ละภาษาที่เหมาะสมกับปัญหานั้นๆ
ในการแก้ปัญหาโดยใช้คอมพิวเตอร์นั้น การออกแบบวิธีแก้ปัญหาอย่างเป็นขั้นเป็นตอนและง่ายต่อการทำความเข้าใจเป็นสิ่งสำคัญมาก เพราะจะทำให้สามารถเขียนโปรแกรมจากขั้นตอนที่ได้ออกแบบไว้อย่างง่ายดาย เครื่องมือที่ใช้เพื่อการออกแบบขั้นตอนวิธี เช่น รหัสลำลอง (Pseudo code) ซึ่งเป็นการจำลองขั้นตอนวิธีแก้ปัญหา โดยการอธิบายด้วยคำพูดที่เข้าใจได้ง่ายเป็นขั้นๆ หรือผังงาน (Flowchart) ซึ่งเป็นการใช้สัญลักษณ์ในการแสดงรายละเอียดและลำดับของแต่ละขั้นตอนที่ใช้แก้ปัญหา ข้อดีอีกประการหนึ่งของการใช้เครื่องมือเหล่านี้ช่วยในการออกแบบวิธีปัญหาคือ จะทำให้สามารถตรวจสอบความถูกต้อง หาจุดผิดพลาด และแก้ไขขั้นตอนในการแก้ปัญหาที่ซับซ้อนได้อย่างรวดเร็ว นักเขียนโปรแกรมจึงควรฝึกฝนการใช้งานเครื่องมือเหล่านี้ให้เชี่ยวชาญ ตัวอย่างการเขียนรหัสลำลองและผังงาน
(3) การดำเนินการแก้ปัญหา
การดำเนินการแก้ปัญหา เป็นขั้นตอนการใช้โปรแกรมประยุกต์หรือโปรแกรมหรือภาษาคอมพิวเตอร์นั้นๆ ขั้นตอนนี้จะสำเร็จได้รวดเร็วหรือช้าขึ้นอยู่กับหลายปัจจัย เช่น ความชัดเจนและถูกต้องของวิธีแก้ปัญหาที่ได้ออกแบบไว้ และความสามารถในการเขียนหรือใช้งานโปรแกรมหรือภาษาคอมพิวเตอร์ที่เลือก ในขั้นตอนนี้ผู้พัฒนาควรคำนึงถึงความยืดหยุ่นของโปรแกรมที่ได้ออกแบบขึ้นด้วย เพื่อให้สามารถรองรับการเปลี่ยน แปลงที่อาจเกิดขึ้นในอนาคต เช่น การเปลี่ยนแปลงข้อมูลเข้า การเปลี่ยนรูปแบบของข้อมูลออกหรือวิธีการประมวลผลที่เปลี่ยนไป นอกจากนี้โปรแกรมควรต้องรองรับการขยายตัวในอนาคตได้อีกด้วย
(4) การตรวจสอบและปรับปรุงวิธีการ
ในขั้นตอนนี้เป็นการตรวจสอบเพื่อให้แน่ใจว่าวิธีการแก้ปัญหารวมทั้งโปรแกรมที่พัฒนาขึ้นให้ผลลัพธ์ถูกต้อง โดยต้องตรวจสอบว่าขั้นตอนวิธีที่สร้างขึ้นสอดคล้องกับรายละเอียดของปัญหาซึ่งได้แก่ ข้อมูลเข้า และข้อมูลออกที่ได้ระบุไว้ อีกทั้งยังสามารถรองรับข้อมูลเข้าอื่นๆที่มีลักษณะเดียวกัน
หลังจากที่โปรแกรมทำงานได้ผลตามที่ต้องการแล้ว อาจต้องมีการปรับปรุงให้วิธีการในการแก้ปัญหามีประสิทธิภาพที่สุด โดยยังคงความถูกต้องของผลลัพธ์เช่นเดิม ในขั้นตอนการปรับปรุงขั้นตอนการทำงานของวิธีการแก้ปัญหาให้ดีขึ้น และปรับโปรแกรมที่เขียนขึ้นให้ทีเทคนิคการประมวลผลที่มีประสิทธิภาพขึ้น
6.2 เครื่องมือที่ใช้ในการออกแบบและขั้นตอนวิธีในการแก้ปัญหา
การออกแบบวิธีการแก้ปัญหาเป็นกระบวนการที่ต้องอาศัยประสบการณ์ ความรู้ความเข้าใจในปัญหา และความคิดมีเหตุผลและเป็นขั้นตอนแล้ว ยังต้องอาศัยเครื่องมือที่จะช่วยถ่ายทอดความคิดออกมาเป็นลายลักษณ์อักษร หรือเป็นแผนภาพซึ่งจะช่วยให้สามารถแก้ปัญหาได้ดีโดยเฉพาะปัญหาที่ยุ่งยากซับซ้อนอีกทั้งยังเป็นแนวทางให้ผู้ที่เกี่ยวข้องหรือผู้ดำเนินการปรับปรุงในอนาคตเข้าใจวิธีแก้ปัญหาที่เราพัฒนาขึ้นได้ง่าย เครื่องมือที่ใช้ในการออกแบบวิธีแก้ปัญหามี 2 ลักษณะ คือ6.2.1 รหัสลำลอง
รหัสลำลองเป็นการใช้คำบรรยายเพื่ออธิบายขั้นตอนวิธีในการแก้ปัญหา การเขียนรหัสลำลองไม่มีรูปแบบที่แน่นอน ขึ้นอยู่กับประสบการณ์และความถนัดของผู้เขียน ซึ่งอาจจะเขียนอย่างละเอียดหรือย่อ และในบางครั้งอาจอธิบายในลักษณะคล้ายภาษาพูด หรืออาจจะเขียนในรูปแบบคล้ายภาษาโปรแกรมก็ได้เช่นกัน การใช้รหัสลำลองในการออกแบบวิธีแก้ปัญหามีข้อดีคือ เขียนง่ายผู้เขียนคำนึงถึงเพียงแต่วิธีการแก้ปัญหา โดยไม่ต้องกังวลว่าจะเขียนผิดรูปแบบหรือไม่และถ้าผู้เขียนมีความชำนาญแล้ว การเขียนรหัสลำลองในรูปแบบที่คล้ายกับภาษาโปรแกรมจะทำให้สามารถดัดแปลงไปเป็นโปรแกรมคอมพิวเตอร์ได้โดยง่าย ตัวอย่างที่ 6.4 และ 6.5 ต่อไปนี้แสดงถึงการใช้รหัสลำลองในการถ่ายทอดความคิดเพื่อแก้ปัญหาทั่วไป และปัญหาทางคณิตศาสตร์
ตัวอย่างที่ 6.4
ให้เขียนรหัสลำลองเพื่อถ่ายทอดความคิดขั้นตอนวิธีในการเปลี่ยนยางรถ เมื่อยางแบนในขณะขับรถ. เริ่มต้น
1. จอดรถหลบข้างทาง
2. คลายสกรูยึดล้อออกเล็กน้อย
3. ยกรถด้วยแม่แรง
4. ถอดสกรูยึดล้อ
5. ถอดล้อออก
6. เปลี่ยนยางอะไหล่
7. ขันสกรูยึดล้อให้พอแน่น
8. คลายแม่แรง และนำไปเก็บ
9. ขันสกรูยึดล้อให้แน่น
10. เก็บยางที่แบนเพื่อไปซ้อม
ตัวอย่างที่ 6.5 ให้เขียนรหัสลำลองเพื่อถ่ายทอดความคิดขั้นตอนวิธีในการหาค่าเฉลี่ยของเลขจำนวนเต็ม 5 จำนวน โดยกำหนดให้สามารถรับค่าตัวเลขได้เพียงครั้งละหนึ่งจำนวนเท่านั้น.
เริ่มต้น
1. รับค่าตัวเลขหนึ่งจำนวน
2. บวกค่าตัวเลขเก็บไว้ในค่าผลรวม
3. ถ้าได้ค่าตัวเลขยังไม่ครบ 5 จำนวน ให้กลับไปทำข้อ 1
4. ถ้าได้ตัวเลขครบ 5 จำนวนแล้วให้นำค่าผลรวมจากข้อ 2 มาหารด้วย 5 ได้เป็นผลลัพธ์
5. พิมพ์ผลลัพธ์
6.2.2 ผังงาน
ผังงานเป็นการอธิบายขั้นตอนวิธีการแก้ปัญหาโดยใช้รูปสัญลักษณ์มาเรียงต่อกัน สัญลักษณ์แต่ละแบบจะมีความหมายถึงกระบวนการที่แตกต่างกัน โดยจะมีคำอธิบายสั้นๆเพิ่มเติมในรูปสัญลักษณ์ ความหมายของสัญลักษณ์ต่างๆ ที่ใช้ในผังงานได้ถูกกำเนิดโดยสถาบันมาตรฐานแห่งชาติอเมริกา (The American National Standard Institute: ANSI) เพื่อให้สามารถสื่อความหมายที่ตรงกัน ซึ่งมีรายละเอียดของสัญลักษณ์และความหมายที่ควรทราบ ในการเขียนผังงานมีหลักการ คือ ให้เลือกสัญลักษณ์แทนกระบวนการที่ถูกต้อง และเขียนข้อความสั้นๆ แทนสิ่งที่ต้องกระทำลงในรูปลักษณ์ แล้วนำมาเรียงต่อกัน เชื่อมต่อละสัญลักษณ์ด้วยลูกศร โดยทั่วไปแล้ว จะเรียงลำดับของสัญลักษณ์ไว้จากบนลงล่าง ตามลำดับของการทำงาน หรืออาจจะใช้หัวลูกศรระบุลำดับก่อนหลังของการทำงานก็ได้
การเชื่อมต่อสัญลักษณ์ต่างๆของผังงาน อาจทำให้มีการตัดกันของเส้นลูกศรจนอาจเกิดความสับ สนได้ ผู้เขียนจึงควรเลือกใช้สัญลักษณ์จุดเชื่อมต่อในหน้าเดียวกัน โดยระบุตัวอักษรเดียวกันเพื่อหมายถึงการเชื่อมสองจุดของผังงานเข้าด้วยกัน แต่ถ้าผังงานใหญ่เกินหน้ากระดาษ ให้เลือกใช้สัญลักษณ์จุดเชื่อมต่อหน้ากระดาษ เพื่อเชื่อมระหว่างสองจุดของผังงานที่ข้ามไปอยู่คนละหน้ากัน
ในการคิดค้นหาวิธีแก้ปัญหาหรือประมวลผลข้อมูลด้วยคอมพิวเตอร์ อาจมีความจำเป็นต้องบันทึกหรือพักข้อมูลไว้ที่ใดที่หนึ่ง เพื่อให้สามารถใช้อ้างอิงได้ในภายหลัง ตัวอย่างเช่น การที่จะนับว่ามีการรับตัวเลขเข้ามาเพื่อคำนวณครบ 5 ตัวหรือยัง จะต้องมีการเก็บค่าที่ใช้นับจำนวนเอาไว้ ซึ่งจะเก็บข้ออยู่ใน “ตัวแปร”(variable)ที่มีลักษณะคล้ายคลึงกับตัวแปรทางคณิตศาสตร์ จะต้องมีการตั้งชื่อให้กับตัวแปร มีการกำหนดค่าให้กับตัวแปรและค่าของตัวแปรอาจถูกเปลี่ยนแปลงไปได้ระหว่างที่ทำการประมวล หรือระหว่างการทำงานของโปรแกรมคอมพิวเตอร์
ตัวอย่างที่ 6.7
ให้เขียนรหัสลำลองและผังงานเพื่อถ่ายทอดความคิดขั้นตอนวิธีในการหาค่าเฉลี่ยของจำนวนเต็ม 5 จำนวน โดยกำหนดให้สามารถรับค่าตัวเลขได้เพียงครั้งละหนึ่งจำนวนเท่านั้น และให้ใช้สัญลักษณ์กำหนดค่าร่วมกับตัวแปรในการทำงานเพื่อให้ได้รหัสลำลองและผังงานที่กะทัดรัด
รหัสลำลอง
1.กำหนดค่าเริ่มต้นให้ตัวแปร Counter และ sum เป็น 0
2. รับค่าตัวเลขหนึ่งจำนวน เก็บไว้ในตัวแปร x
3. เพิ่มค่า Counter ขึ้น 1
4.บวกค่าของ Sum เข้ากับ x แล้วเก็บไว้ที่ตัวแปร Sum
5. ถ้าค่าของตัวแปร counter น้อยกว่า 5 วนไปทำข้อ 2 อีกครั้ง แต่ถ้า counter ไม่น้อยกว่า 5 ข้ามไปทำข้อ 6
6. หาค่าของ Sum/5 แล้วเก็บไว้ที่ตัวแปร average
7. พิมพ์ค่าของตัวแปร average จบ
ในตัวอย่างนี้ มีการใช้งานตัวแปรหลายตัวเพื่อเก็บค่าที่แตกต่างกัน ได้แก่ ตัวแปร Counter ซึ่งจะใช้เพื่อเป็นตัวนับว่ามีการรับค่าตัวเลขไปกี่ตัวแล้ว ตัวแปร sum ใช้เพื่อเก็บค่าผลรวมของตัวเลขทุกตัว ซึ่งตัวแปรทั้งสองตัวนี้จะต้องถูกกำหนดค่าให้เป็น 0 ก่อนที่จะใช้งาน สำหรับ x จะใช้เพื่อรับค่าตัวเลขทีละตัวเมื่อรับค่าแล้ว จะถูกนำค่าไปรวมกับค่า sum เป็นการเก็บค่าผลรวม แล้วตัวแปร x จะสามารถถูกนำไปใช้ซ้ำ เพื่อรับค่าตัวเลขตัวถัดไปได้อีก ตัวแปรสุดท้ายคือ average ที่ใช้เพื่อเก็บค่าเฉลี่ยที่หาได้แล้วรอการนำไปแสดงผลต่อไป6.3 โครงสร้างการโปรแกรม
ก่อนการเขียนโปรแกรม ผู้พัฒนาโปรแกรมจะต้องเลือกภาษาคอมพิวเตอร์ ที่จะนำว่าใช้ช่วยงานโดยพิจารณาจากปัจจัยต่างๆ ในการทำงาน เช่น ลักษณะของปัญหา ความถนัดของนักเขียนโปรแกรมสภาพแวดล้อมในการทำงานของระบบคอมพิวเตอร์ เป็นต้น เนื่องจากในปัจจุบันมีภาษาคอมพิวเตอร์ให้เลือกใช้ได้หลายภาษา เช่น ภาษาปาสคาล ภาษาซี ภาษาจาวา และภาษาเดลฟาย ถึงแม้แต่ละภาษาจะมีรูปแบบและหลักการในการสร้างงานที่แตกต่างกันแต่ทุกภาษาจะต้องมีโครงสร้างควบคุมหลักทั้ง 3 แบบ ได้แก่ โครงสร้างแบบลำดับ (Sequential) โครงสร้างแบบทางเลือก (selection structure) และโครงสร้างแบบวนซ้ำ (repetition structure)6.3.1 โครงสร้างแบบลำดับ(sequential structure)
โปรแกรมที่ทำงานเป็นขั้นตอนเพื่อแก้ปัญหาจะทำงานตามคำสั่งที่เขียนไว้ตามลำดับ ตั้งแต่คำสั่งแรกไปจนถึงคำสั่งสุดท้าย โดยที่คำสั่งในที่นี้อาจเป็นคำสั่งเดี่ยวๆ หรือเป็นคำสั่งเชิงซ้อนที่มีหลายคำสั่งย่อยประกอบกันในลักษณะเป็นโครงสร้างแบบทางเลือกหรือแบบวนซ้ำก็ได้
โครงสร้างแบบเรียงลำดับเมื่อเขียนเป็นผังงาน จะมีลักษณะดังเช่นรูปที่ 6.9 และมีกระบวนการทำงานพื้นฐานอยู่ 3 ชนิด ดังแสดงในรูปที่ 6.10 ได้แก่
- การคำนวณ เป็นกระบวนการที่คอมพิวเตอร์ทำการคำนวณ ประมวลผล ซึ่งจะรวมไปถึงการกำหนดค่าให้กับตัวแปร เพื่อให้สามารถนำค่าของตัวแปรนั้นมาใช้ในภายหลังได้
- การรับข้อมูลเข้า เป็นกระบวนการรับข้อมูลจากอุปกรณ์ของหน่วยรับเข้า เช่น คีย์บอร์ด เพื่อนำค่าไปกำหนดให้กับตัวแปร และเก็บไว้ในหน่วยความจำ
- การส่งข้อมูลออก เป็นกระบวนการนำค่าของข้อมูลไปแสดงผลยังอุปกรณ์ของหน่วยส่งออก เช่น จอภาพหรือเครื่องพิมพ์ ข้อมูลที่จะส่งออกโดยทั่วไปจะเป็นค่าคงที่ หรือค่าของตัวแปร
6.3.2 โครงสร้างแบบทางเลือก (Selection structure)
ปัญหาบางอย่างต้องการการตัดสินใจ เพื่อเลือกว่าจะใช้วิธีการใด โดยต้องมีการตรวจสอบว่าเงื่อนไขที่ใช้ในการตัดสินใจว่าเป็นจริงหรือเท็ ถ้าเป็นจริงจะไปเลือกทำคำสั่งชุดหนึ่ง แต่ถ้าเป็นเท็จจะไปเลือกทำคำสั่งอีกชุดหนึ่ง ซึ่งชุดคำสั่งเหล่านี้จะประกอบด้วยโครงสร้างแบบลำดับนั่นเอง แสดงผังงานของโครงสร้างแบบทางเลือก แสดงตัวอย่างขั้นตอนวิธีที่ต้องมีการเลือกตัดสินใจในการเลือกพิมพ์ค่าที่มากกว่าออกมา
6.3.3โครงสร้างแบบวนซ้ำ (repetition structure)
ในการแก้ปัญหาบางอาจต้องมีการทำงานในบางคำสั่งหรือบางชุดของคำสั่งกันมากกว่าหนึ่งรอบขึนไป โครงส้รางแบบมีการวนซ้ำนี้จะต้องมีการตัดสินใจร่วมอยู๋ด้วยเสมอ เพื่ออเป็นเงื่อนไขที่จะตัดสินใจว่าเมื่อใดจะวนซ้ำ หรือเมื่อใดจะถึงเวลาหยุดการวนซ้ำ
แบบที่ต้องตรวจสอบเงื่อนไขที่จะให้วนซ้ำก่อนที่จะทำงานตามชุดคำสั่งในโครงสร้างแบบวนซ้ำ เรียกว่า การวนซ้ำแบบ While ซึ่งจะสังเกตได้ว่าถ้าเงื่อนไขไม่เป็นจริงตั้งแต่แรก คำสั่งในโครงสร้างแบบวนซ้ำจะไม่ถูกเรียกให้ทำงานเลย และการวนซ้ำอีกอย่างหนึ่งคือ การวนซ้ำแบบ Until เป็นการวนซ้ำที่มีการตรวจสอบเงื่อนไขที่จะให้วนซ้ำหลังจากที่ได้ทำงานตามชุดคำสั่ง ในโครงาร้างแบบวนซ้ำไปรอบหนึ่งแล้ว
สิ่งที่ควรระวังในการใช้งานขั้นตอนวิธีแบบมีการวนซ้ำคือ ต้องตรวจสอบว่ากำหนดเงื่อนไขอย่างรัดกุมและถูกต้อง มิเช่นนั้นแล้วอาจเกิดกรณีของการวนซ้ำไม่รู้จบ (infinite loop) วนซ้ำไม่ได้ตามจำนวนรอบที่ต้องการ
องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดรายละเอียดของปัญหาแบบที่ 1 สามารถแสดงดังนี้
ข้อมูลออก - ข้อความแสดงผลการทายตัวเลข
ข้อมูลเข้า - ตัวเลขเป้าหมาย
- ตัวเลขที่หาย
รายละเอียดของปัญหา - เปรียเทียบตัวเลขที่ทายกับค่าเป้าหมาย
- ถ้าตรงกัน ให้แสดงคำว่า Correct
- ถ้าไม่ตรงกัน ให้แสดงคำว่า Incorrect
จากรายละเอียดของปัญหาแบบที่ 1 สามารถเขียนเป็นขั้นตอนด้วยรหัสลำลองดังนี้
เริ่นต้น
1.รับค่าตัวเลขเป้าหมาย เก็บไว้มนตัวแปร target
2.พิมพ์ข้อความว่า "Enter the number you guess"
3.รับค่าตัวเลขที่ทายเก็บไว้ในตัวแปร number
4.ถ้าค่าของ number เท่ากับค่าของ target ให้พิมพ์ข้อความว่า "Correct" ไม่เช่นนั้น พิมพ์ข้อความว่า "Incorrect"
องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดรายละเอียดของปัญหาแบบที่ 2 สามารถแสดงได้ดังนี้
ข้อมูลออก - ข้อความแสดงผลการทายตัวเลขว่า สูงหรือต่ำเกินไป กรณ๊ที่ทายไม่ถูก
- ข้อความแสดงว่าทายถูกต้องแล้ว
ข้อมูลเข้า - ตัวเลขที่กำหนด
- ตัวเลขที่ทาย
รายละอียดของปัญหา - เปรียบเทียบค่าตัวเลขที่ทายว่าตรงกับค่าที่กำหนดหรือไม่จนกว่าจะทายถูก
จากรายละเอียดของปัญหาแบบที่ 2 สามารถเขียนเป็นขั้นตอนด้วยรหัสลำลองดังนี้
เริ่มต้น
1.รับค่าที่กำหนด เก็บไว้ในตัวแปร target
2.พิมพ์ข้อความ "Enter the number you guess"
3.รับค่าตัวเลขที่ทายเก็บไว้ในตัวแปร number
4.ถ้า number ไม่เท่ากับ target ให้ทำคำสั่งในข้อ 4.1 มิเช่นนั้น ข้ามไปทำข้อ 5
4.1 ถ้า number มีค่ามากกว่า target ให้พิมพ์ข้อความ "Too high" ไม่เช่นนั้น ให้พิมพ์ข้อความ "Too low"
4.2 รับค่าตัวเลขที่ทายไว้ในตัวแปร number
4.3 วนกลับไปทำงานตามข้อ 4 อีกรอบหนึ่ง
5. พิมพ์ข้อความ "Correct"
ในการออกแบบขั้นตอนการทำงานเพื่อให้สามารถวนรอบให้ผู้ทายทำการทายได้หลายครั้งจนกว่าจะถูกนั้น จะพบว่าเป็นการวนซ้ำแบบ While ที่มีการตรวจสอบการวนรอบในส่วนต้นก่อนการทำงานภายในของการวนรอบ โดยทั่วไปเราสามารถดัดแปลงแก้ไขขั้นตอนวิธีที่ใช้การวนซ้ำแบบ While เพียงเล็กน้อยเพื่อใช้การวนซ้ำแบบ Until ที่มีการตรวจสอบการวนรอบเมื่อจบการทำงานภายในของการวนรอบ
รหัสลำลองและผังที่ทำงาน ซึ่งใช้การวนซ้ำแบบ Until
เริ่นต้น
1.รับค่าเป้าหมาย เก็บไว้ในตัวแปร target
2.พิมพ์ข้อความ "Enter the number you guess"
3.รับค่าตัวเลขที่ทายเก็บไว้ในตัวแปร number
4.ถ้า number มากกว่า target ให้พิมพ์ข้อความ "Too high"
5.ถ้า number น้อยกว่า target ให้พิมพ์ข้อความ "Too low"
6.ถ้า number เท่ากับ target ให้ข้ามไปทำงานข้อ 7 มิเช่นนั้น ให้วนกลับไปทำงานตั้งแต่ ข้อ 2
7.พิมพ์ข้อความ "correct"
อ้างอิง : https://sites.google.com/site/thekhnoloyisarsnthes402/6-hlak-kar-kae-payha-dwy
ไม่มีความคิดเห็น:
แสดงความคิดเห็น