ผลต่างระหว่างรุ่นของ "204111:lab3"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 20 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 1: แถว 1:
 
ปฏิบัติการที่สองของวิชา 20411 ตามแผน[[ร่างหัวข้อวิชา 204111]] มีเนื้อหาดังนี้
 
ปฏิบัติการที่สองของวิชา 20411 ตามแผน[[ร่างหัวข้อวิชา 204111]] มีเนื้อหาดังนี้
 
* ฟังก์ชัน
 
* ฟังก์ชัน
 +
 +
'''หมายเหตุ''' เลขข้อที่ใส่นั้นอาจไม่จำเป็นต้องใช้ตามที่ระบุนี้ แต่ใส่เพื่อให้เห็นชัดเจนว่าแต่ละข้อเริ่มที่ใด
  
 
== ฟังก์ชันพื้นฐาน ==
 
== ฟังก์ชันพื้นฐาน ==
แถว 34: แถว 36:
 
สำหรับข้อนี้เราสนใจส่วน  ('''ถึง TA:''' ....ให้เติมเอา.... แล้วค่อยขึ้นโจทย์ของแต่ละส่วน)
 
สำหรับข้อนี้เราสนใจส่วน  ('''ถึง TA:''' ....ให้เติมเอา.... แล้วค่อยขึ้นโจทย์ของแต่ละส่วน)
  
=== 3. หารากสมการกำลังสอง (อ่านค่า) ===
+
'''ถึง TA:''' ข้อนี้คิดว่าน่าจะแบ่งได้เป็น 4 ส่วนย่อย ๆ แต่จะแบ่งมากกว่านี้ก็ได้นะ
 +
 
 +
=== 3. หารากสมการกำลังสอง (แสดงพหุนาม) ===
 +
 
 +
ให้เขียนฟังก์ชัน <tt>show_poly(a, b, c)</tt> ที่รับพารามิเตอร์ 3 ตัวคือ a, b, และ c จากนั้นให้แสดงผลในรูปแบบตามตัวอย่างดังนี้
 +
 
 +
ถ้าสั่ง <tt>show_poly(1,2,3)</tt> ฟังก์ชันจะพิมพ์
 +
 
 +
1 x^2 + 2 x + 3
 +
 
 +
หรือถ้าสั่ง <tt>show_poly(5,0,-10)</tt> ฟังก์ชันจะพิมพ์
 +
 
 +
5 x^2 + 0 x + -10
 +
 
 +
(สังเกตว่าให้แสดงผลไปเลย ไม่ต้องกังวลกับกรณีที่สัมประสิทธิ์เป็น 0 หรือเป็นค่าลบ)
 +
 
 +
'''หมายเหตุถึง TA:''' ตอนทดสอบให้ทดสอบเฉพาะกรณีสัมประสิทธิ์เป็นจำนวนเต็มก็พอ เพราะการสั่งให้นิสิตจัดรูปแบบทศนิยมกรณีนี้ค่อนข้างยาก
 +
 
 +
=== 4. หารากสมการกำลังสอง (คำนวณเทอมย่อย) ===
 +
 
 +
สังเกตว่าในการหาราก เราจำเป็นต้องคำนวณค่า <math>\sqrt{b^2 - 4ac}</math> หลายครั้ง ในส่วนนี้เราจะเขียนฟังก์ชันเพื่อคำนวณส่วนดังกล่าว
 +
 
 +
ให้เขียนฟังก์ชัน <tt>cal_term(a, b, c)</tt> ที่รับพารามิเตอร์สามตัวคือ a, b และ c แทนสัมประสิทธิ์ต่าง ๆ ของ x ในพหุนาม
 +
 
 +
ให้ฟังก์ชันดังกล่าวคืนค่า <math>\sqrt{b^2 - 4ac}</math>
 +
 
 +
เมื่อนิสิตเขียนฟังก์ชันแล้ว อย่าลืมทดสอบก่อนส่งด้วย โดยอาจจะทดสอบใน python shell ดังตัวอย่างด้านล่าง
 +
 
 +
>>> print(cal_term(1,2,1))
 +
0.0
 +
>>> print(cal_term(1,4,1))
 +
3.46410161514
 +
 
 +
