บทที่ 4

Download Report

Transcript บทที่ 4

เก็บตกจากสัปดาห์ที่แล้ว
การใช้ if / if - else
• จำนวนคำสั่ ง if ขึน
้ อยูจ
่ นไข
่ ำนวนเงือ
• มี 2 เงือ
่ นไข จะมี if ทัง้ หมด 2 กอน
้
– แตหำกเรำแน
่ นไขทีม
่ ี จะมี
่
่ ใจวำ่ ในบรรดำเงือ
เพียง 1 เงือ
่ นไขเทำนั
่ ้นทีเ่ ป็ นจริง
– สำมำรถใช้ if-else ได้ เพือ
่ ลดจำนวนครัง้ ในกำร
เปรียบเทียบเงือ
่ นไข
โครงสร้างของคาสัง่
if (เงือ
่ นไข) {
if ( เงื่อนไข) {
}
if (เงือ
่ นไข) {
}
else {
}
}
ระวัง!!!
หลายคนเขียน else
อยูภ่ ายใต้ ปีกกาของ if
เงื่อนไขที่พบเจอบ่อยๆ
• กำรทดสอบหำเลขจำนวนเต็
มบวก
สังเกตว่
าทุกเงื่อนไข
จะต้ องมีผ้ ตู ้ องสงสัย ===> a
if( a >= 0)
จากนันลั
้ กษณะการทดสอบเงื่อนไข
• กำรทดสอบหำเลขจำนวนเต็มลบ
จะเกี่ยวข้ องกับ 3 คานี ้
if( a < 0)
a (น้ อยกว่า , มากกว่า, เท่ากับ) อะไร
• กำรทดสอบหำเลขคู่
หากวางกรอบแบบนี ้เราก็จะเขียนเงื่อนไข
ได้ ชดั เจน และ นาไปเขียนโปรแกรมได้
if( a % 2 == 0)
• กำรทดสอบหำเลขคี่
if( a % 2 != 0 )
|| if( a % 2 == 1)
การเปรียบเทียบการเท่ากัน
• เปรียบเทียบตัวเลข (int หรือ double)
ใช้คำสั่ ง == ไดเลย
้
เช่น 3 == 5
• เปรียบเทียบตัวอักษร (char)
ใช้คำสั่ ง == ไดเลย
้
เช่น c == ‘+’ // อยำลื
่ มใช้ ‘ ‘ แทนควำม
เป็ นอักขระ
• เปรียบเทียบสตริง (String)
ห้ำมใช้คำสั่ งคำสั่ ง == ในกำรเปรียบเทียบ
ให้ใช้ method ชือ
่ equals() แทน
การโปรแกรมแบบหลาย
ทางเลือก
โจทย์
เขียนโปรแกรมเพือ
่ ตรวจสอบคุณสมบัตข
ิ องลูกคำ้
วำสำมำรถเข
ำไปเล
นในสวนสนุ
กโดยไมเสี
่
้
่
่ ย
คำใช
อไม่ โดยสวนสนุ กกำหนด
่
้จำยหรื
่
หลักเกณฑไว
นเด็กอำยุไมเกิ
์ ้ คือ ตองเป็
้
่ น 10
ขวบ และ ส่วนสูงไมเกิ
่ น 130 cm. เทำนั
่ ้น ถำ้
เขำได
แสดงค
ำวำ่ “Yes” เขำไม
ได
ำวำ่
้
้
้
่ แสดงค
้
“No”
วิเคราะห์ปัญหา
Input
1. อำยุ
2. ส่วนสูง
Output
1. ผลการพิจารณา เข้าได้ (Yes) ไม
Process
พิจำรณำคุณสมบัตข
ิ องลูกคำว
้ ำ่
สำมำรถเขำไปเล
นในสวนสนุ
กไดหรื
้
่
้ อไม่
ออกแบบโปรแกรม
1.
2.
3.
4.
5.
แสดงขอควำม
Enter age :
้
รับอำยุจำไวใน
age
้
แสดงขอควำม
Enter height :
้
รับส่วนสูงจำไวใน
้ <= h
ถำ้ age ไมเกิ
่ น 10 และ h ไมเกิ
่ น 130
แสดงขอควำม
Yes
้
6. ถำไม
ใช
้
่ ่
แสดงขอควำม
No
้
และ หรือ ไม่
• นอกจำกตัวดำเนินกำรคำนวณ (+ - * / และ
%) ตัวดำเนินกำรสั มพันธ ์
( <, <=, >, >=,
==, != )
• เรำยังมีตวั ดำเนินกำรตรรกะ (logical
operator) “และ”, “หรือ”, “ไม”่ โดยจำวำใช้
– เครือ
่ งหมำย && แทน “และ”
– เครือ
่ งหมำย | | แทน “หรือ”
– เครือ
่ งหมำย ! แทน “ไม”่
และ หรือ ไม่
• ให้ P และ Q แทนนิพจนตรรกะ
จะไดว
้ ำ่
์
– P && Q เป็ นจริง ก็ตอเมื
่ ทัง้ P และ Q เป็ นจริง
่ อ
– P | | Q เป็ นจริง ก็ตอเมื
่ P หรือ Q (ตัวใดตัวหนึ่งหรือทัง้
่ อ
คู)่ เป็ นจริง
– !P เป็ นจริง เมือ
่ P เป็ นเท็จ
• สรุPปตัวดQำเนินPกำรทั
งตำรำง P
&& ง้ สำมแสดงดั
P || Q
Q
T
T
T
T
T
F
T
F
F
T
F
T
F
T
F
F
F
F
!P
T
F
ลาดับการทางานของตัว
ดาเนินการ
• เมือ
่ นำตัวดำเนินกำรทัง้ หมดทีเ่ รำเรียนไปมำ
รวมกัน จะมีลำดับควำมสำคัญจำกมำกไปน้อย
ดังนี้ (สำคัญมำกจะทำกอน)
่
1. วงเล็บ
เปรียบเทียบ == , !=
2. กำรเรียกใช้เมธอด
3. กำรดำเนินกำร !, ++, -- , ||
4. กำรคำนวณ *, /, %
=)
7. กำร
8. ตรรกะ &&
9. ตรรกะ
10. กำรให้คำ่ (
12
โจทย์
เขียนโปรแกรมรับเลขจำนวนเต็ม 1 จำนวน
จำกนั้นให้พิจำรณำวำเลขจ
ำนวนเต็มดังกลำวเป็
น
่
่
เลขจำนวนเต็มลบ (Negative) , ศูนย ์ (Zero)
หรือ จำนวนเต็มบวก (Positive) แลวแสดง
้
ผลลัพธทำงหน
์
้ ำจอ
วิเคราะห์ปัญหา
Input
ตัวเลข 1 จำนวน
Output
ชนิดของตัวเลขนั้น
ออกแบบโปรแกรม
1. รับตัวเลขจำไวใน
num
้
เงือ
่ นไขดใด
2. พิจำรณำวำ่ num เป็ นตัวเลขชนิ
(num > 0)
num
เต็มบวก
3.
ศูนย์
(num = 0)
เต็มลบ
(num < 0)
แสดงชนิดขอมู
่ จ
ิ ำรณำไดทำงหน
้ ลทีพ
้
้ ำจอ
ทฤษฎีที่เกี่ยวข้อง
การโปรแกรมแบบมีหลาย
ทางเลือก
• กรณีทเี่ งือ
่ นไขมีมำกกวำ่ 2 ทำงเลือก
• เรำตองใช
้
้ else if มำช่วย
• ตัวอยำงเช
ำหนด
่
่ น กำรตัดเกรด ซึง่ ผูสอนก
้
ช่วงคะแนนของนักเรียนไวดั
้ งนี้
100 – 80
79 – 70
69 – 60
59 – 0
เกรด A
เกรด
เกรด C
ตก
B
• สั งเกตวำ่ มีรป
ู แบบเกรดทีเ่ ป็ นไปไดทั
้ ง้ หมด 4
เกรด คือ A , B , C , ตก
• เรำจะเขียนโปรแกรมนี้โดยใช้แค่ if else ไม่
มีหลำยทำงเลือก : else if
• ตัวอยำง
code หำกใช้แค่ if else
่
int score = kb.nextInt();
if( score >= 80 && score <= 100) {
System.out.println(“A”);
}else{
System.out.println(“You fail”);
}
• ถำคะแนนอยู
ระหว
ำง
80 -100 จะไดเกรด
A แต่
้
่
่
้
นอกเหนือจำกนั้น จะสอบตกทันที
• ดังนั้น ถำเรำจะตั
ดเกรดอืน
่ ๆดวย
เรำตองใช
้
้
้
้
else if มำชวย
18
if – else if
รูปแบบคาสัง่
if( เงื่อนไขที่ 1) {
เป็ นจริง
คำสั่ งทีต
่ องกำรให
่ เงือ
่ นไข 1
้
้ทำเมือ
} else if( เงื่อนไขที่ 2) {
เป็ นจริง
จะมี else if กีค
่ รัง้ ก็ได้ ขึน
้ อยูก
่
คำสั่ งทีต
่ องกำรให
ำเมือ
่ เงื
อ
่ นไข
2จำรณำ
้
้ททำงเลื
หรือ
อกที
ก
่ ำลังพิ
} else if(เงื่อนไขที่ 3) {
….
ลาดับการทางานของคาสัง่ else if
if(เงือ
่ นไข 1 ) {
คำสั่ ง 1;
}else if( เงือ
่ นไข 2) {
คำสั่ ง 2;
}
…
}else if( เงือ
่ นไข n) {
คำสั่ ง n-1
}
else { คำสั่ ง n }
เริม
่
เงือ
่ นไ
ข 1
จริง คำสั่ ง
1
เงือ
่ นไ
ข 2
จริง คำสั่ ง
2
เงือ
่ นไ
ข n
จริง คำสั่ ง
n-1
เท็จ
เท็จ
เท็จ
คำสั่ ง
n
เขียนโปรแกรม
ตอนเขียนใบงานทาลักษณะนี ้ก็ได้
if (num มำกกวำ่ 0)
แสดง “Positive”
else if (num เทำกั
บ 0)
่
Source code
แสดง “Zero”
if(num > 0) {
else if (num น้อยกวำ่ 0)
System.out.println(“Positive”);
แสดง “Negative”
}
else if (num == 0) {
System.out.println(“Zero”);
จะใช้ else เลยก็ได้
}
เพรำะถำไม
ใช
else if( num < 0 ) {
้
่ ่ บวก
ไมใช
นลบ
System.out.println(“Negative”);
่ ่ 0 ตองเป็
้
}
ชัวร ์ จะไดไม
้ ต
่ องระบุ
้
โจทย์
เขียนโปรแกรมรับเลขจำนวนเต็ม 2 จำนวน และ
รับเมนูตำงๆ
เพือ
่ ระบุวำต
พธอย
่
่ องกำรหำผลลั
้
่
์ ำงไร
กับเลข 2 ตัวนี้ เมือ
่ กำหนดให้
ถำ้
เมนูเป็ น 1 แสดงผลบวก
2 แสดงผลลบ
3 แสดงผลคูณ
4 แสดงผลหำร
5 แสดงผล mod
6 แสดงผล ab
7 แสดงคำเฉลี
ย
่ ของเลขสองตัวนั้น
่
(ทศนิยม 2 ตำแหน่ง)
เมนูอน
ื่ ๆ นอกเหนือจำกนี้ให้แสดง “Error”
วิเคราะห์ปัญหา
Input
1. เลขตัวที่ 1
2. เลขตัวที่ 2
3. เลขเมนู
Output
1. ผลลัพธตำมเมนู
์
ทีก
่ ำหนด
ออกแบบโปรแกรม
1.
2.
3.
4.
5.
6.
แสดงขอควำม
Enter number
้
รับตัวเลขจำไวใน
a
้
รับตัวเลขจำไวใน
b
้
แสดงขอควำม
Select menu
้
รับตัวเลขจำไวใน
menu
้
พิจำรณำเมนูแลวค
้ ำนวณผลลัพธ ์
ออกแบบโปรแกรม
6. พิจำรณำเมนูแลวค
้ ำนวณผลลัพธ ์
menu
เงือ
่ นไข
สิ่ งทีจ
่ ะทำ
=1
คานวณผลบวก
=2
คานวณผลลบ
คานวณผลคูณ
=3
คานวณผลหาร
=4
=5
คานวณผล mod
=6
=7
อื่นๆ
คานวณเลขยกกาลัง
คานวณค่าเฉลี่ย
แสดงข้ อความ Error
ทฤษฎีที่เกี่ยวข้อง
switch-case
• กำรเขียนคำสั่ งทีป
่ ระกอบดวย
if-else ตอกั
้
่ นเป็ น
if ( w ==
0) dอย
ทอดๆ เป็ นรูปแบบที
พ
่ บบ
่ = “วันเสำร”์
else if ( w == 1) d = “วันอำทิตย”์
else if ( w == 2) d = “วันจันทร”์
else if ( w == 3) d = “วันอังคำร”
else if ( w == 4) d = “วันพุธ”
else if ( w == 5) d = “วันพฤหัส”
else if ( w == 6) d = “วันศุกร”์
else d = “???”
• โดยเฉพำะอยำงยิ
ง่ เมือ
่ เงือ
่ นไขในแตละวงเล็
บหลัง
่
่
if เป็ นการทดสอบค่าของจานวนเต็มว่าเป็ นค่า
27
switch-case
หำกพบรูปแบบกำรเขียนคำสั่ งดังกลำว
เรำสำมำรถแทนได้
่
ดวยค
่ ง switch-case ดังนี้
้ if ( wำสั
switch ( w ) {
== 0)
d = “วันเสาร์ ”;
else if ( w == 1)
d = “วันอาทิตย์”;
else if ( w == 2)
d = “วันจันทร์ ”;
else if ( w == 3)
d = “วันอังคาร”;
else if ( w == 4)
d = “วันพุธ”;
else if ( w == 5)
d = “วันพฤหัส”;
else if ( w == 6)
d = “วันศุกร์ ”;
else
d = “???”
case 0:
case 1:
case 2:
case 3:
d = “วันเสาร์ ”; break;
d = “วันอาทิตย์”; break;
d = “วันจันทร์ ”; break;
d = “วันอังคาร”; break;
case 4:
d = “วันพุธ”; break;
case 5:
d = “วันพฤหัส”; break;
case 6:
d = “วันศุกร์ ”; break;
default :
d = “???”; break;
}
28
switch-case
• สิ่ งทีป
่ รำกฏในวงเล็บหลัง switch ต้องเป็ นนิพจน์ ที่
ให้ค่าเป็ น int
ทำไดแค
้ ่ 2 type นี้เทำนั
่ ้น
ตัวแปรชนิด int
– ตัวแปรชนิด char
–
• ถำมี
้ ค่าตรงตามกรณี ใดที่ เขียนด้วยคาว่า case ก็
จะกระโดดไปทาคาสังของกรณี
่
นัน้
– จำกตัวอยำง
หำก w มีคำเป็
่
่ น 3 ก็จะไปทำคำสั่ งหลัง
case 3 :
–
หากค่า w มีค่าไม่ตรงค่าใดเลย จะกระโดดไปทาหลัง
29
switch-case
• ตัวอยำง
code โปรแกรมสำหรับหำจำนวนวัน
่
switch ( m ) { ้ switch-case
ในเดือนทีก
่ ำหนดโดยใช
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
}
– ถำ้ m มีคำ่ 4,6,9 หรือ 11 ก็จะมี 30 วัน
– จะเห็ นวำ่ ถำหลั
ง case ไมมี
้
่ คำสั่ งอะไร กำร
ทำงำนจะไหลลงมำ case ตอไป
จนกวำจะพบ
่
่
30
กิจกรรม
• จำกส่วนของโปรแกรมตอไปนี
้ หลังจำกทำงำน
่
ใน switch-case เสร็จ y มีคำเท
่ ำไหร
่
่
int x = 3, y = 3;
switch (x + 3) {
case 6:
y = 1;
default:
y += 1;
}
31
กิจกรรม
• ให้แปลง code ตอไปนี
้ในรูปแบบของคำสั่ ง
่
switch-case
if (a == 1) {
x +=
5;
else if (a ==
2) {
x +=
10;
else if (a ==
3) {
x +=
32
การเปลี่ยนประเภทข้อมูล
• หำกเรำตองกำรใส
้
่ ขอมู
้ ลให้กับตัวแปรทีเ่ ป็ นคน
ละประเภทกันก็สำมำรถทำได้ แตยุ
่ งยำก
่
เล็กน้อย
• ภำษำคอมพิวเตอรบำงภำษำใจดี
เปลีย
่ นให้
์
อัตโนมัต ิ แตภำษำจำวำไม
ใช
่
่ ่ ดังนั้น ถำ้
ตองกำรเปลี
ย
่ นตองเขี
ยนเพิม
่ ดังนี้
้
้
– เปลี่ยนจาก double เป็ น int :
• ให้ใส่ (int) นำหน้ำชือ
่ ตัวแปรชนิด double ทีต
่ องกำร
้
เปลีย
่ นประเภท
• เช่น สมมุตต
ิ วั แปร d เป็ น double ตองกำรเปลี
ย
่ นเป็ น
้
การเปลี่ยนประเภทข้อมูล 2
– เปลี่ยนจาก int เป็ น double :
• ให้ใส่ (double) นำหน้ำชือ
่ ตัวแปรชนิด int ที่
ตองกำรเปลี
ย
่ นประเภท
้
• มักใช้กับกำรเปลีย
่ นจำนวนเต็มให้เป็ นจำนวนจริง
ระหวำงกำรค
ำนวณเพือ
่ ให้ไดผลลั
พธเป็
่
้
์ นจำนวนจริง
– เปลี่ยนจาก int หรือ double เป็ น String :
• ทำไดโดยน
ำตัวเลขทีต
่ องกำรเปลี
ย
่ นไปบวกกับสตริง
้
้
วำงๆ
( “” )
่
• เพรำะกำรบวกกับสตริง คือ กำรตอสตริ
ง ซึง่ ตัวเลข
่
จะถูกแปลงเป็ นสตริงกอนน
ำมำตอ
่
่
การเปลี่ยนประเภทข้อมูล 3
– เปลี่ยนจาก String เป็ น int :
• ตองใช
้
้คำสั่ งพิเศษ int i = Integer.parseInt(s);
• ทำหน้ำทีเ่ ปลีย
่ นสตริง s เป็ นจำนวนเต็ม เช่น s =
“12” จะได้ i = 12
– เปลี่ยนจาก String เป็ น double :
• เช่นเดียวกับกรณีทแ
ี่ ลว
้ ตองใช
้
้คำสั่ งพิเศษ double d
= Double.parseDouble(s);
• ทำหน้ำทีเ่ ปลีย
่ นสตริง s เป็ นจำนวนจริง เช่น s =
“1.5” จะได้ d = 1.5
บทเสริม
เพิ่มความเข้าใจด้วยหมายเหตุ
• วิธเี พิม
่ ควำมเขำใจส
ำหรับผูอ
code
้
้ ำน
่
โปรแกรมทีไ่ ดผลมำกคื
อ กำรแทรกหมำยเหตุ
้
(comment) กำกับคำสั่ งในโปรแกรม
– บรรยำยดวยภำษำที
เ่ ขำใจแทรกลงไป
ณ จุดที่
้
้
ตองกำรอธิ
บำย
้
• หมำยเหตุม ี 2 รูปแบบ
– /* สำมำรถเขียนบรรยำยหมำยเหตุยำวๆหลำย
บรรทัดได้ จนกวำจะจบด
วย
*/
่
้
– // หมำยเหตุสำหรับ 1 บรรทัด
เพิ่มความเข้าใจด้วยหมายเหตุ
•
ตัวแปลโปรแกรมจะไม่สนใจหมายเหตุใน code
นั่นคือ นักเขียนโปรแกรม
– เขียน code ให้ complier อำน
่
– เขียน หมำยเหตุ ให้คนอำน
่
•
ข้อแนะนา
– ระหวำงที
เ่ รำเขียนโปรแกรม ควรแทรกหมำยเหตุไปเพือ
่
่
อธิบำย code ทีเ่ รำเขียนดวย
้
– หำกรอมำเขียนภำยหลัง เรำอำจลืมไปแลว
้
• หลังจำกสั ปดำหนี
ทุกคนจะตองเขี
ยน
้
้
์ ้เป็ นตนไป
comment เป็ นขอมู
ด
้ ลผูพั
้ ฒนำโปรแกรมไวด
้ ำนบนสุ
้
0.1 + 0.1 + 0.1 ≠ 0.3
• กำรแทนจำนวนจริง แมว
ควำมแมนย
้ ำจะมี
่
่ ำสูง
แตยั
ทีม
่ ค
ี วำมคลำดเคลือ
่ น
่ งคงเป็ นคำประมำณ
่
บำง
้
• เช่น (0.1 + 0.1 + 0.1) - 0.3 จะไม่ได้ 0 แต่จะ
•
ได้ 5.55 x 10-17
ดังนั้น การเปรียบเทียบความเท่ากันของ
จานวนจริง ต้องระวังเป็ นพิเศษ!!!
– แมในทำงทฤษฎี
จะมีคำเท
ัิ
้
่ ำกั
่ น แต่ในทางปฏิบต
39