Decision: Single and Double Selection (if and if-else statement) 886201 Programming I 4
Decision (การตัดสินใจ)
การทำงานแบบเลือกทำ (Selection) การทำงานของคอมพิวเตอร์ นอกเหนือจากการทำงานแบบ ตามลำดับ (Sequence) แล้ว จะมีการทำงานอีกลักษณะ คือ การ ทำงานแบบเลือกทำ (Selection) ใช้เงื่อนไขเป็นตัวตัดสินใจ การทำงานอย่างหนึ่งจะถูกเลือกให้ ทำงาน เมื่อเงื่อนไขเป็นจริง การทำงานลักษณะนี้ จะทำให้ คอมพิวเตอร์มีการทำงานที่หลากหลาย มากขึ้น
โครงสร้างควบคุมพื้นฐานของ Flowchart ทำหน้าที่ควบคุมการทำงานของโปรแกรมว่าไปใน ทิศทางใด แบ่งออกเป็น 3 ประเภท 1. การทำงานแบบเป็นลำดับ (Sequence) 2. การทำงานแบบเลือกทำ (Selection) 3. การทำงานวนรอบ (Repetition)
การทำงานแบบเลือกทำ (Selection) เป็นโครงสร้างการทำงานที่มีการตัดสินใจ แบบมีเงื่อนไขทางตรรกะ โดยใช้พีชคณิตบูลีน (จริง/เท็จ) เพื่อให้ ตัดสินใจ ถ้าเงื่อนไขนั้นเป็นจริง แล้วจะทำอะไร? ถ้า เงื่อนไขนั้นเป็นเท็จ แล้วจะทำอะไร? การทำงานแบบเลือกทำ (Selection) นั้นถูก แบ่งได้อีก 3 รูปแบบ 1. Single Selection 2. Double Selection 3. Multi Selection
1. Single Selection ถ้าเงื่อนไขเป็นจริง แล้วจะทำอะไร แต่ถ้าเงื่อนไขนั้นเป็นเท็จก็จะไม่เกิดการ ทำงานใดๆ ขึ้นเลย รูปแบบการเขียนผังงาน Single Selection ถ้าเงื่อนไขเป็นจริง ให้ทำ คำสั่งที่1 ถ้าเงื่อนไขเป้นเท็จ ให้ออก จากโครงสร้าง
1. Single Selection (ตัวอย่าง)
2. Double Selection ถ้าเงื่อนไขเป็นจริง แล้วจะทำอะไร ถ้าเงื่อนไข เป็นเท็จ แล้วจะทำอะไร รูปแบบการเขียนผังงาน Double Selection ถ้าเงื่อนไขเป็นจริง จะทำ คำสั่งที่ 1 ถ้าเงื่อนไขเป็นเท็จ จะทำ คำสั่งที่ 2
2. Double Selection (ตัวอย่าง) จ่ายค่าหมูปิ้ง 20 บาท จ่ายค่ากะเพรา 35 บาท
3. Multi Selection ลักษณะการทำงานจะแบ่งออกเป็นกรณี (Case) ตรวจสอบว่าค่าข้อมูลที่นำมาเปรียบเทียบตรงกับกับ เงื่อนไขใดที่เป็นจริง ก็จะเข้ากรณีนั้น รูปแบบการเขียนผังงาน Double Selection ถ้ากรณีที่ 1 เป็นจริง ทำคำสั่งที่ 1 ถ้ากรณีที่ 2 เป็นจริง ทำคำสั่งที่ 2 . . . ถ้ากรณีที่ N เป็นจริง ทำคำสั่ง ที่ N
3. Multi Selection (ตัวอย่าง)
ผังงาน 1 ผังงานใน การโยน เหรียญหนึ่ง เหรียญ ถ้า ออกก้อยจะ เล่นเกมส์ ถ้า ออกหัวจะ อ่านหนังสือ เรียน
ผังงาน 2 ผังงานรับ จำนวนเงิน เพื่อตัดสินใจ ซื้อโทรศัพท์ ถ้า ได้เงินน้อยกว่า 30,000 บาท จะ ซื้อโทรศัพท์ Samsung Hero แต่ถ้าได้ เงินมากกว่า 30,000 บาท จะ ซื้อโทรศัพท์ iPhone6+
ผังงาน 3 ผังงานรับจำนวน เต็ม 2 จำนวน เพื่อตรวจสอบว่า ค่าของตัวเลขใด น้อยที่สุด ให้ แสดงตัวเลขนั้น
เงื่อนไข (condition) เมื่อมีทางเลือก 2 ทางเลือก ใช้เงื่อนไข ตัดสินใจเพื่อเลือกการทำงานอย่างใด อย่างหนึ่ง เงื่อนไข คือ นิพจน์ที่บอกได้ว่าเป็นจริง หรือเท็จ จริง เท็จ เงื่อนไข
True or False จากนิพจน์ logic ต่อไปนี้ ค่าความจริง เป็น จริง หรือ เท็จ กำหนดให้ a = 10, b = 13 ข้อ นิพจน์ logic ค่าความจริง 1 a != b จริง 2 b > 0 3 (a % 2) < 0 เท็จ 4 (b % 2) != 0 5 (b - 6) == 7 6 b <= (a + 3)
True or False จากนิพจน์ logic ต่อไปนี้ ค่าความจริง เป็น จริง หรือ เท็จ กำหนดให้ x = 5, y = -2, ch=‘A’ ข้อ นิพจน์ logic ค่าความจริง 1 5 == x จริง 2 (x <= 0) && (9 == 7) เท็จ 3 (( x+1 ) > 10) || (x >= y) 4 !(x == 5) && (y > -1) 5 (x > 4) || (y > 0) && ( x !=y) 6 (ch == ‘B’) || !(x+y > 0)
คำสั่งควบคุมการทำงานแบบเลือกทำ เงื่อนไข (condition) คือการดำเนินการที่ ให้ผลลัพธ์เป็นจริงหรือเท็จ การตัดสินใจว่าจะเลือกทางใดขึ้นอยู่กับ ผลลัพธ์ คำสั่งควบคุมการทำงานแบบเลือกทำ (1) คำสั่ง if (single selection) (2) คำสั่ง if – else (double selection) ค่าผลลัพธ์ที่ เป็น 0 หรือ NULL หมายถึง เท็จ ค่าผลลัพธ์ที่ ไม่ใช่ 0 หรือไม่ใช่ NULL หมายถึง จริง
คำสั่ง if เป็นการเลือกว่าจะ “ทำ” หรือ “ไม่ทำ” ใช้เงื่อนไขเป็นตัวตัดสิน เงื่อนไขเป็นจริง (true) จะทำคำสั่งที่อยู่ใน if เงื่อนไขเป็นเท็จ (false) จะไม่ทำคำสั่งที่อยู่ใน if
รูปแบบคำสั่ง if if (เงื่อนไข) คำสั่ง1; if (เงื่อนไข) { คำสั่ง1; } คำสั่ง2; … }
ตัวอย่างการใช้คำสั่ง if
ตัวอย่างการใช้คำสั่ง if
ตัวอย่างการใช้คำสั่ง if
ตัวอย่างการใช้คำสั่ง if
คำสั่ง if-else ใช้ตัดสินใจว่าจะเลือกทำคำสั่งใดคำสั่ง หนึ่ง ระหว่างคำสั่ง 2 ชุด ใช้เงื่อนไขเป็นตัวตัดสิน ถ้าเงื่อนไขเป็นจริง ทำคำสั่งชุดที่ 1 ถ้าเงื่อนไขเป็นเท็จ ทำคำสั่งชุดที่ 2
รูปแบบคำสั่ง if-else if (เงื่อนไข) คำสั่ง1; else คำสั่ง2; { คำสั่ง1; } else คำสั่ง2; if (เงื่อนไข) { คำสั่ง1; …. } else คำสั่ง2;
ตัวอย่าง คำสั่ง if-else
ตัวอย่าง คำสั่ง if-else
ตัวอย่าง 1 if ( 0 ) cout << “ if ” << endl; else cout << “ else ” << endl; ผลลัพธ์ else
ตัวอย่าง 2 if ( -1 ) cout << “ if ” << endl; else cout << “ else ” << endl; ผลลัพธ์ if
ตัวอย่าง 3 int x = 10; if ( x ) cout << “ if ” << endl; else cout << “ else ” << endl; ผลลัพธ์ if
ตัวอย่าง 4 -5 < 0 จริง int x = -5; if ( x < 0 ) { cout << “negative number” << endl; } else { cout << “positive number” << endl; }
ตัวอย่าง 4 -5 < 0 จริง int x = -5; if ( x < 0 ) { cout << “negative number” << endl; } if (x >= 0){ cout << “positive number” << endl;
ตัวอย่าง 5 10 < 0 เท็จ int x = 10; if ( x < 0 ) { cout << “negative number” << endl; } else { cout << “positive number” << endl; }
ตัวอย่าง 6 20 >= 0 จริง int x = 20; if ( x >= 0 ) { cout << “ A ” << endl; } if ( x > 10 ) { cout << “ B ” << endl; 20 > 10 จริง ผลลัพธ์ A B
ตัวอย่าง 7 5 >= 0 จริง 5 > 10 เท็จ ผลลัพธ์ A C int x = 5; if ( x >= 0 ) { cout << “ A ” << endl; } if ( x > 10 ) { cout << “ B ” << endl; } else { cout << “ C ” << endl; 5 > 10 เท็จ ผลลัพธ์ A C
โจทย์ตัวอย่าง 1 จงเขียนโปรแกรมรับจำนวนเต็ม 1 จำนวน แล้วทดสอบว่าเป็นเลขที่หาร ด้วย 3 ลงตัวหรือไม่ ถ้าลงตัวให้แสดง ข้อความ “Divisible” ถ้าไม่ลงตัวไม่ต้อง แสดงอะไรเลย วิเคราะห์โจทย์ Input เลขจำนวนเต็ม 1 จำนวน Process ทดสอบว่าหารด้วย 3 ลงตัว หรือไม่ Output ข้อความ หรือ ไม่แสดงอะไร เลย
ออกแบบโปรแกรม Algorithm รับจำนวนเต็มเก็บใน num แสดงข้อความ “Divisible” 3. จบการทำงาน
เขียนโปรแกรม
เพิ่มโจทย์ตัวอย่าง 1 จากโจทย์เดิมหากเพิ่มเงื่อนไขให้ ทดสอบว่าเป็นเลขที่หารด้วย 3 และ 5 ลงตัวหรือไม่
ตัวอย่างโจทย์ 2 จงเขียนโปรแกรมรับเลขจำนวนเต็ม 2 ตัว แล้วนับว่าตัวเลขที่รับเข้ามา มีเลข จำนวนเต็มลบทั้งหมดกี่ตัว วิเคราะห์โจทย์ Input เลขจำนวนเต็ม 2 ตัว Process นับตัวเลขที่เป็นจำนวนเต็ม ลบ Output จำนวนตัวเลขเต็มลบ
ออกแบบโปรแกรม Algorithm 1. รับจำนวนเต็มตัวที่ 1 เก็บไว้ใน a 2. รับจำนวนเต็มตัวที่ 2 เก็บไว้ใน b 3. กำหนด count (ตัวนับ) ให้เก็บค่า 0 ไว้ 4. ถ้า a < 0 เพิ่มค่า count ไป 1 5. ถ้า b < 0 6. แสดงค่าที่เก็บอยู่ใน count 7. จบการทำงาน
เขียนโปรแกรม
โจทย์ตัวอย่าง 3 จงเขียนโปรแกรมเพื่อตรวจสอบเงินเดือน ของพนักงานหากมีเงินเดือนมากกว่า 10000 บาท แต่น้อยกว่า 20000 จะได้รับ โนนัสให้แสดงข้อความ You get BONUS! ถ้าไม่ได้อยู่ในช่วงนี้ให้แสดงข้อความ You don’t get BONUS! วิเคราะห์โจทย์ Input จำนวนเงินเดือน Process ตรวจสอบจำนวนเงินอยู่ในช่วง 20000 > เงินเดือน > 10000 หรือไม่ Output ข้อความ
ออกแบบโปรแกรม Algorithm 1. รับจำนวนเงินเดือนเก็บใน salary 2. ถ้า (salary < 20000) && (salary > 10000) เป็นจริง แสดงข้อความ “You get BONUS!” ถ้าเป็นเท็จ แสดงข้อความ “You don’t get BONUS!” 3. จบการทำงาน
เขียนโปรแกรม