ผลต่างระหว่างรุ่นของ "204111:lab3"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 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. คำนวณความสูง === | ||
− | ( | + | ให้เขียนฟังก์ชัน <tt>height(uy,t)</tt> เพื่อหาความสูง (คิดพื้นว่าสูง 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 ) |
รุ่นแก้ไขปัจจุบันเมื่อ 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 )