Issuu on Google+

!

บทที่ 3 การเลือกทํา ♦!ความหมายของการเลือกทํา การเลือกทํา หมายถึง การกําหนดใหโปรแกรมทํางานอยางหนึง่ เมือ่ เงือ่ นไข (Condition) เปน จริงและทํา (หรือไมตอ งทํางานใด ๆ ) เมือ่ เงือ่ นไข เปนเท็จ งานโปรแกรมคอมพิวเตอรมกี ารกําหนดให เลือกทําอยูมากมายการถามผูใช เชน Save (Y/N) _ Continue(Y/N) _ เปนตน

♦!การเลือกทําแบบ if การเลือกทําแบบ if เริ่มดวยการทดสอบเงื่อนไขที่ไดกาหนดไว ํ กอ น อาจมีมากกวา 1 เงือ่ นไขก็ ได ผลการตรวจสอบเงือ่ นไข ถาผล - เปนจริง statement ตอจาก if จะถูกทํางาน - เปนเท็จ statement ตอจาก if จะไมถูกทํางานหรือไมตองทํางานใด ๆ รูปแบบ 1 แบบ statement เดียว มีรูปแบบ ดังนี้ if (เงือ่ นไขการเปรียบเทียบ) statement;

!

ศิริชัย นามบุรี

รูปแบบ 2 แบบหลาย statement มีรูปแบบ ดังนี้ if (เงือ่ นไขการเปรียบเทียบ) { statement; statement; statement; … }

การเลือกทํา


!

34 •! ตัวอยางโปรแกรม test_if1.cpp แสดงการรับขอมูลจํานวนเต็ม 2 จํานวน และเปรียบเทียบ กันโดยใช if แบบประโยค(statement) เดียว

/*Program : test_if1.cpp Process : copare 2 integer */ #include <iostream.h> #include <conio.h> void main() { int x,y; int result = 100; //start statement clrscr(); cout<< "Please enter integer number : \n"; cout<< "Finst number : "; cin>>x; cout<< "\nSecond number : "; cin>>y; //condition of if if (x>y) //condition cout<<"\nFirst number is greater than second number\a\n"; if (x+y>result) //condition cout<<"\nFirst number + Seconde number is greater than \a\n"<<result; getch(); }

•! โปรแกรม test_if2.cpp แสดงการเปรียบเทียบจํานวนตัวเลข 2 จํานวน และใช if แบบ หลาย ประโยค(Compound statement) /*Program : test_if2.cpp Process : copare 2 integer*/ #include <iostream.h> #include <conio.h> void main() { int x,y; int result = 100; //start statement clrscr(); cout<< "Please enter integer number : \n"; cout<< "Finst number : "; cin>>x; cout<< "\nSecond number : "; cin>>y; //condition of if

ศิริชัย นามบุรี

การเลือกทํา


!

}

35 if (x>y) { clrscr(); cout<<"\nFirst number is : "<<x; cout<<"\nSecond number is : "<<y; cout<<"\nFirst number is greater than second number\a\n"; } if (x+y<=result) { clrscr(); cout<<"\nFirst number is : "<<x; cout<<"\nSecond number is : "<<y; cout<<"\nFirst number + Seconde number <= \a\n"<<result; } getch();

♦!การเลือกทําแบบ if…else การเลือกทําแบบ if …else มีหลักการทํางาน คือเริม่ ดวยการทดสอบเงือ่ นไขทีก่ ําหนดไว ถาผล การตรวจสอบเงือ่ นไข เปนดังนี้ - เปนจริง statement ที่อยูตอจาก if จะถูกทํางาน - เปนเท็จ statement ที่อยูตอจาก else จะถูกทํางาน

!

รูปแบบที่ 1 if…else แบบ statement เดียว มีรูปแบบ ดังนี้ if(เงือ่ นไขการเปรียบเทียบ) statement; else statement; รูปแบบที่ 2 if…else แบบหลาย statement มีรูปแบบ ดังนี้ if(เงือ่ นไขการเปรียบเทียบ) { statement; statement; statement; } else { statement; statement; }

ศิริชัย นามบุรี

การเลือกทํา


!

