Lab 4 : Trigonometric Sine

ผู้ที่ผ่านปฏิบัติการนี้จะสามารถ
- สร้างและใช้ตัวแปรประเภท
double
- ใช้ตัวปฏิบัติการทางคณิตศาสตร์
- ใช้คำสั่งวงวน
ข้อกำหนด
โดยปกติเวลาที่เราต้องการคำนวณค่าของฟังก์ชันพื้นฐานทางคณิตศาสตร์จำพวก
sine, cosine, tan, exp, log ก็มักจะนึกถึง class
Math ซึ่งเป็น class
มาตรฐานของ Java 2
สำหรับปฎิบัติการนี้
เราจะมาเขียน method
ของเราเองเพื่อคำนวณค่าของฟังก์ชัน
sin(x)
โดยใช้ฟังก์ชันการประมาณค่าของ
sine(x) ข้างล่างนี้
โดยที่ x มีหน่วยเป็น radian
แต่ว่าเราคงไม่คำนวณไปจนถึงพจน์ที่อนันต์หรอก
เราจะคำนวณไปถึงพจน์ที่มีค่าน้อยๆ
ที่คิดว่าน่าจะได้ผลลัพธ์ที่มีความละเอียดพอแล้ว
เช่นจะคำนวณไปจนถึงเมื่อ
มีค่าน้อยกว่า 1.0 x 10-10
ก็น่าจะพอ
จงเติมรายละเอียดของ method sin(x)
ใน class Lab4 ซึ่งรับ x
มีหน่วยเป็น radian
และคืนค่าของ sin(x)
ซึ่งหาได้จากการคำนวณด้วยฟังก์ชันที่แสดงข้างบนนี้
คะแนนเต็ม : 15 คะแนน
- ตอบคำถามย่อยตอนต้น 5
คะแนน (ระบบตรวจให้อัตโนมัติ)
- เขียนโปรแกรม 10 คะแนน (ระบบตรวจให้อัตโนมัติ
เมื่อกดปุ่ม F6)
เวลาปฏิบัติการ : 45
นาที
อย่าลืม
- กดปุ่ม F5
เป็นการสั่งทำงานคลาส Lab4
ซึ่งจะรับมุมเป็นองศาจากแป้นพิมพ์
แปลงเป็น radian แล้วแสดงค่า sine
ที่หาได้
เปรียบเทียบกับค่า sine จาก
Math.sin
- กดปุ่ม F6
เป็นการสั่งทำงาน TestScript
เพื่อทดสอบและให้คะแนน
- ถ้ามี window
โผล่มาเตือนเรื่อง Virus (จากโปรแกรม
Norton)
ให้เลือกช่องที่อนุญาตให้ทำต่อ
(Allow....)
ข้อแนะนำในการเขียนโปรแกรมนี้
- อย่าคำนวณ xk/k!
ด้วยการคำนวณ xk และ k!
แล้วนำมาหารกัน
เพราะเสียเวลา อีกทั้งค่า
xk และ k!
อาจเป็นค่าที่ใหญ่มากๆ
- ให้คำนวณพจน์ xk/k! ใหม่
จากพจน์เก่าที่คำนวณมาก่อนหน้านี้
เช่น อยากจะคำนวณ x17 / 17!
ก็ให้นำค่าของ x15 / 15!
ซึ่งคำนวณไว้แล้ว
มาคูณด้วย x2/(16*17)
ก็จะได้ x17/17!
- เก็บ xk / k!
ของรอบที่แล้ว
เพิ่มนำมาคำนวณหา xk / k!
ของรอบใหม่
- เนื่องจากแต่ละพจน์จะสลับเครื่องหมาย
+ - + - ไปเรื่อยๆ
ซึ่งทำได้โดยการคูณด้วย
(-1)
- โดยรวมมีตัวแปร sine และ
term, เริ่มต้น sine = x และ term =
x จากนั้นเข้าวงวนเพิ่อคำนวณ
- term = (-1) * term * x2 /
(3*2); sine += term;
- term = (-1) * term * x2 /
(5*4); sine += term;
- term = (-1) * term * x2 /
(7*5); sine += term;
- term = (-1) * term * x2 /
(9*8); sine += term;
- ...
- ทำไปเรื่อยๆ จนกว่า |term| <
1.0 x 10-10
|