บทที่ 5 คำสั่งแบบมีเงื่อนไข Conditional Statements หลักการเขียนโปรแกรมคอมพิวเตอร์
เนื้อหา นิพจน์ตรรกศาสตร์ คำสั่งแบบมีเงื่อนไข ตัวอย่าง โฟล์วชาร์ต
นิพจน์ตรรกศาสตร์ ตัวดำเนินการตรรกศาสตร์ ตัวอย่าง ความหมาย สัญลักษณ์คณิตศาสตร์ สัญลักษณ์ C# ตัวอย่าง ความหมาย = == x == y x เท่ากับ y? ≠ != x != y x ไม่เท่ากับ y? > x > y x มากกว่า y? ≥ >= x >= y x มากกว่าหรือเท่ากับ y? < x < y x น้อยกว่า y? ≤ <= x <= y x น้อยกว่าหรือเท่ากับ y?
ตัวอย่าง: นิพจน์ตรรกศาสตร์ float x = 4.0; Expression Value x < 5.0 ___________ x > 5.0 ___________ x <= 5.0 ___________ 5.0 == x ___________ x != 5.0 ___________ true false true false true
ตัวอย่าง true false true false false true float n1 = 78.0; n1 < n2 __________ n1 >= n2 __________ (n1 + 35) > n2 __________ Math.Abs(n1-n2) <= 0.001 __________ n1 == n2 __________ n1 != n2 __________ true false true false false true
การผสมนิพจน์ตรรกศาสตร์ ตัวดำเนินการตรรกศาสตร์ && - และ (AND) || - หรือ (OR) ! – ไม่ (NOT) ตัวอย่าง (x > 12) && (x < 20) เป็นจริงถ้า x มีค่าอยู่ระหว่าง 12 และ 20 ถ้า x เท่ากับ 10 แล้วนิพจน์ตรรกศาสตร์ข้างต้นเป็นเท็จ ถ้า x เท่ากับ 15 แล้วนิพจน์ตรรกศาสตร์ข้างต้นเป็นจริง
ลำดับการประมวลผล (Precedence Rules) ( ) วงเล็บ *, / , % + – <, >, <=, >= ==, != ! && ││ ถ้าลำดับเท่ากันให้ประมวลผลจากซ้ายไปขวา
แบบฝึกหัด 5.1 กำหนดให้ x, y และ z เป็นตัวแปรชนิด int, c เป็นชนิด char และ s เป็นชนิด string จงอธิบายเงื่อนไขที่จะทำให้นิพจน์ทางตรรกศาสตร์ในแต่ละบรรทัดมีค่าเป็น x > 2 ____________________ x%2 == 0 ____________________ (x%5 == 0) ____________________ (x%y == 0) ____________________ ((x%y == 0)&&(z%y == 0)) ____________________ ch == 'a' ____________________ ((c >= 'a')&&(c <= 'z')) ____________________ ((c >= 'A')&&(c <= 'Z')) ____________________ ((c >= '0')&&(c <= '9')) ____________________ (s != "Hello") ____________________ !(s != "Arthur") ____________________ x มีค่ามากกว่า 2 c เป็นอักขระระหว่าง '0' ถึง '9'
คำสั่งแบบมีเงื่อนไข if...else switch...case
อนุญาตให้มีได้เพียงหนึ่งคำสั่งเท่านั้น คำสั่ง if START END condition true false Statement Flowchart if (condition) statement; C Syntax อนุญาตให้มีได้เพียงหนึ่งคำสั่งเท่านั้น
การผสมคำสั่ง เราสามารถสร้างคำสั่งได้มากกว่าหนึ่งคำสั่งโดยการใส่คำสั่งไว้ใน {...} START END Statement condition true false Flowchart if (condition) { statement1; statement2; : } C Syntax
ตัวอย่าง: คำสั่ง if อ่านตัวเลขหนึ่งจำนวน และหาว่าตัวเลขนั้นเป็นจำนวนคี่ หรือจำนวนคู่ n%2==0 false true #include <stdio.h> #include <conio.h> void main(){ int n; scanf(“%d”,&n); if(n%2==0) printf(“%d is even”,n); if(n%2==1) printf(“%d is odd”,n); } Print "even" n%2==1 false true Print "odd" END
อ่านตัวเลข 2 จำนวนจากทางแป้นพิมพ์ให้ตัวแรกเป็นตัวตั้งตัวที่สองเป็นตัวหาร โดยการหารตัวหารจะเป็น 0 ไม่ได้ ถ้าใส่ตัวเลขตัวที่ 2 เป็น 0 ให้โปรแกรมสิ้นสุดการทำงาน และแสดงผลลัพธ์ทางหน้าจอ ตัวอย่าง: คำสั่ง if START A,B B!=0 false true X=A/B X END
แบบฝึกหัด 5.2 พิจารณาระบบจตุภาค (quadrant) ในระนาบสองมิติดังรูป จงเขียนผังงานเพื่อรับข้อมูลเป็นตัวเลขจำนวนจริงสองค่าเพื่อระบุพิกัด (x,y) และรายงานว่าพิกัดนี้ตกอยู่ในจตุภาค (quadrant) ใด หากพิกัดที่ป้อนเข้ามาตกอยู่บนแกน x หรือแกน y โปรแกรมจะแสดงข้อความ I don't know. ตัวอย่างผลการทำงาน Please input X: -50 Please input X: 0 Please input Y: 10 Please input Y: 50 (-50, 10) is in Q2. I don't know. Q4 Q2 Q3 Q1 X Y
คำสั่ง if…else… if (condition) statementt; else statementf; Flowchart START END Statementf condition true false Statementt Flowchart if (condition) statementt; else statementf; C Syntax
ตัวอย่าง: คำสั่ง if...else อ่านตัวเลขหนึ่งจำนวน และหาว่าตัวเลขนั้นเป็นจำนวนคี่ หรือจำนวนคู่ #include <stdio.h> #include <conio.h> void main(){ int n; scanf(“%d”,&n); if(n%2==0) printf(“%d is even”,n); else printf(“%d is odd”,n); } n%2==0 true false even odd END
if หลายชั้น condition1 condition2 condition3 stmt2a stmt2b stmt3a true false true condition2 false condition3 false true stmt2a stmt2b stmt3a
ตัวอย่าง: if หลายชั้น อ่านตัวเลขหนึ่งจำนวน และหาว่าตัวเลขนั้นเป็นค่าบวก ค่าลบ หรือค่าศูนย์ n > 0 n < 0 Print "positive" true false Read n Print "negative" Print "zero" END
ตัวอย่าง: โปรแกรม C #include <stdio.h> #include <conio.h> void main(){ int n; scanf(“%d”,&n); if(n>0) printf(“%d is positive”,n); else{ if(n<0) printf(“%d is negative”,n); else printf(“%d is a zero”,n); }
การกำหนดหลายเงื่อนไข false Action1; x==1 Action2; x==2 Action3; x==3 Action4; x==4 true Default_Action;
การกำหนดหลายเงื่อนไขกับคำสั่ง if if (x==1) Action1; else if (x==2) Action2; else if (x==3) Action3; else if (x==4) Action4; else Default_Action; false Action1; x==1 Action2; x==2 Action3; x==3 Action4; x==4 true Default_Action;
การใช้คำสั่ง switch…case switch (x) { case 1: Action1; break; case 2: Action2; case 3: Action3; case 4: Action4; default: Default_Action; } false Action1; x==1 Action2; x==2 Action3; x==3 Action4; x==4 true Default_Action;
ไวยากรณ์ switch…case Syntax: <expression> ต้องเป็นประเภทข้อมูล int, char หรือ string switch (<expression>) { case <constant-expression>: <statements>; break; default: }
แบบฝึกหัด 5.3 บริษัทโทรศัพท์มือถือแห่งหนึ่งเสนอโปรโมชั่นให้กับลูกค้าโดยมีการคำนวณค่าธรรมเนียมการใช้งานดังนี้ สองนาทีแรก คิดนาทีละห้าบาท นาทีถัดมาคิดนาทีละสองบาท จงเขียนผังงานเพื่อรับค่าจำนวนนาทีจากผู้ใช้ และคำนวณค่าธรรมเนียมการใช้งาน นอกจากนี้ภายในโปรแกรมยังมีคอมเมนต์กำกับเอาไว้หลายจุดเพื่ออธิบายการทำงานของโปรแกรมในส่วนต่าง ๆ ตัวอย่างผลการทำงาน Enter the number of minutes: 1 The air time fee is 5 baht. Enter the number of minutes: 5 The air time fee is 16 baht.
แบบฝึกหัด 5.4 พิจารณากระบวนการตัดเกรดนักเรียนโดยพิจารณาจากคะแนนสอบไล่ที่ได้ตามเงือนไขดังนี้ เงื่อนไขระดับคะแนน ได้คะแนนน้อยกว่า 50 F ได้คะแนนตั้งแต่ 50 แต่น้อยกว่า 60 D ได้คะแนนตั้งแต่ 60 แต่น้อยกว่า 70 C ได้คะแนนตั้งแต่ 70 แต่น้อยกว่า 80 B ได้คะแนนตั้งแต่ 80 ขึ้นไป A
แบบฝึกหัด 5.5 จงเขียนผังงานเพื่อรับตัวเลขจำนวนเต็ม 1 ตัว ถ้าตัวเลขนั้นมีค่ามากกว่า 10 ให้แสดง ข้อความ This valuable number is more than 10 จงเขียนผังงานเพื่อตรวจสอบเพศของผู้ใช้ โดยให้รับตัวอักขระจากผู้ใช้ ถ้าผู้ใช้ป้อนตัว m ให้ แสดงข้อความ You ‘re a man ถ้าผู้ใช้ป้อนตัว f ให้ แสดงข้อความ You ‘re a woman จงเขียนผังงานเพื่อรับตัวเลขมา 2 จำนวนแล้วทำการเลือกว่าต้องการ + - * / แสดงผลลัพธ์ทางจอภาพ จงเขียนผังงานเพื่อตรวจสอบว่าผู้ใช้ป้อนเลขคู่ เลขคี่ หรือ 0 โดยให้รับตัวเลขจำนวนเต็ม 1 ตัว จากแป้นพิมพ์แล้วไปตรวจสอบว่าเป็นเลขคู่หรือเลขคี่ แล้วแสดงผลลัพธ์ออกมา Enter number : ถ้าเป็นเลข 0 แสดงข้อความ This number is zero. ถ้าเป็นเลขคี่ แสดงข้อความ This number is odd. ถ้าเป็นเลขคู่ แสดงข้อความ This number is even.
แบบฝึกหัด 5.6 คำนวนค่าใช้จ่ายโทรศัพท์โดยคิดตามเวลาที่ใช้ Operator: LEMON อินพุท: ประเภทโปรโมชั่น (promotion type) จำนวนเวลาที่ใช้ (usage time) เอาท์พุท: ค่าใช้จ่าย (payment price) Program Promotion Type Usage time Payment price
สรุป นิพจน์ตรรกศาสตร์ คำสั่งแบบมีเงื่อนไข if...else... switch-case Condition Problems if…else… switch
แบบฝึกหัด จงเขียน Algorithm เพื่อหาค่ามากสุดของเลข 2 จำนวน Input : n1, n2 Output : ค่ามาก Process : 1. รับ n1, n2 2. เปรียบเทียบ n1>n2 ? - ใช่ พิมพ์ค่า n1 - ไม่ใช่ พิมพ์ค่า n2
หาค่ามากสุดของเลข 3 จำนวน Input : n1,n2,n3 Output : ค่ามาก Process : 1. รับ n1,n2,n3 2. เปรียบเทียบ n1 > n20 ? - ใช่ เปรียบเทียบ n1>n3? -ใช่ แสดงค่า n1 - ไม่ใช่ แสดงค่า n3 - ไม่ใช่ เปรียบเทียบ n2>n3? - ใช่ แสดงค่า n2