วันเสาร์ที่ 1 ธันวาคม พ.ศ. 2555

บทที่ 3 - การเปรียบเทียบ แบบมีทางเลือก


บทที่ 3 - การเปรียบเทียบ แบบมีทางเลือก (Selection Structures)
การเขียนโปรแกรมแบบมีทางเลือก (Selection Structures) 

การเขียนโปรแกรมแบบมีทางเลือก จะสามารถทำให้โปรแกรมสามารถตัดสินใจหรือเปรียบเทียบ จากนั้นก็จะเลือกดำเนินการไปในทิศทางหนึ่งจากสองทิศทาง ขึ้นอยู่กับผลที่ได้จากการเปรียบเทียบนั้น

เงื่อนไข (Condition) 
- เป็นตัวกำหนดเงื่อนไขที่ผู้พัฒนาโปรแกรมได้สร้างขึ้นมา
- ผลลัพธ์ที่ได้จากเงื่อนไข จะมีค่า จริงหรือ เท็จ

โครงสร้างของเงื่อนไข (Condition Control Structures) 

ประโยคเงื่อนไขสามารถที่จะเขียนให้อยู่ในรูปภาษา C จะเขียนได้ดังนี้

if condition then A else B

ซึ่งหมายความว่า ถ้าเงื่อนไข (condition) มีค่าเป็นจริง ก็จะดำเนินการทำคำสั่ง A มิเช่นนั้นก็จะทำคำสั่ง B 
ตัวอย่างของการเขียนโครงสร้างทางเลือกในภาษา C สามารถเขียนได้ดังนี้


if (x < y)

 a = x * 2;

else

 a = x + y;



ความหมายของ code ดังกล่าว หมายความว่า ถ้า ค่า x มีค่าน้อยกว่า y แล้ว a = x*2 
แต่ถ้า x มีค่ามากกว่าหรือเท่ากับ y แล้ว a = x+y นั่นเอง

รูปแบบของเงื่อนไข ส่วนใหญ่จะอยู่ในรูป “ตัวแปร โอเปอเรเตอร์ ตัวแปร” โอเปอเรเตอร์ที่กล่าวถึงนี้จะมีอยู่ 2 แบบ ด้วยกันคือ โอเปอเรเตอร์สัมพันธ์ (Relational Operator) และ โอเปอเรเตอร์ลอจิก (Logical Operator)

โอเปอเรเตอร์สัมพันธ์ที่ใช้ในภาษา C มีดังต่อไปนี้

5523


if ( condition1 ) 

   statement1 ; 

else 

      if ( condition2 ) 

           statement2 ; 

           . . . 

        else if ( condition-n ) 

                  statement-n ; 

                else 

                  statement-e ;



ยกตัวอย่างของโปรแกรม Nested if สามารถเขียนได้ดังนี้

if (x < 0.25)

  count1++;

else if (x < 0.5)

           count2++;

        else if (x < 0.75)

                  count3++;

                else

                    count4++;



นอกจากรูปแบบของ if-else แล้ว เรายังสามารถใช้เครื่องหมาย ? มาประยุกต์ในการเขียน code เพื่อให้ได้ความหมายเดียวกันกับ if-else ดังแสดงให้เห็นดังนี้

if (x < y)

 a = x * 2;

else

 a = x + y;



สามารถเขียนได้ในอีกรูปแบบหนึ่งคือ a = x < y ? x*2: x+y ; // ซึ่งจะให้ความหมายเดียวกันกับ code ข้างบนนั่นเอง

ในบางครั้งที่เราต้องเขียนโปรแกรมแบบมีทางเลือก โดยบางครั้งเราต้องการให้มีทางเลือกมากว่า 2 ทาง Nested if เป็นวิธีหนึ่งที่สามารถใช้แก้ปัญหาได้ แต่เพื่อให้ง่ายขึ้น ในภาษา C เราจึงสามารถใช้คำสั่ง switch ได้ โดยรูปแบบการเขียน คำสั่ง switch สามารถเขียนให้อยู่ในรูป

switch (selector) 

      {

      case label1: statement1;

          break;

      case label2: statement2;

          break;

          ...

      case labeln: statementn;

          break;

      default: statementd; // optional

          break;

      }



