บทที่ 6 คำสั่งเงื่อนไข

สพฐ 1untitled-41 e0b89ee0b8a3e0b8b0e0b981e0b8aae0b887e0b8a7e0b8b4e0b897e0b8a2e0b8b21 google

ข้อมูลทางตรรกะและตัวดำเนินการ
ข้อมูลทางตรรกะในภาษา C (Logicak Data)
          ในภาษา C นั้นจะไม่มีตัวแปรชนิดข้อมูลแบบตรรกะ แต่ภาษา C จะใช้ชนิดข้อมูลอื่นแทน โดยจะใช้ชนิดข้อมูล int และ Char แทน ถ้าข้อมูลเป็น 0 แสดงว่าเป็นเท็จ ถ้าข้อมูลไม่เป็น 0 แสดงว่าเป็นจริง                                      

 38              
รูปที่ 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

ทางตรรกะ                                                                                                            ในภาษา c
โปรแกรม 6-1 แสดงผลการกระทำของตัวดำเนินการทางตรรกะ

 39

ผลลัพธ์ที่ได้
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 แสดงผลของตัวดำเนินการทางการเปรียบเทียบ
40

ผลลัพธ์ที่ได้
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 ทางเลือก

41       

If…else คำสั่ง if…else นี้ จะต้องใช้เงื่อนไขเพื่อใช้เลือกว่าจะทำคำสั่งไหน ตามรูปที่ 6-4 แสดง ผังการทำงานของคำสั่ง if…else ถ้าเงื่อนไขเป็นจริงก็จะไปทำคำสั่งที่ 1 แต่เงื่อนไขเป็นเท็จก็จะไปทำคำสั่งที่ 2 ซึ่งไม่มีโอกาสที่จะทำทั้งสองคำสั่งได้เลย

 42

                                               รูปที่  6-4 แสดงผังการทำงานของคำสั่ง 2 ทางเลือก

                มีรูปแบบบางอย่างที่ผู้ใช้จะต้องจำให้ได้ สำหรับคำสั่ง if…else  ซึ่งมีดังนี้

  1. เงื่อนไจจะต้องอยู่ในวงเล็บเท่านั้น
  2. ไม่มีเครื่องหมาย ; หลังจบคำสั่ง if และ else แต่เมื่อจบคำสั่งที่ 1 และ คำสั่งที่ 2 จะต้องมีเครื่องหมาย ; ตามปรกติ ดังแสดงในรูปที่ 6-5

43
รูปที่ 6-5 แสดงตัวอย่างของคำสั่ง if…else

หลังคำสั่ง if หรือ else อาจจะมีหรือไม่มีคำสั่งก็ได้
ทั้งคำสั่งที่ 1 และคำสั่งที่ 2 สามารถมีได้เพียง 1 คำสั่งเท่านั้น แต่ถ้าผู้ใช้ต้องการให้มีหลายคำสั่ง จะต้องใส่เข้าไปในวงเล็บ หรือแบบ Compound Statement ดังแสดงในรูปที่ 6-5

 44 

                                               รูปที่ 6-6 แสดงการใช้วงเล็บเข้ามาช่วยในคำสั่ง if…else

If คำสั่ง if ก็คือ คำสั่ง if…else แต่ที่ไม่มี else เพราะคำสั่งทางเป็นเท็จไม่มี หรือจากรูปที่ 6-4 ไม่มีคำสั่งที่ 2 นั่งเอง ซึ่งก็คือจะต้องเป็นจริงเท่านั้นจึงจะทำคำสั่งได้ จากรูปที่ 6-7แสดงให้ เห็นการเปลี่ยนจากคำสั่ง if…else เป็นคำสั่ง if

 45

รูปที่ 6-7 แสดงการเปลี่ยนจากคำสั่ง if…else เป็นคำสั่ง if
46

ผลลัพธ์ที่ได้
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 เพื่อให้โปรแกรมนั้นสามารถแสดงผลได้ถูกต้องมากที่สุด

 47

                             ก.  ผังการทำงาน                                                                                    ข.ชุดคำสั่ง
รูปที่ 6-8 แสดงผังการทำงาน และคำสั่งของ Nested if

โปรแกรม 6-4 คำสั่ง Nedsted if
48

ผลลัพธ์ที่ได้
Please enter two integers :10 10
10 = = 10

ปัญหาของคำสั่ง else
        ปัญหาของคำสั่ง 2 ทางเลือกนั้นก็คือ การจับคู่ระหว่างคำสั่ง if กับคำสั่ง else ปัญหานี้ อาจจะเกิดขึ้นมาจากความไม่เข้าใจของผู้ใช้ ซึ่งส่งผลให้โปรแกรมที่เขียนทำงานไม่ตรงตามที่ผู้ใช้ต้องการการจับคู่ของ 2 คำสั่งนี้คือ ภาษา C จะจับคู่ระหว่างคำสั่ง if กับ else ที่ใกล้กันที่สุดเป็นคู่กัน  วิธีการปกป้องคือ ให้เขียนชุดคำสั่งเป็นแบบ Compound statement

 49

                       ก ชุดคำสั่ง                                                           ข. ผังการทำงาน