36 •! ตัวอยางโปรแกรม test_if3.cpp แสดงการใช if…else แบบ statement เดียว

/*Program : test_if3.cpp Process : copare 2 integer and use if...else one statement */ #include <iostream.h> #include <conio.h> void main() { int x,y; //start statement clrscr(); cout<< "Please enter integer number : \n"; cout<< "Finst number : "; cin>>x; cout<< "\nSecond number : "; cin>>y; if (x>y) //condition of if cout<<"\nFirst number is greater than second number\a\n"; else cout<<"\nSecond number is greater than or equal first number\a\n"; getch(); } •! ตัวอยางโปรแกรม test_if4.cpp แสดงการใช if…else แบบหลาย statement

/*Program : test_if3.cpp Process : copare 2 integer and use if...else */ #include <iostream.h> #include <conio.h> void main() { int x,y; //start statement clrscr(); cout<< "Please enter integer number : \n"; cout<< "Finst number : "; cin>>x; cout<< "\nSecond number : "; cin>>y; //condition of if if (x>y) ศิริชัย นามบุรี

การเลือกทํา


!

}

37 { clrscr(); cout<<"You enter 2 number :"; cout<<"\nFirst number is : "<<x; cout<<"\nSecond number is : "<<y; cout<<"\nFirst number is greater than second number\a\n"; getch(); } else { clrscr(); cout<<"You enter 2 number :"; cout<<"\nFirst number is : "<<x; cout<<"\nSecond number is : "<<y; cout<<"\nSecond number is greater than or equal first number\a\n"; } getch();

♦!การเลือกทําแบบ if ซอนกัน (nested if) เราสามารถใช if…else if ซอนกัน เพือ่ ตรวจสอบเงือ่ นไขในโปรแกรมใหมที างเลือกหลาย ๆ ทางได มีรปู แบบดังนี้

!

if (เงือ่ นไขที่ 1) { statement; statement; } else if (เงือ่ นไขที่ 2) { statement; statement; } ! ! else if (เงือ่ นไขที่ 3) { statement; ! statement; ! } ! else ! { statement; ! •! ตัวอยางโปรแกรม grade1.cpp แสดงการคํานวณเกรด โดยการกรอกคะแนนรวมทาง statement; ! คียบอรด โดยมีเงื่อนไขการตัดเกรดจากคะแนนรวม ดังนี้ } !

ศิริชัย นามบุรี

การเลือกทํา


!

38 คะแนนรวม 0-49 ไดเกรด คะแนนรวม 50-59 ไดเกรด คะแนนรวม 60-69 ไดเกรด คะแนนรวม 70-79 ไดเกรด คะแนนรวม 80-100 ไดเกรด คะแนนอืน่ ๆ (ไมถูกตอง) ไดเกรด โดยแสดงการใช if…else…if แบบ statement เดียว ดังนี้

F D C B A *

/*Program: grade1.cpp Process: calculate grade from total score*/ #include <iostream.h> #include <conio.h>

