วิชาการ.คอม-บทเรียนออนไลน์-การเปรียบเทียบ แบบมีทางเลือก (Selection Structures) | บทเรียน วิชาการ.คอม
คอมพิวเตอร์
 

การเปรียบเทียบ แบบมีทางเลือก (Selection Structures)

สร้างเมื่อ 08 เม.ย. 2554 16:00:44
  • ระดับป.ตรี
  • 4,128 view

ผู้เขียน  :  ดร. จันทร์จิรา สินทนะโยธิน, วิศรุต พลสิทธิ


การเขียนโปรแกรมแบบมีทางเลือก (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 มีดังต่อไปนี้


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 แล้วจะเห็นความแตกต่าง)



 

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

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

 ตัวอักษรตัวเล็ก ‘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 characters ");

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 %c ", A, B, C, D);