'''หมายเหตุถึง TA:''' ในส่วนทดสอบให้เขียนโปรแกรมหลัก เช่นในตัวอย่างข้างต้น แต่ซ่อนส่วน code ส่วนนั้นไว้ แต่ในตอนพิมพ์อย่าลืมให้จัดรูปแบบเป็นทศนิยมสัก 3 ตำแหน่งด้วย เพื่อป้องกันความผิดพลาดจากการปัดจำนวนจริง
 +
 
 +
=== 5. หารากสมการกำลังสอง (รากทั้งสอง) ===
 +
 
 +
เขียนฟังก์ชัน <tt>root_plus(a,b,c)</tt> ที่รับสัมประสิทธิ์ a,b, และ c แล้วคำนวณค่า
 +
 
 +
<center><math>\frac{-b + \sqrt{b^2 - 4ac}}{2a}</math></center>
 +
 
 +
และเขียนฟังก์ชัน <tt>root_minus(a,b,c)</tt> ที่รับสัมประสิทธิ์ a,b, และ c แล้วคำนวณค่า
 +
 
 +
<center><math>\frac{-b - \sqrt{b^2 - 4ac}}{2a}</math></center>
 +
 
 +
ฟังก์ชันทั้งสองให้เรียกใช้ฟังก์ชัน <tt>cal_term</tt> ด้วย (แต่ไม่ต้องเขียน ในระบบมีการเขียนไว้ให้แล้ว)
 +
 
 +
'''หมายเหตุถึง TA:''' อย่าลืมใส่ฟังก์ชัน cal_term ไว้ด้วย (แต่ซ่อนไว้นะครับ)
 +
 
 +
=== 6. หารากสมการกำลังสอง (ส่วนโปรแกรมหลัก) ===
 +
 
 +
ให้เขียนโปรแกรมรับสัมประสิทธิ์ของสมการกำลังสอง จากนั้นแสดงรากของสมการดังกล่าว ให้แสดงโดยจัดรูปแบบเป็นทศนิยม 3 ตำแหน่ง
 +
 
 +
ตัวอย่างการทำงาน (TA ลองปรับดูนะ)
 +
 
 +
Enter a: 1
 +
Enter b: 0
 +
Enter c: 4
 +
The solutions of
 +
1 x^2 + 0 x + 4
 +
are
 +
2.000
 +
and
 +
-2.000
 +
 
 +
'''หมายเหตุถึง TA:''' ข้อนี้ให้เขียนเฉพาะส่วนโปรแกรมหลัก ส่วนโปรแกรมย่อยเราเขียนไว้ แต่ซ่อนไม่ให้เห็น ควรแสดงเฉพาะบรรทัดประกาศชื่อ เช่นดังตัวอย่างด้านล่างนี้
 +
 
 +
def root_plus(a,b,c):
 +
    # the code for this function is hidden
 +
 
 +
== การเคลื่อนที่แบบโพรเจกไทล์ ==
 +
 
 +
<div style="background: #e0ffe0; border: 1px solid green">
 +
'''หมายเหตุถึง TA:''' ข้อนี้จะให้คำนวณความสูงที่ระยะ x หนึ่ง ๆ ของวัตถุที่เคลื่อนที่แบบโพรเจกไทล์ (projectile) โดยรับความเร็วต้นและทิศทางของการยิง โดยจะแบ่งเป็นข้อย่อย ๆ ดังนี้
 +
 
 +
* ส่วนแปลงองศาเป็นเรเดียน
 +
* ส่วนการแตกแรง
 +
* ส่วนคำนวณเวลาที่วัตถุเคลื่อนที่จนถึงระยะ x นั้น และ
 +
* ส่วนคำนวณความสูง
 +
</div>
 +
 
 +
ลูกกระสุนปีนใหญ่ถูกยิงจากปืนที่กระบอกทำมุม t องศากับพื้นระนาบ ด้วยความเร็วต้น u เมตรต่อวินาที  เป้าหมายของกระสุนปีนคือกำแพงที่อยู่ห่างไป m เมตร ให้เขียนโปรแกรมคำนวณว่าเมื่อกระสุนเคลื่อนที่ถึงระยะดังกล่าว จะมีความสูงจากพื้นระนาบเท่าใด
 +
 
 +