void main() { int score; char grade; //begin statement clrscr(); cout<< "Program calculate grade"; cout<< "\n\nPlease enter your score : "; cin>>score; //input score if (score<0) //calculate grade use if...else if.. grade='*'; else if (score<=49) grade='F'; else if(score<=59) grade='D'; else if(score<=69) grade='C'; else if(score<=79) grade='B'; else if(score<=100) grade='A'; else grade='*'; cout<< "You get grade : \a"<<grade<<'\n'; //show get grade if (grade=='*') cout<< "Your score = "<<score<< " is error range !!!\n"; getch(); }

ศิริชัย นามบุรี

การเลือกทํา


!

39 •! ตัวอยางโปรแกรม grade2.cpp แสดงการคํานวณการตัดเกรดโดยใช Logical Operator ได แก || (OR) && (AND) มาใชในการกําหนดเงือ่ นไข ซึง่ มีผลลัพธการทํางานเหมือน โปรแกรม grade1.cpp

/*Program: grade2.cpp Process: calculate grade from total score */ #include <iostream.h> #include <conio.h> void main() { int score; char grade; //begin statement clrscr(); cout<< "Program calculate grade"; cout<< "\n\nPlease enter your score : "; cin>>score; //input score //calculate grade use if...else if.. if (score<0 || score>100) //check enter error score grade='*'; else if (score>=0 && score<=49) grade='F'; else if(score>=50 && score<=59) grade='D'; else if(score>=60 && score<=69) grade='C'; else if(score>=70 && score<=79) grade='B'; else grade='A'; // end of if command cout<< "You get grade : \a"<<grade<<'\n'; //show get grade if (grade=='*') cout<< "Your score = "<<score<< " is error range !!!\n"; getch(); }

ศิริชัย นามบุรี

การเลือกทํา


!

40

♦!การใช Conditional Operator ?: ใน C++ มีการกําหนดเงือ่ นไขทีท่ ํางานไดเหมือน if…else เรียกวา conditional operator ใช สัญลักษณ ?: แทน มีรูปแบบ คือ

ตัวแปรเก็บผลลัพธ = (เงื่อนไขเปรียบเทียบ) ? คาที่ 1 : คาที่ 2; หลักการทํางานเมือ่ เงือ่ นไขใหคา เปน จริง ตัวแปรผลลัพธจะมีคาเปน คาที่ 1 แตถา เงือ่ นไขใหคา เปน เท็จ ตัวแปรผลลัพธจะมีคาเปน คาที่ 2 พิจารณาประโยค if…else ตอไปนี้ if (a>b) c=a; else c=b; หรือ if (a>b) c= a; else c=b; จากประโยค if…else ดังกลาว สามารถใช conditional operator แทนไดดงั นี้ c=(a>b)? a : b;

♦!การเลือกทําแบบ switch … case ในกรณีที่การเลือกทํามีหลายเงื่อนไข แตละเงื่อนไขขึ้นอยูกับ ตัวแปร (variable) ตัวเดียวกัน ที่ เปนประเภท int หรือ char สามารถใชการเลือกทําแบบ switch…case แทนการเลือก ทําแบบ if ซอนกัน (nested if ) ได โดยมีรปู แบบดังนี้ switch(ตัวแปรชนิด int หรือ char) { case คาคงที่ชนิด int หรือ char: statement; statement; break; case คาคงที่ชนิด int หรือ char: statement; statement; break; default: statement; break; } ! ศิริชัย นามบุรี

การเลือกทํา


!

41

หลักการทํางานของ switch ....case คือ การตรวจสอบเงือ่ นไขของ switch จะนําคาของตัวแปร ที่กําหนดไวในวงเล็บหลัง switch (เปนตัวแปรชนิด int หรือ char เทานัน้ ) ไปตรวจสอบกับคาคงที่ที่ กําหนดไวในแตละกรณีหรือ case ตาง ๆ (ซึ่งตองเปนคาคงที่ชนิด int หรือ char เหมือนกับตัวแปรหลัง switch) ถาตรงกับกรณีใดเปนอันดับแรก จะทํา statement หลัง case นัน้ แลวก็ออกจากการทํางานดวยคีย เวิรด break ไปทํางาน statement อืน่ ๆ ที่อยูหลัง } ตอไป แตถาคาตัวแปรที่กาหนดไว ํ ไมตรงกับกรณี ใด ๆ เลย จะทํา statement หลัง default (ถากําหนด default: ไว) •! ตัวอยางโปรแกรม switch.cpp แสดงการใช switch โดยกําหนดตัวแปรหลัง switch เปน ประเภท char ดังนัน้ คาคงทีท่ ก่ี าหนดไว ํ หลัง case จะตองเปน char โดยกําหนดไวในเครื่อง ' ' ดวย เพื่อใหสามารถนําคาคงที่ประเภทเดียวกันเปรียบเทียบกันได /*Program : switch.cpp Process : test statement switch...case */ #include <iostream.h> #include <conio.h> void main() { int first,second; char choice; //begin statement clrscr(); cout<<"Program Calcurate Area\n"; cout<<"1. Circle\n"; cout<<"2. Square\n"; cout<<"3. Triangle\n"; cout<<"Please select your choice <1-3>: "; cin>>choice; //begin switch statement switch(choice) { case '1': cout<<"\nYou select choice "<<choice<< " calculate Circle Area\n"; cout<<"Press any key to end program\n"; break; case '2': cout<<"\nYou select choice "<<choice<< " calculate Square Area\n"; cout<<"Press any key to end program\n"; break; case '3': cout<<"\nYou select choice "<<choice<< " calculate Triangle Area\n"; cout<<"Press any key to end program\n"; break; default: ศิริชัย นามบุรี

