คำสั่งเงื่อนไข
ข้อมูลทางตรรกะและตัวดำเนินการ
ข้อมูลทางตรรกะในภาษา C (Logicak Data)
ในภาษา C นั้นจะไม่มีตัวแปรชนิดข้อมูลแบบตรรกะ แต่ภาษา C จะ
ใช้ชนิดข้อมูลอื่นแทน โดยจะใช้ชนิดข้อมูล int และ Char แทน ถ้า
ข้อมูลเป็น 0 แสดงว่าเป็นเท็จ ถ้าข้อมูลไม่เป็น 0 แสดงว่าเป็นจริง
รูปที่ 6 – 1 แสดงแนวคิดของค่าจริงและเท็จ บนกราฟจำนวน
ตัวดำเนินการทางตรรกะ
ในภาษา C มีตัวดำเนินการทางตรรกะ 3 ตัว ซึ่งแสดงใน
ตารางที่ 6 – 1
ตารางที่ 6 – 1 ตัวดำเนินการทางตรรกะ
ตัวดำเนินการ |
ความหมาย
|
ลำดับความสำคัญ
|
!
|
not
|
15
|
&&
|
and
|
5
|
||
|
or
|
4
|
not ตัวดำเนินการ not มีลำดับความในระดับ 15 จะใช้
นำหน้าตัวแปรที่ต้องการ ความหมาย คือ จะเปลี่ยนจากคำที่เป็น
จริงให้เป็นเท็จ หรือกลับกัน หรือเปลี่ยนจาก 0 เป็น 1 ซึ่งตาราง
ความจริงของ not ซึ่งแสดงในรูปที่ 6 – 2
and ตัวดำเนินการ and (&&)มีลำดับความในระดับ 5
ใช้เชื่อม 2 เงื่อนไขหรือมากกว่า จะให้เป็นจริงเมื่อเงื่อนไขทั้งสอง
หรือทั้งหมดเป็นจริง และจะให้เป็นเท็จ เมื่อมีอย่างน้อย 1 เงื่อนไข
เป็นเท็จ ซึ่งตารางความจริงของ and แสดงในรูปที่ 6 – 2
or ตัวดำเนินการ or (||)มีลำดับความในระดับ 5 ใช้
เชื่อม 2 เงื่อนไขหรือมากกว่าจะให้เป็นจริง เมื่อมีอย่างน้อย 1
เงื่อนไขเป็นจริง และจะให้เป็นเท็จ เมื่อเงื่อนไขทั้งสองหรือทั้งหมด
เป็นเท็จ ซึ่งตารางความจริงของ or แสดงในรูปที่ 6 – 2
Not !
x |
!x
|
เท็จ
|
จริง
|
จริง
|
เท็จ
|
x
|
!x
|
0
|
1
|
=0
|
0
|
And &&
x |
y
|
X&&y
|
เท็จ
|
เท็จ
|
เท็จ
|
เท็จ
|
จริง
|
เท็จ
|
จริง
|
เท็จ
|
เท็จ
|
จริง
|
จริง
|
จริง
|
x
|
y
|
x&&y
|
0
|
0
|
0
|
0
|
=0
|
0
|
=0
|
0
|
0
|
=0
|
?0
|
1
|
Or ||
x |
y
|
X||y
|
เท็จ
|
เท็จ
|
เท็จ
|
เท็จ
|
จริง
|
จรืง
|
จริง
|
เท็จ
|
จรืง
|
จริง
|
จริง
|
จริง
|
x
|
y
|
x||y
|
0
|
0
|
0
|
0
|
?0
|
1
|
?0
|
0
|
1
|
?0
|
?0
|
1
|
ทางตรรกะ ในภาษาซี
โปรแกรม 6-1 แสดงผลการกระทำของตัวดำเนินการทางตรรกะ
ผลลัพธ์ที่ได้
5 && -3 is 1
5 && 0 is 0
5 && 5 is 0
0 && 5 is 0
5 | | 0 is 1
0 | | 5 is 1
0 | | 0 is 0
! 5 && ! 0 is 0
! 5 && 0 is 0
5 && ! 0 is 1
ตัวดำเนินการทางการเปรียบเทียบ
ในภาษาC มีตัวดำเนินการทางการเปรียบเทียบทั้งหมด6ตัว
ทั้งหมดจะเป็นตัวดำเนินการที่จะทำการเปรียบเทียบระหว่างค่า2ค่า
และจะให้ผลลัพธ์ออกมาเป็นจริง (1) หรือเท็จ (0)
เท่านั้น ซึ่งตัวดำเนินการทางการเปรียบเทียบแสดงในตารางที่ 6-2
ตารางที่ 6-2 แสดงผลของตัวดำเนินการทางการเปรียบเทียบ
ตัวดำเนินการ |
ความหมาย
|
ลำดับความสำคัญ
|
<
|
น้อยกว่า
| |
<=
|
น้อยกว่าหรือเท่ากับ
|
10
|
>
|
มากกว่า
| |
>=
|
มากกว่าหรือเท่ากับ
| |
==
|
เท่ากับ
|
9
|
!=
|
ไม่เท่ากับ
|
โปรแกรม 6-2 แสดงผลของตัวดำเนินการทางการเปรียบเทียบ
ผลลัพธ์ที่ได้
5 <-3 is 0
5 == -3 is 0
5 != 3 is 1
5 > -3 is 1
5 <= -3 is 0
5 >= -3 is 1
คำสั่ง 2 ทางเลือก
คำสั่ง 2 ทางเลือกเป็นพื้นฐานของคำสั่งเงื่อนไขในภาษา
คอมพิวเตอร์นั้น คำสั่งประเภทนี้จะต้องมีเงื่อนไขการตัดสินใจ เพื่อ
ใช้หาคำตอบว่าจะไปทางไหน ถ้าเงื่อนไขเป็นจริงก็จะไปทำคำสั่ง
ทางหนึ่ง แต่ถ้าเงื่อนไขเป็นเท็จก็จะไปทำคำสั่งอีกทางหนึ่ง ผัง
การทำงานของคำสั่ง 2 ทางเลือก
If…else คำสั่ง if…else นี้ จะต้องใช้เงื่อนไขเพื่อใช้
เลือกว่าจะทำคำสั่งไหน ตามรูปที่ 6-4 แสดง ผังการทำงานของ
คำสั่ง if…else ถ้าเงื่อนไขเป็นจริงก็จะไปทำคำสั่งที่ 1 แต่
เงื่อนไขเป็นเท็จก็จะไปทำคำสั่งที่ 2 ซึ่งไม่มีโอกาสที่จะทำทั้งสอง
คำสั่งได้เลย
รูปที่ 6-4
แสดงผังการทำงานของคำสั่ง 2 ทางเลือก
มีรูปแบบบางอย่างที่ผู้ใช้จะต้องจำให้ได้ สำหรับคำสั่ง
if…else ซึ่งมีดังนี้
2. ไม่มีเครื่องหมาย ; หลังจบคำสั่ง if และ else แต่เมื่อจบ
คำสั่งที่ 1 และ คำสั่งที่ 2 จะต้องมีเครื่องหมาย ; ตามปรกติ
ดังแสดงในรูปที่ 6-5
รูปที่ 6-5 แสดงตัวอย่างของคำสั่ง if…else
ทั้งคำสั่งที่ 1 และคำสั่งที่ 2 สามารถมีได้เพียง 1 คำสั่งเท่านั้น
แต่ถ้าผู้ใช้ต้องการให้มีหลายคำสั่ง จะต้องใส่เข้าไปในวงเล็บ หรือ
แบบ Compound Statement ดังแสดงในรูปที่ 6-5
รูปที่ 6-6 แสดงการใช้วงเล็บเข้ามาช่วยในคำสั่ง
if…else
If คำสั่ง if ก็คือ คำสั่ง if…else แต่ที่ไม่มี
else เพราะคำสั่งทางเป็นเท็จไม่มี หรือจากรูปที่ 6-4 ไม่มี
คำสั่งที่ 2 นั่งเอง ซึ่งก็คือจะต้องเป็นจริงเท่านั้นจึงจะทำคำสั่ง
ได้ จากรูปที่ 6-7แสดงให้ เห็นการเปลี่ยนจากคำสั่ง if…
else เป็นคำสั่ง if
รูปที่ 6-7 แสดงการเปลี่ยนจากคำสั่ง if…else เป็นคำสั่ง
if
ผลลัพธ์ที่ได้
Please enter two integers: 10 15
10<=15
Nested if เป็นคำสั่ง if…else มีคำสั่ง if…
else หรือคำสั่ง if ซ้อนอยู่ด้านในอีกทีหนึ่งผังการทำงาน
ของ Nested if และชุดคำสั่งได้แสดงในรูปที่ 6-8 ซึ่งการ
ซ้อนนั้นสามารถมีได้ไม่จำกัด แต่ถ้ามีมากกว่า 3 ชั้น จะทำให้
การทำความเข้าใจในโปรแกรมนั้นยาก
ในโปรแกรม 6-3 คือโปรแกรมที่ปรับปรุงจากโปรแกรมที่
6-2 โดยใช้คำสั่ง Nested if เพื่อให้โปรแกรมนั้นสามารถ
แสดงผลได้ถูกต้องมากที่สุด
ก.ผังการทำงาน ข.ชุดคำสั่ง
รูปที่ 6-8 แสดงผังการทำงาน และคำสั่งของ Nested if
โปรแกรม 6-4 คำสั่ง Nedsted if
ผลลัพธ์ที่ได้
Please enter two integers :10 10
10 = = 10
ปัญหาของคำสั่ง else
ปัญหาของคำสั่ง 2 ทางเลือกนั้นก็คือ การจับคู่ระหว่าง
คำสั่ง if กับคำสั่ง else ปัญหานี้ อาจจะเกิดขึ้นมาจาก
ความไม่เข้าใจของผู้ใช้ ซึ่งส่งผลให้โปรแกรมที่เขียนทำงานไม่
ตรงตามที่ผู้ใช้ต้องการการจับคู่ของ 2 คำสั่งนี้คือ ภาษา C จะ
จับคู่ระหว่างคำสั่ง if กับ else ที่ใกล้กันที่สุดเป็นคู่กัน วิธี
การปกป้องคือ ให้เขียนชุดคำสั่งเป็นแบบ Compound
statement
รูปที่ 6-9 แสดงการจับคู่ที่ไม่ตรงตามความต้องการของผู้ใช้
ก. ชุดคำสั่ง ข. ผังการทำงาน
รูปที่ 6-10 แสดงการจับคู่ที่ถูกต้องตามความต้องการของผู้ใช้
คำสั่งหลายทางเลือก
นอกจากคำสั่ง 2 ทางเลือกแล้ว ภาษา C ยังมีคำสั่ง
หลายทางเลือกให้ใช้ด้วยเพื่อความสะดวกรวดเร็วในการเขียน
และการทำความเข้าใจ เพราะไม่ต้องมานั่งเขียนโปรแกรมที่ยาว
Switch
Switch เป็นคำสั่งที่แปลงมาจากคำสั่งNested if
คำสั่งนี้จะมีตัวแปรหนึ่งตัวที่ใช้หาว่าจะไปทำที่คำสั่งไหนหรือ
case ไหน ซึ่งในรูปที่ 6-11 แสดงผังการทำงานคำสั่ง
switch ผู้ใช้สามารถสร้าง case ให้มีจำนวนตามต้องการได้
และชุดคำสั่งของคำสั่ง switch นั้นได้แสดงในรูปที่ 6-12
รูปที่ 6-11 แสดงผังการทำงานของคำสั่ง switch
Switch(ตัวแปร)
{
Cass ค่าที่ 1: คำสั่ง
......
Cass ค่าที่ 2: คำสั่ง
......
Cass ค่าที่ n: คำสั่ง
.......
Default: คำสั่ง
.......
รูปที่ 6-12 แสดงชุดคำสั่ง switch
case นี้มีไว้สำหรับในกรณีที่ไม่ตรงกับ case ไหนเลย ก็ให้มาทำ
คำสั่งที่ case default คำสั่ง case default นี้ไม่จำเป็น
ต้องมีก็ได้
โปรแกรม 6-5 คำสั่ง switch
ในโปรแกรมที่ 6-5 จะมีทั้ง 3 case ใน case แรก
จะทำก็ต่อแปร PrintFlag เป็น 1 ใน case ที่ 2จะทำก็
ต่อเมื่อตัวแปร printFlag เป็น 2 และใน case
Default จะทำก็ต่อเมื่อตัวแปร printFlag ไม่เป็นทั้ง 1
และ 2 ผลของโปรแกรม 6-5 ได้แสดงในรูปที่ 6-13
เมื่อ PrintFlag มีค่าต่าง ๆ
จากรูปที่ 6-13 เมื่อ printFlag มีค่าเป็น 1 จะ
แสดง ทั้ง 3 คำสั่งเลย ถ้า printFlag มีค่าเป็น 2 จะ
ข้ามคำสั่งของ case แรก ไป และทำคำสั่งที่เหลืออีก 2
คำสั่ง และถ้า printFlag มีค่าที่ เป็นทั้ง 1 และ 2 จะ
ข้ามคำสั่งของ Case แรกและ Case ที่สองไป และทำคำสั่ง
ใน Case Defaultg เพียง 1 คำสั่งเท่านั้น แต่ถ้าผู้ใช้
ต้องการที่จะให้ทำคำสั่งที่อยู่ในเฉพาะ Case ใด Case
หนึ่ง ผู้ใช้จะต้องใช้คำสั่ง Bread เข้ามาช่วย เพื่อให้เมื่อทำ
คำสั่งใน Case นั้น ๆ เสร็จแล้วให้กระโดนออกจากชุดคำสั่ง
Switch และโปรแกรมจะได้ไม่ไปทำคำสั่งใน Case อื่น ๆ
ด้วย ซึ่งโปรแกรมที่ 6-6 เป็นโปรแกรมที่แก้ไขจากโปรแกรมที่
6-5 โดยการใช้คำสั่ง Break เข้าไป และรูปที่ 6-14 เป็น
ผลของโปรแกรมที่ 6-6
โปรแกรม 6-6 คำสั่ง Switch โดยมรคำสั่ง Break เข้ามา
ช่วย
รูปที่ 6-14 แสดงผลการทำงานของโปรแกรม 6-6 เมื่อ
printFlag มีค่าต่าง ๆ
ในโปรแกรมที่ 6-7 เป็นโปรแกรมการตัดเกรด โดยมี
ขอบเขตดังนี้ มากกว่า 79 ได้ A 70 – 79 ได้
B 60 -69 ได้ C 50 – 59 ได้ D และน้อยกว่า 50
ได้ F
โปรแกรม 6-7 โปรแกรมตัดเกรด
else –if ตัวแปรที่ใช้ในคำสั่ง Switch นั้นจะต้อง
เป็นชนิดข้อมูลที่เป็นจำนวนเต็มเท่านั้น แต่ถ้าเมื่อไรที่ต้องใช้
ตัวแปรที่เป็นชนิดข้อมูลทศนิยม ก็จะไม่สามารถใช้คำสั่ง
Switch ได้ แต่ภาษา C ก็ได้มีคำสั่งอีกคำสั่งหนึ่งที่เป็นคำสั่ง
หลายทางเลือกและสามารถใช้ได้กับชนิดข้อมูลทุกประเภทคำสั่ง
นั้นก็คือ Else – if ซึ่งชุดคำสั่งเหมือนกับคำสั่งif–else
แต่ต่างกันตรงที่ในคำสั่งelse ใช้ต่อด้วยคำสั่ง if ได้
เลย ดังเช่นตัวอย่างด้านล่าง
if(score>=80)
grade = ‘A’
else if (scor>=70)
grade = ‘B’
รูปที่ 6-8 แสดงผังการทำงานของโปรแกรมที่ 6-8
ผลลัพธ์ที่ได้
The grade is B
ไม่มีความคิดเห็น:
แสดงความคิดเห็น