บทที่ 2

Download Report

Transcript บทที่ 2

่ ปดาห ์ก่อน
ทบทวนเมือสั
ตัวแปร
ตัวแปรคือสงิ่ ทีผ
่ ู ้เขียนโปรแกรมสร ้างขึน
้ เพือ
่ นามา
ชว่ ยจดจาข ้อมูลต่างๆในโปรแกรม
ั เจน (int ,
– ตัวแปรจะต ้องมีชอ
ื่ และ ระบุชนิ ดให ้ชด
double , char , String , boolean)
– ตัวแปร 1 ตัว จดจาได้สูงสุดเพียงหนึ่ งค่า เท่านัน
้
่
• เมือไหร่
ทจะใช้
ี่
ต ัวแปร ต้องประกาศตัวแปรก่อน
– รูปแบบการประกาศตัวแปร
type name ;
่
ื่ a สาหรับจาค่าข ้อมูลชนิด
เชน
int a; // ตัวแปรชอ
จานวนเต็ม
ชนิ ดข้อมู ลในภาษา Java(Data
Type)
1.
2.
3.
4.
5.
จานวนเต็ม (int)
จานวนจริง (double)
ตัวอ ักษร (char)
สตริง (String)
บู ลน
ี (Boolean)
้ อของจาวา
่
กฎการตังชื
ื่ ตามอาเภอใจไม่ได ้ ต ้องเป็ นไปตามกฎที่
• เราจะตัง้ ชอ
ภาษาคอมพิวเตอร์กาหนดไว ้
่ วแปร ชือคลาส
่
่
้ ง้ การตัง้ ชือตั
• กฎนีใ้ ชทั
และชือเมธ
อด
ื่ ประกอบด ้วยตัวอ ักษร ตัวเลข สญ
ั ลักษณ์ $ หรือ _ ก็
1. ชอ
ได ้
2. ห้ามขึน
้ ต ้นด ้วยตัวเลข
ื่ ยาวๆได ้ไม่เป็ นไร
3. ชอ
ื่ ตัวแปร a กับ A ถือ
4. ตัวอักษรตัวเล็ก ตัวใหญ่ตา
่ งกัน (ชอ
ว่าคนละตัวกัน)
้
5. ต้องไม่ซากับค
าสงวนของภาษาจาวา
คาสงวนต่างๆของภาษาจาวา
abstract
case
assert
catch
boolean
char
continue
enum
import
default
do
extends
false
instanceof int
break
class
byte
const
double
final
interface
else
finally
long
private
static
native
new
protected public
null
return
package
short
strictfp
super
switch
throw
throws
transient
synchroni this
zed
true
try
void
volatile
while
้ อ
่
การตังชื
่ ้องตงทั
้ั งชื
้ อคลาส
่
• ผู ้เขียนโปรแกรมมีหน้าทีต
่
่ ัวแปร ในวงการมักให ้
ชือเมธอด
และชือต
ื่ คลาสเป็ นตัวใหญ่
– ตัวอักษรแรกของชอ
ื่ เมธอด และ ตัวแปรเป็ นตัวเล็ก
– ตัวอักษรแรกของชอ
ื่ ทีป
• ถ ้าอยากตัง้ ชอ
่ ระกอบด ้วยคาหลายคา ให ้
เขียนทุกคาติดกัน แล ้วให ้ตัวแรกของแต่ละคา
่
เป็ นตัวใหญ่ เชน
– dayOfWeek
่
รู ปแบบการประกาศตัวแปรแบบอืนๆ
• การประกาศตัวแปรหลายๆตัวทีม
่ ช
ี นิดข ้อมูล
เดียวกัน สามารถอ ้าง type ครัง้ เดียวแล ้วตามด ้วย
ื่ รายการตัวแปรทัง้ หมด(คัน
่
ชอ
่ แต่ละตัวด ้วย , ) เชน
int a,b,c ;
String name , surname, address;
• ข ้อควรระวัง
ื่ เดียวกันไม่ได ้ (เชน
่
– แม ้จะเป็ นตัวแปรต่างชนิดกัน ก็ใชช้ อ
int a , double a จะ error)
– ชนิดตัวแปร double สามารถเก็บข ้อมูลแบบ int ได ้
double c = 2; // ทาได ้
int d = 3.2 ; // error
การใช้งานตัวแปร
• การกาหนดค่าให ้ตัวแปรจดจา ทาได ้โดยใช ้ “=”
่
เชน
ื่ a จดจาเลข 3 เอาไว ้
– a = 3 ; // ให ้ตัวแปรชอ
้
(เอาของทางขวาไปจาไว ้ในของทางซาย)
- int a , b;
a = 10;
b = 5;
b = a; //เอาค่าที่ a จาไว ้ไปให ้ b จาไว ้ด ้วย ดังนัน
้
b มีคา่ เป็ น 10 ด ้วย
การร ับค่าข้อมู ลจากแป้ นพิมพ ์
• สร ้างตัวอ่านแป้ นพิมพ ์ด ้วยคาสงั่ Scanner kb = new
Scanner(System.in)
่ าสงั่ import java.util.Scanner; ไว ้สว่ นบนของ
• ใสค
โปรแกรมเสมอ
• รับค่าข ้อมูลชนิดจานวนเต็ม
a = kb.nextInt();
• รับค่าข ้อมูลชนิดจานวนจริง
b = kb.nextDouble();
• รับค่าข ้อมูลชนิดสตริง
ั ลักษณ์สน
ิ้ สุด
c = kb.next(); //รับไปเรือ
่ ยๆจนกว่าจะเจอสญ
ข ้อความ (เว ้นวรรค , tab , enter)
d = kb.nextLine(); // รับไปเรือ
่ ยๆจนกว่าจะเจอ enter
การแสดงผลข้อมู ล
• การใส่ “” ครอบสงิ่ ทีเ่ ราต ้องการแสดงผลเอาไว ้
– เป็ นการบ่งบอกว่า เราต ้องการแสดงผลตามข ้อความ
ทีเ่ รากาหนด (เหมือนเป๊ะ)
– แต่หากสงิ่ ทีต
่ ้องการให ้แสดง เป็ นค่าทีต
่ วั แปรจดจา
ไว ้ ก็ไม่ตอ
้ งใส่ “” ครอบไว ้
• เหมือนกับเราเอาหลายสงิ่ มาประกอบกันในการ
่
แสดงผล ดังนัน
้ ต ้องมีเครืองหมายบวก
(+)
่
สาหร ับเชือมแต่
ละส่วนเข้าด้วยกัน
่ System.out.println(“Grade :” + grade);
– เชน
การดาเนิ นการทางคณิ ตศาสตร ์
โจทย ์
เขียนโปรแกรมรับเลขจานวนเต็ม 2 ตัว แล ้ว
แสดงผล บวก ลบ คูณ หาร และ เศษจากการหาร
ของเลขทัง้ สองทางหน ้าจอทีละบรรทัด (เลขตัว
แรกเป็ นตัวตัง้ เสมอ)
วิเคราะห ์ปั ญหา
• Input
- ตัวเลขแรก
- ตัวเลขทีส
่ อง
• Process
ดาเนินการ บวก ลบ คูณ
หาร mod กับเลขทัง้ 2
ตัวทีร่ ับมาแล ้วแสดงผล
ลัพธ์ทางหน ้าจอ
• Output
– ผลบวก
– ผลลบ
– ผลคูณ
– ผลหาร
– เศษจากการหาร
ออกแบบโปรแกรม
Algorithm
1.
2.
3.
4.
5.
6.
แสดงข ้อความ Enter number1 :
รับเลขตัวแรกจาไว ้ใน num1
แสดงข ้อความ Enter number2 :
รับเลขตัวสองจาไว ้ใน num2
แสดงข ้อความ Result of…
แสดงค่าใน num1 , เครือ
่ งหมาย + , ค่าใน num2 , เครือ
่ งหมาย = ,
ผลลัพธ์ของ num1 + num2
7. แสดงค่าใน num1 , เครือ
่ งหมาย - , ค่าใน num2 , เครือ
่ งหมาย = ,
ผลลัพธ์ของ num1 - num2
8. แสดงค่าใน num1 , เครือ
่ งหมาย * , ค่าใน num2 , เครือ
่ งหมาย = ,
ผลลัพธ์ของ num1 * num2
9. แสดงค่าใน num1 , เครือ
่ งหมาย / , ค่าใน num2 , เครือ
่ งหมาย = ,
ผลลัพธ์ของ num1 / num2
10. แสดงค่าใน num1 ,ข ้อความว่า mod , ค่าใน num2 , เครือ
่ งหมาย =
, ผลลัพธ์ของ num1 mod num2
่
ทฤษฎีทเกี
ี่ ยวข้
อง
ตัวดาเนิ นการคานวณ
• ภาษาคอมพิวเตอร์มต
ี ัวดาเนินการคานวณ
(arithmetic operator) เพือ
่ การบวก ลบ คูณ
้ อ
และหาร โดยใชเครื
่ งหมาย +, - , * , /
• ข้อควรระวัง
– ชนิดข ้อมูลใน Java เราเป็ นผู ้กาหนดเอง ตัง้ แต่ตอน
ประกาศตัวแปร
่ นั น
– ตัวแปรแต่ละตัวจะมีชนิดข ้อมูลเชน
้ ไปจนจบการ
ทางานของโปรแกรม
่
ดของ
– แต่บางครัง้ โปรแกรมอาจจะมีการเปลียนชนิ
ตัวแปรให้เราโดยอ ัตโนมัต ิ
่
การเปลียนชนิ
ดข้อมู ลแบบ
อ ัตโนมัต ิ
• เกิดขึน
้ ในกรณีข ้อมูลตัวเลข
– ปกติ
จานวนเต็ม (+, -, *, /, mod) กับ จานวนเต็ม ===> ผลลัพธ์
จะเป็ นจานวนเต็มเสมอ
่ 1 + 22=ห3้ามตอบว่า 2.5 เด็ดขาด (เต็ม ทาอะไรกับ เต็ม ต ้อง
• เชน
5 / 2 = ได ้ เต็ม เท่านัน้ )
จานวนจริง (+, -, *,ห/,้ามตอบว่
mod) จาานวนจริ
พธ์จะ
6 เพราะง6===>ผลลั
ถือเป็ นจานวน
เป็ นจานวนจริงเสมอเต็(ต
้องมี
ุ านวนจริ
)
่ด
มไม่
ใชจจ
ง
่ 2.3 + 3.7 = 6.0
• เชน
5.0 / 2.0 = 2.5
่
การเปลียนชนิ
ดข้อมู ลแบบ
อ ัตโนมัต ิ
• เกิดขึน
้ ในกรณีข ้อมูลตัวเลข
– พิเศษ
• เกิดในกรณีท ี่ จานวนเต็ม (+, -, *, /, mod) กั
จานวน งเสมอ
จบานวนจริ
จริง ==>
• อย่างทีเ่ ราทราบว่า จานวนเต็ม เป็ นสว่ นหนึง่ ของจานวน
จริง
• ดังนัน
้ หากมีข ้อมูลตัวเลขต่างชนิดกัน มาดาเนินการทาง
คณิตศาสตร์
พธ์ทไี่ เต็
ดม
้จะเปลี
นไปหาตั
วใหญ่กว่า
เต็ผลลั
ม เจอ
ไดย่ ้เต็
ม
เสมอ ==>จริ
จานวนจริ
ง เจอ ง จริง ได ้จริง
เต็ม เจอ จริง ได ้จริงเสมอ
ตัวดาเนิ นการมอดุโล
• เศษจากการหาร
– ผลของ 5/2 จะได้ 2 เนื่ องจากปั ดเศษทิง้ (เต็ม หาร
เต็ม ต้องได้ เต็ม)
– ถ ้าต ้องการหาเศษของ 5/2 สามารถใชตั้ วดาเนินการ
มอดุโล (modulo) ในภาษาโปรแกรมใช้สญ
ั ลักษณ์
%
– 5 % 2 จะมีคา่ เท่ากับเศษของการหาร 5 ด ้วย 2 จะมี
ค่าเท่าก ับ 11.5 // 2.0 หาร 5.5 ได ้ 2 ครัง้
้ เหลื
่
เศษ
– สามารถใชได
้ทัอง้ //
กับ
จ1.5
านวนเต็
และจ
0.5
1.0
หาร 5.5 ม
ได
้ 5 ครัานวนจริ
ง้ เหลือ ง เชน
• (6 % 4) = 2เศษ
// 40.5
หาร 6 ได ้ 1 ครัง้ เหลือเศษ 2
• (5.5 % 2.0) =
ออกแบบโปรแกรม
Algorithm
1.
2.
3.
4.
5.
6.
7.
8.
9.
แสดงข ้อความ Enter number1 :
รับเลขตัวแรกจาไว ้ใน num1
แสดงข ้อความ Enter number2 :
รับเลขตัวสองจาไว ้ใน num2
แสดงข ้อความ Result of…
แสดงค่าใน num1 , เครือ
่ งหมาย + , ค่าใน num2 , เครือ
่ งหมาย = ,
ผลลัพธ์ของ num1 + num2
แสดงค่าใน num1 , เครือ
่ งหมาย - , ค่าใน num2 , เครือ
่ งหมาย = ,
ผลลัพธ์ของ num1 - num2
แสดงค่าใน num1 , เครือ
่ งหมาย * , ค่าใน num2 , เครือ
่ งหมาย = ,
ผลลัพธ์ของ num1 * num2
แสดงค่าใน num1 , เครือ
่ งหมาย / , ค่าใน num2 , เครือ
่ งหมาย = ,
เขียนโปรแกรม
Algorithm
1.
แสดงค่าใน num1 , เครือ
่ งหมาย + , ค่าใน num2 , เครือ
่ งหมาย = , ผลลัพธ์
ของ num1 + num2
2. แสดงค่าใน num1 , เครือ
่ งหมาย - , ค่าใน num2 , เครือ
่ งหมาย = , ผลลัพธ์
ของ num1 - num2
3. แสดงค่าใน num1 , เครือ
่ งหมาย * , ค่าใน num2 , เครือ
่ งหมาย = , ผลลัพธ์
ของ num1 * num2
4. แสดงค่าใน num1 , เครือ
่ งหมาย / , ค่าใน num2 , เครือ
่ งหมาย = , ผลลัพธ์
Source
code
ของ num1 / num2
System.out.println(num1
+ “+”
num2
“=” +
5. แสดงค่าใน num1 ,ข ้อความว่า mod
, ค่าใน+num2
, เครื+
อ
่ งหมาย
= , ผลลัพธ์
ของ num1 mod num2
(num1+num2));
code
ไม่ใสว่ งเล็บได ้ไหม
โจทย ์
จงหาคาตอบของสมการ Ax2 + Bx + C = 0 โดยเขียน
โปรแกรมเพือ
่ รับค่าตัวเลข A , B และ C และแสดงผล
คาตอบทัง้ 2 ค่าของสมการทางหน ้าจอ
Hint : คาตอบของสมการหาได ้จากสูตรการคานวณ
2 − 4𝑎𝑐
−𝑏
±
𝑏
ต่อไปนี้
𝑥=
2𝑎
−𝑏 + 𝑏 2 − 4𝑎𝑐
𝑥=
2𝑎
(Function 1)
−𝑏 − 𝑏 2 − 4𝑎𝑐
𝑥=
2𝑎
(Function 2)
วิเคราะห ์ปั ญหา
• Input
– ค่า A
– ค่า B
– ค่า C
• Process
คานวณคาตอบของ
สมการตามสูตร
• Output
– ผลการคานวณตาม
ั 1
ฟั งก์ชน
– ผลการคานวณตาม
ั 2
ฟั งก์ชน
ออกแบบโปรแกรม
Algorithm
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
แสดงข ้อความ Enter A
รับค่าเลขตัวแรกจาไว ้ใน a
แสดงข ้อความ Enter B
รับค่าเลขตัวสองจาไว ้ใน b
แสดงข ้อความ Enter C
รับค่าเลขตัวสามจาไว ้ใน c
แสดง “Answer of ” , ค่าใน a, “x^2 + ”, ค่าใน b, “x + ”,
ค่าใน c , “ = 0”
ั 1 เก็บไว ้ใน ans1
คานวณผลลัพธ์ตามฟั งก์ชน
ั 2 เก็บไว ้ใน ans2
คานวณผลลัพธ์ตามฟั งก์ชน
แสดงข ้อความ “Answer 1 = ” ตามด ้วยค่าใน ans1
แสดงข ้อความ “Answer 2 = ” ตามด ้วยค่าใน ans2
่
ทฤษฎีทเกี
ี่ ยวข้
อง
คลาส Math
่
• หากเราต ้องการเขียนคาสงั่ หารากทีสอง
หาค่า
์
สัมประสิทธิของต
ัวเลข เราจะทาได ้อย่างไร
่ Math ภายในบรรจุ
• จาวามีคลาสมาตรฐานชือ
เมธอดมากมายที่ ให้บริการคานวณฟั งก ์ช ัน
ทางคณิ ตศาสตร ์ต่างๆ
ตัวอย่างเมธอดในคลาส Math
การเรียกใช้
ความหมาย
Math.sqrt(x)
คืนค่ารากทีส
่ องของ x
Math.pow(x,y)
คืนค่า x ยกกาลัง y
Math.abs(x)
ั บูรณ์ของ x
คืนค่าสม
Math.sin(r) ,
Math.cos(r)
Math.log(x) ,
Math.log10(x)
Math.max(x,y) ,
Math.min(x,y)
คืนค่า sine และ cosine ของมุม
คืนค่า log ฐาน e และ log ฐาน
10 ของ x
คืนค่ามากกว่า และ น ้อยกว่า
ระหว่าง x กับ y
เขียนโปรแกรม
Algorithm
−𝑏+ 𝑏 2 −4𝑎𝑐
ั 1 เก็บans1
• คานวณผลลัพธ์ตามฟั งก์ชน
ไว ้ใน=ans1 2𝑎
Source code
b2
เขียน code ได ้เป็ น Math.pow(b,2)
เขียน code ได ้เป็ น
Math.sqrt(Math.pow(b,2) – 4*a*c)
𝑏 2 − 4𝑎𝑐
รวมสว่ นย่อยทัง้ หมดเข ้าด ้วยกัน จะได ้
ans1 = ((-b + Math.sqrt(Math.pow(b, 2)เขียนตามสูตรทุกอย่างแล ้ว ทาไมผลลัพธ์
4*a*c)))/2*a;
จึงยังไม่ถก
ู ต ้อง
ลาดับการคานวณ
้ อ
• ถ ้าใชเครื
่ งคิดเลขคานวณค่าของ 2+3x4 โดยกด
เครือ
่ งคิดเลขตามนี้ จะได ้คาตอบเป็ น 20 หรือ 14
้
– ได ้ 20 แสดงว่าเครือ
่ งทีใ่ ชบวกก่
อนแล ้วค่อยคูณ
– ได ้ 14 แสดงว่าคูณแล ้วค่อยบวก
– จะได ้ผลเท่าไหร่ขน
ึ้ อยูก
่ บ
ั ยีห
่ ้อเครือ
่ งคิดเลข แต่การเขียน
คาสงั่ ในโปรแกรมจะมาหวังให ้คาตอบขึน
้ อยูก
่ บ
ั ยีห
่ ้อเครือ
่ งคง
ไม่ได ้
• ภาษาคอมพิวเตอร์จงึ กาหนดลาดับการดาเนิ นการ
ก่อนหลังอย่างช ัดเจนว่า 2+3x4 จะได ้ผลเท่าไหร่
ลาดับการคานวณ
• ภาษาจาวากาหนดลาดับการดาเนินการจาก
ความสาคัญมากไปน ้อยไว ้ ดังนี้ (สาค ัญมากจะ
ทาก่อน)
1.
2.
3.
4.
5.
6.
วงเล็บ
้
เรียกใชเมธอด
ติดลบ
คูณ หาร
บวก ลบ
การให ้ค่า (เครือ
่ งหมาย =)
ถ ้ามีตวั ดาเนินการทีม
่ ค
ี วามสาคัญเท่ากันหลาย
ตัว จะทาจากซ ้ายไปขวา
ตัวอย่าง
(-b + Math.sqrt( b * b –
(1) ) ) / 2*a
(2) (3)
(4)(5)
4*a*c
(6)
(8)
(9)
(7)
(11)
(10)
แทนทีจ
่ ะหารด ้วย 2a แต่เราลืมใสว่ งเล็บทาให ้ มันหารแค่ 2
คาตอบเพีย
้ นจาก -0.50 เป็ น -18.00 (ค่าผิดเยอะมาก)
ตัวอย่าง
(-b + Math.sqrt( b * b –
(1) ) ) / (2*a)
(2) (3)
(4)(5)
4*a*c
(6)
(8)
(9)
(7)
(11)
(10)
(12)
การใสว่ งเล็บจะบังคับให ้โปรแกรม คานวณ 2a ก่อน แล ้วจ
ค่าจึงถูกต ้องตามสมการ
เขียนโปรแกรม
Algorithm
−𝑏+ 𝑏 2 −4𝑎𝑐
ั 1 เก็บans1
• คานวณผลลัพธ์ตามฟั งก์ชน
ไว ้ใน=ans1 2𝑎
Source code
ans1 = ((-b + Math.sqrt(Math.pow(b, 2)4*a*c)))/(2*a);
ทดสอบโปรแกรม
อยากให ้แสดงผลในรูปแบบทศนิยมแบบทีก
่ าหนดได ้
ว่าต ้องการกีห
่ ลักทาอย่างไร
การแสดงผลเลขจานวนจริงโดย
จัดรู ปแบบ
• ใชค้ าสงั่ System.out.printf(“…”);
อยากได ้ทศนิยมกีห
่ ลัก ระบุลง
• รู ปแบบคาสัง่
System.out.printf(“ข ้อความทีต
่ ้องการ %.2f” ,
เลขจานวนจริง);
• ตัวอย่าง
System.out.printf(“%.2f” , 2.666666); // 2.67
System.out.printf(“ans = %.1f” , ans); // ถ ้า ans เก็บค่า
3.52 จะแสดง 3.5
System.out.printf(“money is %.3f B.” ,100.5) ; //
100.500
เขียนโปรแกรม
Algorithm
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
แสดงข ้อความ Enter A
ร ับค่าเลขตัวแรกจาไว ้ใน a
แสดงข ้อความ Enter B
ร ับค่าเลขตัวสองจาไว ้ใน b
แสดงข ้อความ Enter C
ร ับค่าเลขตัวสามจาไว ้ใน c
แสดง “Answer of ” , ค่าใน a, “x^2 + ”, ค่าใน b, “x + ”, ค่า
ใน c , “ = 0”
คานวณผลลัพธ ์ตามฟังก ์ชัน 1 เก็บไว ้ใน ans1
คานวณผลลัพธ ์ตามฟังก ์ชัน 2 เก็บไว ้ใน ans2
แสดงข ้อความ “Answer 1 = ” ตามด ้วยค่าใน ans1
แสดงข ้อความ “Answer 2 = ” ตามด ้วยค่าใน ans2