รูปที่ 6-9 แสดงการจับคู่ที่ไม่ตรงตามความต้องการของผู้ใช้
50

            ก. ชุดคำสั่ง                                                                                           ข. ผังการทำงาน
รูปที่ 6-10 แสดงการจับคู่ที่ถูกต้องตามความต้องการของผู้ใช้

คำสั่งหลายทางเลือก
            นอกจากคำสั่ง 2 ทางเลือกแล้ว ภาษา C  ยังมีคำสั่งหลายทางเลือกให้ใช้ด้วยเพื่อความสะดวกรวดเร็วในการเขียนและการทำความเข้าใจ เพราะไม่ต้องมานั่งเขียนโปรแกรมที่ยาว

Switch
Switch เป็นคำสั่งที่แปลงมาจากคำสั่ง Nested if คำสั่งนี้จะมีตัวแปรหนึ่งตัวที่ใช้หาว่าจะไปทำที่คำสั่งไหนหรือ case ไหน ซึ่งในรูปที่ 6-11 แสดงผังการทำงานคำสั่ง switch ผู้ใช้สามารถสร้าง case ให้มีจำนวนตามต้องการได้ และชุดคำสั่งของคำสั่ง switch นั้นได้แสดงในรูปที่ 6-12
51

รูปที่ 6-11 แสดงผังการทำงานของคำสั่ง switch

Switch(ตัวแปร)
{
Cass ค่าที่ 1: คำสั่ง
……
Cass ค่าที่ 2: คำสั่ง
……
Cass ค่าที่ n:  คำสั่ง
…….
Default:       คำสั่ง
…….

                                       รูปที่ 6-12 แสดงชุดคำสั่ง switch
จากรูปที่ 6-12 จะเห็นว่ามี case default ซึ่ง case นี้มีไว้สำหรับในกรณีที่ไม่ตรงกับ case ไหนเลย ก็ให้มาทำคำสั่งที่ case  default คำสั่ง case default นี้ไม่จำเป็นต้องมีก็ได้

โปรแกรม 6-5 คำสั่ง switch

52

          ในโปรแกรมที่ 6-5 จะมีทั้ง 3 case ใน case แรกจะทำก็ต่อแปร PrintFlag เป็น 1 ใน case ที่ 2จะทำก็ต่อเมื่อตัวแปร printFlag เป็น 2 และใน case Default จะทำก็ต่อเมื่อตัวแปร printFlag ไม่เป็นทั้ง 1 และ 2 ผลของโปรแกรม 6-5 ได้แสดงในรูปที่ 6-13

53
เมื่อ printFlag เป็น 1                        เมื่อ printFlag เป็น 2                     เมื่อ printFlag   ไม่เป็นทั้ง 1 และ 2

รูปที่ 6-13 แสดงผลการทำงานของโปรแกรม 6-5 เมื่อ 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 เข้ามาช่วย

54

 55

       เมื่อ printFlag เป็น 1     เมื่อ printFlag เป็น 2      เมื่อ printFlag  ไม่เป็น
ทั้ง 1 และ2
รูปที่ 6-14 แสดงผลการทำงานของโปรแกรม 6-6 เมื่อ printFlag มีค่าต่าง ๆ

ในโปรแกรมที่ 6-7 เป็นโปรแกรมการตัดเกรด โดยมีขอบเขตดังนี้ มากกว่า 79 ได้ A
70 – 79 ได้ B  60 -69 ได้ C  50 – 59 ได้ D  และน้อยกว่า 50 ได้ F

โปรแกรม 6-7 โปรแกรมตัดเกรด

56

 57

else –if ตัวแปรที่ใช้ในคำสั่ง Switch นั้นจะต้องเป็นชนิดข้อมูลที่เป็นจำนวนเต็มเท่านั้น แต่ถ้าเมื่อไรที่ต้องใช้ตัวแปรที่เป็นชนิดข้อมูลทศนิยม ก็จะไม่สามารถใช้คำสั่ง Switch ได้ แต่ภาษา C ก็ได้มีคำสั่งอีกคำสั่งหนึ่งที่เป็นคำสั่งหลายทางเลือกและสามารถใช้ได้กับชนิดข้อมูลทุก ประเภท คำสั่งนั้นก็คือ Else – if ซึ่งชุดคำสั่งเหมือนกับคำสั่ง if – else แต่ต่างกันตรงที่ในคำสั่งelse ใช้ต่อด้วยคำสั่ง if ได้เลย ดังเช่นตัวอย่างด้านล่าง
if(score>=80)
grade = ‘A’
else if (scor>=70)
grade = ‘B’

 58

 รูปที่ 6-8 แสดงผังการทำงานของโปรแกรมที่ 6-8

 59

ผลลัพธ์ที่ได้
Enter thetest score (0-100): 75
The grade is B

Design by Pratya |

ใส่ความเห็น