ในส่วนนี้เราจะพิจารณ์ฟังก์ชัน xxxx ที่ใช้การแก้ปัญหานี้
 +
 
 +
=== 7. ฟังก์ชันแปลงมุม ===
 +
 
 +
ให้เขียนฟังก์ชัน <tt>deg_to_rad(d)</tt> ที่คืนค่ามุมในหน่วยเรเดียน จากมุม d ในหน่วยองศา
 +
 
 +
=== 8. แตกแรง ===
 +
 
 +
ให้เขียนฟังก์ชัน <tt>velx(v,r)</tt> และฟังก์ชัน <tt>vely(v,r)</tt> ที่รับความเร็วของลูกกระสุนปืน (หน่วย เมตร/วินาที) และมุม r (หน่วยเรเดียน) จากนั้นคืนค่าความเร็วในแนวแก x และ y ตามลำดับ
 +
 
 +
=== 9. คำนวณเวลาที่ถึงกำแพง ===
 +
 
 +
ให้เขียนฟังก์ชัน <tt>travel_time(ux,m)</tt> เพื่อหาเวลาที่ใช้ สำหรับวัตถุที่เคลื่อนที่ในแนวแกน x ด้วยความเร็ว ux เมตร/วินาที ที่จะเคลื่อนที่ได้ m เมตร
 +
 
 +
=== 10. คำนวณความสูง ===
  
('''ถึง TA:''' ในตอนทำให้ปิดส่วนโปรแกรมหลักไว้ โดยใส่ option hide=True เข้าไปในส่วนโปรแกรมหลัก)
+
ให้เขียนฟังก์ชัน <tt>height(uy,t)</tt> เพื่อหาความสูง (คิดพื้นว่าสูง 0 เมตร) ของวัตถุที่เคลื่อนที่ด้วยความเร็วต้น uy เมตร/วินาที ในทิศทางขึ้น เมื่อเคลื่อนที่เป็นเวลา t วินาที (ให้ใช้ค่า g=9.81)
  
ในส่วนนี้เราจะเขียนโปรแกรมเพื่ออ่านสมการจากผู้ใช้
+
=== 11. โปรแกรมหลัก ===
  
ให้เขียนฟังก์ชันชื่อ <tt>read_equation</tt> ที่อ่านค่าสัมประสิทธิ์ a, b, c จากผู้ใช้
+
ให้เขียนโปรแกรมหลัก (สมมติว่ามีโปรแกรมย่อยทั้งหมดแล้ว ทำในลักษณะเดียวกับข้อ 6)
  
=== 4. หารากสมการกำลังสอง (ส่วนโปรแกรมหลัก) ===
+
ตัวอย่างการทำงาน
  
(ในตอนทำให้ปิดโค้ดของ function ย่อยทั้งหมด แต่ให้แสดงแต่หัวที่เป็นบรรทัด def ไว้ แล้วเว้นส่วนโปรแกรมหลักด้านล่างให้เติม)
+
Enter u: 20
 +
Enter angle: 60
 +
Enter distance: 15
 +
The height of the cannon ball is XXXXXXXX (ให้ TA เขียนและคำนวณด้วย :P )

รุ่นแก้ไขปัจจุบันเมื่อ 05:16, 18 มิถุนายน 2553

ปฏิบัติการที่สองของวิชา 20411 ตามแผนร่างหัวข้อวิชา 204111 มีเนื้อหาดังนี้

  • ฟังก์ชัน

หมายเหตุ เลขข้อที่ใส่นั้นอาจไม่จำเป็นต้องใช้ตามที่ระบุนี้ แต่ใส่เพื่อให้เห็นชัดเจนว่าแต่ละข้อเริ่มที่ใด

ฟังก์ชันพื้นฐาน

1. ยกกำลัง

ให้เติมฟังก์ชัน square ที่รับจำนวนเต็ม x แล้วคืนค่า

(มีการประกาศหัวฟังก์ชัน, เว้นส่วนของฟังก์ชัน, มีโปรแกรมหลัก)

2. พหุนาม

ให้เขียนฟังก์ชัน poly ที่รับอาร์กิวเมนต์ x ที่คำนวณ

