Algorithm (3) – Decision การสร้างทางเลือกให้โปรแกรม

รับสอนการเขียนโปรแกรม และ วิชาวิทยาการคอมพิวเตอร์อื่นๆ ดูรายละเอียดได้ที่นี่

ในบทความก่อนๆ เราสอนวิธีการเขียน Algorithm แบบพื้นฐานไปแล้ว ซึ่งอยู่ในรูปแบบของ Input → Process → Output (ย้ำกันอีกที ให้จำได้!)

แต่ Algorithm ที่เราเขียนได้ตอนนี้จะทำงานแบบตรงไปตรงมา รับค่าเข้ามา คำนวณ แล้วแสดงผล จบ! แค่นั้น ซึ่งถ้าโปรแกรมมันทำงานได้แค่นี้จริงๆ มันจะเป็นอะไรที่น่าเบื่อมาก (คือคอมพิวเตอร์จะมีความสามารถพอๆ กับเครื่องคิดเลยกันเลย)

ดังนั้น ถ้าคำสั่งที่สั่งให้คอมพิวเตอร์มีการเลือกตัดสินใจ หรือคิดว่าควรจะทำงานแบบไหน (ตามเงื่อนไขที่เรากำหนดลงไป) ก็คงจะดีนะ!

ด้วยเหตุนี้แหละ เลยเป็นที่มาของคำสั่งในการสร้างทางเลือกสำหรับคอมพิวเตอร์ นั่นคือ...

Decision

การสร้างทางเลือก ทำให้เส้นทางวิ่งของ Algorithm มีการแยกทางออกจากันได้ (ปกติการเขียน Algorithm จะเป็นเส้นเรียงต่อกันจากบนลงล่าง จะแยกทางไม่ได้)

ในการเขียนโปรแกรมส่วนใหญ่แล้ว เราต้องการให้คอมพิวเตอร์คิดหรือตัดสินใจอะไรแทนคนได้ ซึ่งหลังๆ เราจะแบ่งประเภทการเขียน Decision ได้ออกเป็น 2 แบบคือ if-else และ loop (ที่เดี๋ยวจะพูดถึงในบทถัดๆ ไป)

if เลือก..ด้วยคำสั่ง "ถ้า"

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

สำหรับการเขียน Flowchart เราจะใช้สัญลักษณ์ "สี่เหลี่ยมทรง diamond" หรือ "สี่เหลี่ยมทางเพรช" ในการสร้างทางแยก แต่ถ้าเราวางทางแยกแบบธรรมดา คอมพิวเตอร์ไม่มีทางตัดสินใจได้แน่นอนว่าจะวิ่งซ้ายหรือขวา (ก็เพราะมันไม่มีสมองไง) ดังนั้นเราต้องเขียนสิ่งที่เรียกว่า "Condition" หรือ "เงื่อนไข" ลงไปด้วย

มาดูตัวอย่างกัน

ในตัวอย่างนี้ สมมุติให้เป็นโปรแกรมคิดราคาสินค้า โดยถ้าลูกค้ามีแต้มสะสมมากกว่า 50 แต้ม จะลดราคาให้ 10% (ลดราคาให้ 10% สามารถคิดง่ายๆ คือราคาจะเหลือ 90% หรือ 0.90 นั่นเอง)

ดังนั้น... ก็จะสังเกตได้ว่า เราไม่ได้ลดราคาให้เขาทุกครั้ง แต่จะลดเฉพาะครั้งที่มีแต้มสะสมมากกว่า 50 คะแนน → ดังนั้นต้องมีการสร้าง Decision ขึ้นมาให้คอมพิวเตอร์เลือกทำแน่นอน

ตามกฎการเขียน Algorithm ที่ดีจะต้องเริ่มด้วย Input และจบด้วย Output อันนี้ไม่มีปัญหา แต่ส่วนของการ Process นั้นมีการวาง Decision เป็นทางเลือกลงไปเพื่อเช็กว่า point > 50 ตามที่โจทย์ถามมารึเปล่า

สังเกตดูว่ามีเส้นแตกออกจากกล่อง Decision 2 เส้น (ปกติ Flowchart จะเรียงกันเป็นเส้นตรงเส้นเดียว) เลยต้องมีการเขียนกำกับเส้นไว้ด้วยว่าถ้าเงื่อนไขที่ตั้งไว้เป็น Yes ให้ไปทางไหน และถ้าเป็น No ให้ไปทางไหน