โดยที่ selector จะต้องเป็นจำนวนเต็ม ตัวอักษร หรือผลลัพธ์ของการกระทำที่ให้เลขจำนวนเต็มหรือตัวอักษร ตัวอย่างของการเขียน code โดยมีการเรียกใช้คำสั่ง switch สามารถเขียนได้ดังนี้

switch (i)
{
case 1 : grade = 'A';
break;
case 2 : grade = 'B';
break;
case 3 : grade = 'c';
break;
default : printf("%c not in range", i);
break;
}

โดยหลักการของ switch คือ compiler จะทำการเปรียบเทียบค่าของ selector เทียบกับ label ถ้าไม่ตรงกับ label ใดๆ ก็จะเข้าไปทำในคำสั่งของ default นอกจากนี้ การใส่คำสั่ง break หรือไม่มีคำสั่ง break ก็จะให้ผลลัพธ์ที่แตกต่างกัน ดังแสดงให้เห็นดังตัวอย่างต่อไปนี้ (ทดลอง Run แล้วจะเห็นความแตกต่าง)

5524


5525


การเปรียบเทียบตัวอักษร

คุณผู้อ่านทราบกันหรือไม่ว่า ตัวอักษรสามารถเปรียบเทียบค่ากันได้ เบื้องต้นเราต้องทราบก่อนว่า ตัวอักษรมีค่าอย่างไรกันบ้าง

 ตัวอักษรตัวเล็ก ‘a’ มีค่า 97 ไปจนถึง ‘z’ มีค่า 122
 ตัวอักษรตัวใหญ่ ‘A’ มีค่า 65 ไปจนถึง ‘Z’ มีค่า 90

ตัวอย่างของการเปรียบเทียบตัวอักษร สามารถแสดงให้เห็นได้ดังนี้

 ‘9’ >= ‘0’ มีค่าเป็นจริง (1)
 ‘a’ < ‘e’ มีค่าเป็นจริง (1)
 ‘B’ <= ‘A’ มีค่าเป็นเท็จ (0)
 ‘a’ <= ‘A’ ขึ้นอยู่กับระบบ แต่ส่วนใหญ่ เป็นเท็จ
 ‘a’ <= ‘c’ && ‘c’ <= ‘z’ มีค่าเป็นจริง

คราวนี้เราลองมาดูโจทย์กัน สมมุติว่า เราจะเขียนโปรแกรม เพื่ออ่านค่าตัวอักษร 4 ตัว แล้ว เราต้องการที่จะเปลี่ยนตัวอักษรแต่ละตัว ให้เป็นตัวอักษรใหญ่ หรือเล็กที่ตรงข้ามกับค่าที่รับเข้าไป ยกตัวอย่างเช่น PooH ให้เปลี่ยนเป็น pOOh เราจะเขียนโปรแกรมอย่างไร

คำตอบ วิธีหนึ่งที่สามารถทำได้ คือใช้ Nested-if ดังนี้

#include 
void main()
{
char A, B, C, D;
printf("Input 4 charactersn");
scanf("%c %c %c %c", &A, &B, &C, &D);

if((A <= 90)&&(A >= 65)) A = (A - 65) + 97;
else if ((A >= 97)&&(A <= 122)) A = (A-97) + 65;
else A = A;
if((B <= 90)&&(B >= 65)) B = (B - 65) + 97;
else if ((B >= 97)&&(B <= 122)) B = (B-97) + 65;
else B = B;
if((C <= 90)&&(C >= 65)) C = (C - 65) + 97;
else if ((C >= 97)&&(C <= 122)) C = (C-97) + 65;
else C = C;
if((D <= 90)&&(D >= 65)) D = (D - 65) + 97;
else if ((D >= 97)&&(D <= 122)) D = (D-97) + 65;
else D = D;
printf("The answer is %c %c %c %cn", A, B, C, D); 

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

แนะนำ ภาษา C++ เบื้องต้น

แนะนำ ภาษา C++ เบื้องต้น   ประวัติภาษา C , C++ ค . ศ . 1970 มีการพัฒนาภาษา B โดย Ken Thompson ซึ่งทำ งานบนเครื่อง DEC PDP-7 ซึ่ง ...