(เว้นช่องทั้งฟังก์ชั่น (ไม่มีการประกาศหัว), มีโปรแกรมหลัก)

ฟังก์ชันและโปรแกรมหลัก: สมการกำลังสอง

ถึง TA: ชุดนี้ประกอบด้วยโจทย์หลายข้อ... สามารถขึ้น intro ทุกข้อด้วยข้อความแบบเดียวกันได้

เราต้องการหาคำตอบของรูปแบบหนึ่งของสมการกำลังสอง พิจารณาสมการ เราทราบว่ามีคำตอบสองคำตอบคือ

และ

ในกรณีที่ มีค่ามากกว่า 0

เราจะแบ่งงานพัฒนาโปรแกรมนี้ออกเป็นหลาย ๆ ส่วน

สำหรับข้อนี้เราสนใจส่วน (ถึง TA: ....ให้เติมเอา.... แล้วค่อยขึ้นโจทย์ของแต่ละส่วน)

ถึง TA: ข้อนี้คิดว่าน่าจะแบ่งได้เป็น 4 ส่วนย่อย ๆ แต่จะแบ่งมากกว่านี้ก็ได้นะ

3. หารากสมการกำลังสอง (แสดงพหุนาม)

ให้เขียนฟังก์ชัน show_poly(a, b, c) ที่รับพารามิเตอร์ 3 ตัวคือ a, b, และ c จากนั้นให้แสดงผลในรูปแบบตามตัวอย่างดังนี้

ถ้าสั่ง show_poly(1,2,3) ฟังก์ชันจะพิมพ์

1 x^2 + 2 x + 3

หรือถ้าสั่ง show_poly(5,0,-10) ฟังก์ชันจะพิมพ์

5 x^2 + 0 x + -10

(สังเกตว่าให้แสดงผลไปเลย ไม่ต้องกังวลกับกรณีที่สัมประสิทธิ์เป็น 0 หรือเป็นค่าลบ)

หมายเหตุถึง TA: ตอนทดสอบให้ทดสอบเฉพาะกรณีสัมประสิทธิ์เป็นจำนวนเต็มก็พอ เพราะการสั่งให้นิสิตจัดรูปแบบทศนิยมกรณีนี้ค่อนข้างยาก

4. หารากสมการกำลังสอง (คำนวณเทอมย่อย)

สังเกตว่าในการหาราก เราจำเป็นต้องคำนวณค่า หลายครั้ง ในส่วนนี้เราจะเขียนฟังก์ชันเพื่อคำนวณส่วนดังกล่าว

ให้เขียนฟังก์ชัน cal_term(a, b, c) ที่รับพารามิเตอร์สามตัวคือ a, b และ c แทนสัมประสิทธิ์ต่าง ๆ ของ x ในพหุนาม

ให้ฟังก์ชันดังกล่าวคืนค่า

เมื่อนิสิตเขียนฟังก์ชันแล้ว อย่าลืมทดสอบก่อนส่งด้วย โดยอาจจะทดสอบใน python shell ดังตัวอย่างด้านล่าง

>>> print(cal_term(1,2,1))
0.0
>>> print(cal_term(1,4,1))
3.46410161514

หมายเหตุถึง TA: ในส่วนทดสอบให้เขียนโปรแกรมหลัก เช่นในตัวอย่างข้างต้น แต่ซ่อนส่วน code ส่วนนั้นไว้ แต่ในตอนพิมพ์อย่าลืมให้จัดรูปแบบเป็นทศนิยมสัก 3 ตำแหน่งด้วย เพื่อป้องกันความผิดพลาดจากการปัดจำนวนจริง

5. หารากสมการกำลังสอง (รากทั้งสอง)

เขียนฟังก์ชัน root_plus(a,b,c) ที่รับสัมประสิทธิ์ a,b, และ c แล้วคำนวณค่า

และเขียนฟังก์ชัน root_minus(a,b,c) ที่รับสัมประสิทธิ์ a,b, และ c แล้วคำนวณค่า

ฟังก์ชันทั้งสองให้เรียกใช้ฟังก์ชัน cal_term ด้วย (แต่ไม่ต้องเขียน ในระบบมีการเขียนไว้ให้แล้ว)