ตามโจทย์ถ้าไปทาง Yes เราจะต้องลดราคาให้เขา 10% แต่ถ้าไม่ ก็คิดราคาเดิม = ไม่ลดราคา = ก็ไม่ต้องทำอะไรไง ... ก็เลยได้ออกมาเป็น Flowchart แบบข้างบนนั่นเองนะ

สร้าง Condition ด้วย Yes-No Question

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

แต่ใช่ว่าเราจะกำหนด Condition ยังไงก็ได้ตามใจฉัน เพราะ Condition จะต้องเขียนให้อยู่ในรูปแบบของ Yes-No Question หรือที่ภาษาโปรแกรมเรียกว่า boolean expression นั่นเอง

 

พูดง่ายๆ คือคำถามนั้นจะต้องตอบด้วย "ใช่" (หรือ true) และ "ไม่" (หรือ false) เท่านั้น เช่น

  • 1 + 2 เท่ากับ 3 ? ตอบว่า TRUE → ใช้ได้!
  • 1 + 2 เท่ากับ 4 ? ตอบว่า FALSE → ใช้ได้!
  • 1 + 2 = ? ต้องตอบเป็นคำเลขคำตอบจากการบวก → แบบนี้ใช้ไม่ได้นะ!

ซึ่งวิธีการง่ายๆ ที่จะให้คำถามของเราเป็น Yes-No Question คือการใช้ operator (ตัวดำเนินการ) พวกนี้

 

ส่วนใหญ่ก็จะเป็นตัวเปรียบเทียบแบบที่เรียนมาในวิชาคณิตศาสตร์ละนะ แต่ 6 ตัวนี้เป็นตัวที่สามารถเอาไปเขียนในภาษาโปรแกรมแทบจะทุกภาษาได้

if-else "ถ้า-แล้ว" แต่ถ้าไม่ใช่แล้วจะให้ทำอะไร

ในตัวอย่างแรก เราเพิ่มการเลือกว่าจะทำหรือไม่ทำไปแล้ว แต่ก็ยังขาดอะไรบ้างอย่างนั่นคือการกำหนดว่า "แล้วถ้าไม่ใช่ จะให้ทำอะไรล่ะ?"

นั่นเป็นที่มาของคำสั่งในรูปแบบของ if-else นั่นเอง

 

โอเค มาดูตัวอย่างการใช้ if-else กันต่อเลยนะ สมมุติว่าเราต้องการเขียนโปรแกรมที่เอาไว้เช็กว่าคะแนนที่กำหนดมา Pass หรือ Not Pass โดยวิธีวัดคือถ้าได้คะแนนตั้งแต่ 50 คะแนนขึ้นไปถือว่าผ่าน

วิธีการเขียนก็คือเราก็ต้องคิดก่อนว่าจาก Condition ที่กำหนด (คือตัดผ่านที่ 50 คะแนนขึ้นไปอ่ะนะ)

ผลการตรวจสอบแน่นอนว่ามันจะแบ่งออกมาเป็น 2 เคสคือ ผ่านกับไม่ผ่าน

 

(สังเกตอย่างหนึ่ง คือในเงื่อนไขเราจะใช้ score ≥ 50 ไม่ใช่ score > 50 นะ เพราะเราต้องการบอกว่า แค่ 50 ก็ผ่านแล้วนะ)

นั่นก็คือหลังจากแยกฝั่ง Decision ออกเป็น 2 เส้นแล้ว ก็จะมีการทำงานบางอย่าง (ที่ไม่เหมือนกัน) ทั้ง 2 ข้างเลย

ข้อควรจำอีกอย่างคือถ้าเราเขียน Algorithm แบบนี้ block ทางฝั่งซ้าย (ฝั่ง true) และขวา (ฝั่ง false) จะไม่มีทางเกิดพร้อมกันแน่นอน! เพราะว่าตาม Algorithm แล้วคอมพิวเตอร์จะทำงานตามเส้นทางที่เราวางไว้ และในเมื่อมันแยกออกจากกันเป็น 2 เส้นทางแสดงว่ามันจะเกิด action แค่ข้างเดียวแน่นอน

6519 Total Views 3 Views Today
Ta

Ta

สิ่งมีชีวิตตัวอ้วนๆ กลมๆ เคลื่อนที่ไปไหนโดยการกลิ้ง .. ถนัดการดำรงชีวิตโดยไม่โดนแสงแดด
ปัจจุบันเป็น Senior Software Engineer อยู่ที่ Centrillion Technology
งานอดิเรกคือ เขียนโปรแกรม อ่านหนังสือ เขียนบทความ วาดรูป และ เล่นแบดมินตัน

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *