ݺߣ

ݺߣShare a Scribd company logo
บทที่ 4
โครงสร้างควบคุมแบบทางเลือก
โครงสร้างควบคุมแบบทางเลือก
โครงสร้างควบคุมแบบทางเลือก เป็นโครงสร้างที่ใช้สาหรับกาหนดทางเลือกการ
ประมวลผล
คาสั่ง โดยขึ้นอยู่กับเงื่อนไขทางเลือกที่เขียนอยู่ในรูปของนิพจน์เปรียบเทียบ
(Relational expression)
หรือ นิพจน์ตรรกะ (Boolean expression) ซึ่งใช้ตัวดาเนินการ
เปรียบเทียบ หรือตัวดาเนินการตรรกะ
เป็นตัวดาเนินการของนิพจน์ ในครั้งนี้จะนาเสนอคาสั่ง if-else เชิงซ้อน และ
switch
1. คาสั่ง if-else เชิงซ้อน
คาสั่ง if - else เชิงซ้อน คือ คาสั่ง if - else ที่มีคาสั่ง if - else ซ้อนอยู่ใน
ส่วน else
ซึ่งมีรูปแบบดังนี้
ผังงานของคาสั่ง if - else เชิงซ้อน
คาสั่ง if - else เชิงซ้อนเป็นรูปแบบการทางานแบบหลายทางเลือก โดย
จะมีคาสั่งเพียง
คาสั่งเดียวเท่านั้นที่จะถูกเลือกให้ประมวลผล ขึ้นอยู่กับว่า เงื่อนไขทางเลือก
ใดเป็นจริง และในกรณีที่
ไม่มี เงื่อนไขทางเลือก ใดเป็นจริงเลย คาสั่ง n จะถูกประมวลผล
คาสั่ง 1, คาสั่ง 2, คาสั่ง 3, …, คาสั่ง n อาจเป็นคาสั่งอย่างง่ายหรือคาสั่ง
เชิงประกอบ
ตัวอย่างที่ 1 โปรแกรมทายตัวเลข3
ผลลัพธ์ของการรันครั้งที่ 1 คือ
ผลลัพธ์ของการรันครั้งที่ 2 คือ
ผลลัพธ์ของการรันครั้งที่ 3 คือ
พิจารณาค่าของตัวแปร y สาหรับโปรแกรมข้างต้นเป็น 3 กรณี ดังนี้
กรณีที่1 ถ้า y มีค่าเท่ากับ 100 จะได้ว่านิพจน์ y > TARGET มีค่าเป็นจริง แล้วฟังก์ชัน
Printf ( ) ในบรรทัดที่ 13 จะถูกประมวลผล
กรณีที่ 2 ถ้า y มีค่าเท่ากับ 9 จะได้ว่านิพจน์ y > TARGET มีค่าเป็นเท็จ และนิพจน์
y < TARGET มีค่าเป็นจริงแล้ว ฟังก์ชัน printf ( ) ในบรรทัดที่15 จะถูกประมวลผล
กรณีที่3 ถ้า y มีค่าเท่ากับ 25 จะได้ว่านิพจน์ y > TARGET และนิพจน์ y <
TARGET
มีค่าเป็นเท็จทั้งคู่ ดังนั้น ฟังก์ชัน printf ( ) ในบรรทัดที่17 จะถูกประมวลผล
พิจารณาคาสั่ง if ในรูปแบบต่อไปนี้ ซึ่งมีคาสั่ง if - else ซ้อนอูู่้้านใน
ถ้าเงื่อนไขทางเลือก 1 และเงื่อนไขทางเลือก 2 มีค่าจริง แล้วโปรแกรมจะประมวลผล
คาสั่ง 1 ก่อนที่จะประมวลผล คาสั่ง 3
ถ้าเงื่อนไขทางเลือก 1 มีค่าจริง ขณะที่เงื่อนไขทางเลือก 2 มีค่าเท็จ แล้วโปรแกรมจะ
ประมวลผล คาสั่ง 2 ก่อนที่จะประมวลผล คาสั่ง 3
และถ้าเงื่อนไขทางเลือก 1 มีค่าเท็จ แล้วโปรแกรมจะประมวลผล คาสั่ง 3 เพียงคาสั่งเดียว
เท่านั้น
นั่นคือ ในคาสั่ง if - else (หรือคาสั่ง if - else เชิงซ้อน ) else จะถูกจับคู่กับ if ก่อน
หน้าที่
อยู่ใกล้ที่สุด เสมอ ซึ่งในที่นี้คือ if ( เงื่อนไขทางเลือก 2 )
ดังนั้น ในกรณีที่ต้องการให้ คาสั่ง 2 ถูกประมวลผล เงื่อนไขทางเลือก 1 มีค่าเท็จก่อนที่จะ
ประมวลผล คาสั่ง 3 จะต้องเพิ่มเครื่องหมาย {และ} ตามรูปแบบด้านล่าง และในที่ if ( เงื่อนไข
ทางเลือก 2 ) จัดเป็นคาสั่ง if ที่ซ้อนอยู่ในคาสั่ง if - else ของ if ( เงื่อนไขทางเลือก 1 )
ตัวอย่างที่ 2 โปรแกรมแสดงการใช้ตัวดา ๶ȨȨารที่ไม่๶หมาะสม
เมื่อคอมไพล์โปรแกรมจะพบข้อผิดพลาดในบรรทัดที่15 เนื่องจากไม่มีคาสั่ง if ใดที่อียู่
ก่อน
บรรทัดที่15 จะใช้คู่กับ else นี้ได้ นั่นคือ คาสั่ง if ในบรรทัดที่12 จะใช้คู่กับ else
ในบรรทัด
ที่ 18 และคาสั่ง if ในบรรทัดที่13 เป็นคาสั่ง if ที่ไม่มีelse
ในการแก้ไขโปรแกรม Beware.cpp ให้ถูกต้อง นักเขียนโปรแกรมจะต้องลบ
เครื่องหมาย {
และ } ในบรรทัดที่ 13 และ 17 ตามลาดับ เพื่อให้ else ในบรรทัดที่15 ใช้คู่กับ if ใน
บรรทัดที่13
ได้อย่างถูกต้อง
2. การเลือกทาแบบ switch
คาสั่ง switch เป็นคา สั่งที่มีโครงสร้างควบคุมแบบทางเลือกที่
มีหลายทางเลือก และมีรูปแบบดังนี้
ผังงานของคาสั่ง switch
นิพจน์และค่าคงที่ของนิพจน์ในแต่ละ case จะต้องเป็นชนิดจานวนเต็ม และมีค่า
ไม่ซ้ากัน
ถ้า นิพจน์มีค่าเท่ากับ ค่าคงที่ 1 แล้ว คาสั่ง1 จะถูกประมวลผลเป็นลาดับแรก ตาม
ด้วย คาสั่ง2
จนกระทั่งถึง คาสั่ง ของ default ตามลาดับ
ในกรณีที่นิพจน์ มีค่าเท่ากับ ค่าคงที่ 2 การประมวลผลจะเริ่มต้นที่คาสั่ง2
จนกระทั่งถึง คาสั่ง
ของ default ตามลาดับ
คาสั่ง switch อาจไม่มี default ได้แต่ในกรณีที่มีdefault นิพจน์มีค่าไม่
ตรงกับ ค่าคงที่ใดๆ เลยแล้ว คาสั่ง ของกรณี default จะเป็นเพียงคา สั่งเดียว
ที่ถูกประมวลผลและในกรณีที่ไม่มีdefault และ นิพจน์มีค่าไม่ตรงกับ ค่าคงที่
ใดๆจะไม่มีคาสั่งใดเลยที่ถูกประมวลผล
ตัวอู่างที่ 3 โปรแกรมพิมพ์เลข 1-9
ผลลัพธ์ คือ
ผลลัพธ์ข้างต้นเป็นผลจากการป้อนอักขระ 5 ให้โปรแกรม นั้น คือ ในกรณีที่อักขระที่รับ
ค่าเข้ามามีค่าเป็น 1 – 9 โปรแกรมจะประมวลผลฟังก์ชัน printf () ของ case ที่ตรงกัน
และตรงกัน และน้อยกว่าจนครบทุกกรณี และในกรณีที่อักขระที่รับเข้ามาเป็นอักขระอื่น ๆ
โปรแกรมจะประมวลผลฟังก์ชัน Printf () ในกรณี default เพียงเท่านั้น
ในกรณีที่ต้องการให้คา สั่งของ case ใด case หนึ่งเท่านั้นถูกประมวลผล นักเขียนโปรแกรม
จะต้องเพิ่มคาสั่ง break เป็นคาสั่งสุดท้ายในแต่ละ case

More Related Content

บทที่ 4

  • 2. โครงสร้างควบคุมแบบทางเลือก โครงสร้างควบคุมแบบทางเลือก เป็นโครงสร้างที่ใช้สาหรับกาหนดทางเลือกการ ประมวลผล คาสั่ง โดยขึ้นอยู่กับเงื่อนไขทางเลือกที่เขียนอยู่ในรูปของนิพจน์เปรียบเทียบ (Relational expression) หรือ นิพจน์ตรรกะ (Boolean expression) ซึ่งใช้ตัวดาเนินการ เปรียบเทียบ หรือตัวดาเนินการตรรกะ เป็นตัวดาเนินการของนิพจน์ ในครั้งนี้จะนาเสนอคาสั่ง if-else เชิงซ้อน และ switch
  • 3. 1. คาสั่ง if-else เชิงซ้อน คาสั่ง if - else เชิงซ้อน คือ คาสั่ง if - else ที่มีคาสั่ง if - else ซ้อนอยู่ใน ส่วน else ซึ่งมีรูปแบบดังนี้
  • 5. คาสั่ง if - else เชิงซ้อนเป็นรูปแบบการทางานแบบหลายทางเลือก โดย จะมีคาสั่งเพียง คาสั่งเดียวเท่านั้นที่จะถูกเลือกให้ประมวลผล ขึ้นอยู่กับว่า เงื่อนไขทางเลือก ใดเป็นจริง และในกรณีที่ ไม่มี เงื่อนไขทางเลือก ใดเป็นจริงเลย คาสั่ง n จะถูกประมวลผล คาสั่ง 1, คาสั่ง 2, คาสั่ง 3, …, คาสั่ง n อาจเป็นคาสั่งอย่างง่ายหรือคาสั่ง เชิงประกอบ
  • 8. พิจารณาค่าของตัวแปร y สาหรับโปรแกรมข้างต้นเป็น 3 กรณี ดังนี้ กรณีที่1 ถ้า y มีค่าเท่ากับ 100 จะได้ว่านิพจน์ y > TARGET มีค่าเป็นจริง แล้วฟังก์ชัน Printf ( ) ในบรรทัดที่ 13 จะถูกประมวลผล กรณีที่ 2 ถ้า y มีค่าเท่ากับ 9 จะได้ว่านิพจน์ y > TARGET มีค่าเป็นเท็จ และนิพจน์ y < TARGET มีค่าเป็นจริงแล้ว ฟังก์ชัน printf ( ) ในบรรทัดที่15 จะถูกประมวลผล กรณีที่3 ถ้า y มีค่าเท่ากับ 25 จะได้ว่านิพจน์ y > TARGET และนิพจน์ y < TARGET มีค่าเป็นเท็จทั้งคู่ ดังนั้น ฟังก์ชัน printf ( ) ในบรรทัดที่17 จะถูกประมวลผล
  • 9. พิจารณาคาสั่ง if ในรูปแบบต่อไปนี้ ซึ่งมีคาสั่ง if - else ซ้อนอูู่้้านใน ถ้าเงื่อนไขทางเลือก 1 และเงื่อนไขทางเลือก 2 มีค่าจริง แล้วโปรแกรมจะประมวลผล คาสั่ง 1 ก่อนที่จะประมวลผล คาสั่ง 3 ถ้าเงื่อนไขทางเลือก 1 มีค่าจริง ขณะที่เงื่อนไขทางเลือก 2 มีค่าเท็จ แล้วโปรแกรมจะ ประมวลผล คาสั่ง 2 ก่อนที่จะประมวลผล คาสั่ง 3 และถ้าเงื่อนไขทางเลือก 1 มีค่าเท็จ แล้วโปรแกรมจะประมวลผล คาสั่ง 3 เพียงคาสั่งเดียว เท่านั้น
  • 10. นั่นคือ ในคาสั่ง if - else (หรือคาสั่ง if - else เชิงซ้อน ) else จะถูกจับคู่กับ if ก่อน หน้าที่ อยู่ใกล้ที่สุด เสมอ ซึ่งในที่นี้คือ if ( เงื่อนไขทางเลือก 2 ) ดังนั้น ในกรณีที่ต้องการให้ คาสั่ง 2 ถูกประมวลผล เงื่อนไขทางเลือก 1 มีค่าเท็จก่อนที่จะ ประมวลผล คาสั่ง 3 จะต้องเพิ่มเครื่องหมาย {และ} ตามรูปแบบด้านล่าง และในที่ if ( เงื่อนไข ทางเลือก 2 ) จัดเป็นคาสั่ง if ที่ซ้อนอยู่ในคาสั่ง if - else ของ if ( เงื่อนไขทางเลือก 1 )
  • 12. เมื่อคอมไพล์โปรแกรมจะพบข้อผิดพลาดในบรรทัดที่15 เนื่องจากไม่มีคาสั่ง if ใดที่อียู่ ก่อน บรรทัดที่15 จะใช้คู่กับ else นี้ได้ นั่นคือ คาสั่ง if ในบรรทัดที่12 จะใช้คู่กับ else ในบรรทัด ที่ 18 และคาสั่ง if ในบรรทัดที่13 เป็นคาสั่ง if ที่ไม่มีelse ในการแก้ไขโปรแกรม Beware.cpp ให้ถูกต้อง นักเขียนโปรแกรมจะต้องลบ เครื่องหมาย { และ } ในบรรทัดที่ 13 และ 17 ตามลาดับ เพื่อให้ else ในบรรทัดที่15 ใช้คู่กับ if ใน บรรทัดที่13 ได้อย่างถูกต้อง
  • 13. 2. การเลือกทาแบบ switch คาสั่ง switch เป็นคา สั่งที่มีโครงสร้างควบคุมแบบทางเลือกที่ มีหลายทางเลือก และมีรูปแบบดังนี้
  • 15. นิพจน์และค่าคงที่ของนิพจน์ในแต่ละ case จะต้องเป็นชนิดจานวนเต็ม และมีค่า ไม่ซ้ากัน ถ้า นิพจน์มีค่าเท่ากับ ค่าคงที่ 1 แล้ว คาสั่ง1 จะถูกประมวลผลเป็นลาดับแรก ตาม ด้วย คาสั่ง2 จนกระทั่งถึง คาสั่ง ของ default ตามลาดับ ในกรณีที่นิพจน์ มีค่าเท่ากับ ค่าคงที่ 2 การประมวลผลจะเริ่มต้นที่คาสั่ง2 จนกระทั่งถึง คาสั่ง ของ default ตามลาดับ คาสั่ง switch อาจไม่มี default ได้แต่ในกรณีที่มีdefault นิพจน์มีค่าไม่ ตรงกับ ค่าคงที่ใดๆ เลยแล้ว คาสั่ง ของกรณี default จะเป็นเพียงคา สั่งเดียว ที่ถูกประมวลผลและในกรณีที่ไม่มีdefault และ นิพจน์มีค่าไม่ตรงกับ ค่าคงที่ ใดๆจะไม่มีคาสั่งใดเลยที่ถูกประมวลผล
  • 17. ผลลัพธ์ คือ ผลลัพธ์ข้างต้นเป็นผลจากการป้อนอักขระ 5 ให้โปรแกรม นั้น คือ ในกรณีที่อักขระที่รับ ค่าเข้ามามีค่าเป็น 1 – 9 โปรแกรมจะประมวลผลฟังก์ชัน printf () ของ case ที่ตรงกัน และตรงกัน และน้อยกว่าจนครบทุกกรณี และในกรณีที่อักขระที่รับเข้ามาเป็นอักขระอื่น ๆ โปรแกรมจะประมวลผลฟังก์ชัน Printf () ในกรณี default เพียงเท่านั้น ในกรณีที่ต้องการให้คา สั่งของ case ใด case หนึ่งเท่านั้นถูกประมวลผล นักเขียนโปรแกรม จะต้องเพิ่มคาสั่ง break เป็นคาสั่งสุดท้ายในแต่ละ case