หมายเหตุถึง TA: อย่าลืมใส่ฟังก์ชัน cal_term ไว้ด้วย (แต่ซ่อนไว้นะครับ)

6. หารากสมการกำลังสอง (ส่วนโปรแกรมหลัก)

ให้เขียนโปรแกรมรับสัมประสิทธิ์ของสมการกำลังสอง จากนั้นแสดงรากของสมการดังกล่าว ให้แสดงโดยจัดรูปแบบเป็นทศนิยม 3 ตำแหน่ง

ตัวอย่างการทำงาน (TA ลองปรับดูนะ)

Enter a: 1
Enter b: 0
Enter c: 4
The solutions of
1 x^2 + 0 x + 4
are
2.000
and
-2.000

หมายเหตุถึง TA: ข้อนี้ให้เขียนเฉพาะส่วนโปรแกรมหลัก ส่วนโปรแกรมย่อยเราเขียนไว้ แต่ซ่อนไม่ให้เห็น ควรแสดงเฉพาะบรรทัดประกาศชื่อ เช่นดังตัวอย่างด้านล่างนี้

def root_plus(a,b,c):
    # the code for this function is hidden

การเคลื่อนที่แบบโพรเจกไทล์

หมายเหตุถึง TA: ข้อนี้จะให้คำนวณความสูงที่ระยะ x หนึ่ง ๆ ของวัตถุที่เคลื่อนที่แบบโพรเจกไทล์ (projectile) โดยรับความเร็วต้นและทิศทางของการยิง โดยจะแบ่งเป็นข้อย่อย ๆ ดังนี้

  • ส่วนแปลงองศาเป็นเรเดียน
  • ส่วนการแตกแรง
  • ส่วนคำนวณเวลาที่วัตถุเคลื่อนที่จนถึงระยะ x นั้น และ
  • ส่วนคำนวณความสูง

ลูกกระสุนปีนใหญ่ถูกยิงจากปืนที่กระบอกทำมุม t องศากับพื้นระนาบ ด้วยความเร็วต้น u เมตรต่อวินาที เป้าหมายของกระสุนปีนคือกำแพงที่อยู่ห่างไป m เมตร ให้เขียนโปรแกรมคำนวณว่าเมื่อกระสุนเคลื่อนที่ถึงระยะดังกล่าว จะมีความสูงจากพื้นระนาบเท่าใด

ในส่วนนี้เราจะพิจารณ์ฟังก์ชัน xxxx ที่ใช้การแก้ปัญหานี้

7. ฟังก์ชันแปลงมุม

ให้เขียนฟังก์ชัน deg_to_rad(d) ที่คืนค่ามุมในหน่วยเรเดียน จากมุม d ในหน่วยองศา

8. แตกแรง

ให้เขียนฟังก์ชัน velx(v,r) และฟังก์ชัน vely(v,r) ที่รับความเร็วของลูกกระสุนปืน (หน่วย เมตร/วินาที) และมุม r (หน่วยเรเดียน) จากนั้นคืนค่าความเร็วในแนวแก x และ y ตามลำดับ

9. คำนวณเวลาที่ถึงกำแพง

ให้เขียนฟังก์ชัน travel_time(ux,m) เพื่อหาเวลาที่ใช้ สำหรับวัตถุที่เคลื่อนที่ในแนวแกน x ด้วยความเร็ว ux เมตร/วินาที ที่จะเคลื่อนที่ได้ m เมตร

10. คำนวณความสูง

ให้เขียนฟังก์ชัน height(uy,t) เพื่อหาความสูง (คิดพื้นว่าสูง 0 เมตร) ของวัตถุที่เคลื่อนที่ด้วยความเร็วต้น uy เมตร/วินาที ในทิศทางขึ้น เมื่อเคลื่อนที่เป็นเวลา t วินาที (ให้ใช้ค่า g=9.81)

11. โปรแกรมหลัก

ให้เขียนโปรแกรมหลัก (สมมติว่ามีโปรแกรมย่อยทั้งหมดแล้ว ทำในลักษณะเดียวกับข้อ 6)

ตัวอย่างการทำงาน

Enter u: 20
Enter angle: 60
Enter distance: 15
The height of the cannon ball is XXXXXXXX (ให้ TA เขียนและคำนวณด้วย :P )