การเลือกทํา


!

42 cout<<"\nYou select Another choice \a\a\n"; cout<<"Press any key to end program\n";

} getch(); }

♦!แบบฝกหัดทายบท 1. ในการคํานวณภาษเงินไดบุคคลธรรมดา (ภงด.91) มีการคํานวณภาษีเงินไดในอัตรากาวหนาจากเงิน ได สุทธิ ดังอัตราตามตารางตอไปนี้ เงินไดสุทธิตั้งแต จํานวนเงินไดสงู สุดของ อัตราภาษี ภาษีเงินไดใน ภาษีสะสมสูงสุด ขั้น รอยละ แตละขั้น ของขัน้ 1 ถึง 100,000 100,000 5 5,000 5,000 100,001-500,000 400,000 10 40,000 45,000 500,001-1,000,000 500,000 20 100,000 145,000 1,000,001-4,000,000 3,000,000 30 900,000 1,045,000 4,000,001 ขึ้นไป 37 ตัวอยางเชน ถามีเงินไดสุทธิ 1,450,000 บาท การคํานวณภาษีในอัตรากาวหนา เปนดังนี้ 100,000 บาทแรก คิดรอยละ 5 ภาษีที่คานวณได ํ 5,000 บาท เหลือเงินไดสุทธิอีก 1,450,000-100,000 = 1,350,000 บาท นําไปคํานวณในอัตราตอไปเต็มขัน้ 400,000 บาท คิดรอยละ 10 ภาษีที่คานวณได ํ 40,000 บาท เ���ลือเงินไดสุทธิอีก 1,350,000 - 400,000 = 950,000 บาท นําไปคํานวณในอัตราตอไปเต็มขัน้ 500,000 บาท คิดรอยละ 20 ภาษีที่คานวณได ํ 100,000 บาท เหลือเงินไดสุทธิอีก 950,000 - 500,000 = 450,000 บาท นําไปคํานวณในอัตราตอไปไมเต็มขัน้ 450,000 บาท คิดรอยละ 30 ภาษีที่คานวณได ํ 135,000 บาท รวมภาษีเงินไดที่ตองชําระทัง้ สิน้ 5,000+40,000+100,000+135,000 = 280,000 บาท จากวิธีการคํานวณภาษีเงินไดบคุ คลธรรมดาในอัตรากาวหนานี้ ใหเขียนโปรแกรมเพือ่ คํานวณ หาภาษี เมือ่ กรอกจํานวนเงินไดสุทธิทางแปนพิมพ โดยแสดงขัน้ ตอนในการคํานวณอัตราแบบกาวหนา แตละขัน้ ใหเห็นโดยละเอียดทางจอภาพ

ศิริชัย นามบุรี

การเลือกทํา


!

43

2. รานโชคดีการคา ตองการใหเขียนโปรแกรมเพือ่ คํานวณสวนลดของราคาสินคาและราคาสินคาสุทธิ ใหแกลูกคาจากยอดซื้อที่รวม VAT 10% แลว ตามเงือ่ นไขดังนี้ ยอดซื้อ 1- 1000 บาท ใหสวนลด 3% ยอดซื้อ 1001- 2000 บาท ใหสวนลด 5% ยอดซื้อ 2001- 5000 บาท ใหสวนลด 7% ยอดซื้อ 5001- 10000 บาท ใหสวนลด 9% ยอดซื้อ 10001 บาทขึ้นไป ใหสวนลด 10% ใหนกั ศึกษาเขียนโปรแกรมเพือ่ รับคาจํานวนยอดซือ้ สินคากอนรวม VAT , คํานวณราคาซือ้ รวม VAT, คํานวณสวนลดที่ลูกคาจะไดรับ, คํานวณราคาสินคาสุทธิที่ลูกคาตองจาย

ศิริชัย นามบุรี

การเลือกทํา


ภาษา C++ Lesson3