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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 60 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 7: แถว 7:
 
== ลิสต์และลูป ==
 
== ลิสต์และลูป ==
  
=== b0. ฟังก์ชันอ่านรายการ ===
+
=== ฟังก์ชันอ่านรายการ ===
  
 
ให้เขียนฟังก์ชัน read_list() ที่อ่านรายการของจำนวนเต็มที่ผู้ใช้ป้อน โดยสิ้นสุดการป้อนเมื่อป้อน -1  ให้ฟังก์ชันดังกล่าวคืนรายการของจำนวนเต็มที่อ่านได้ (ไม่รวม -1)
 
ให้เขียนฟังก์ชัน read_list() ที่อ่านรายการของจำนวนเต็มที่ผู้ใช้ป้อน โดยสิ้นสุดการป้อนเมื่อป้อน -1  ให้ฟังก์ชันดังกล่าวคืนรายการของจำนวนเต็มที่อ่านได้ (ไม่รวม -1)
แถว 13: แถว 13:
 
นิสิตสามารถนำฟังก์ชันที่เขียนไว้แล้วนี้ไปใช้ในข้ออื่น ๆ ได้
 
นิสิตสามารถนำฟังก์ชันที่เขียนไว้แล้วนี้ไปใช้ในข้ออื่น ๆ ได้
  
('''หมายเหตุถึง TA''': ให้ประกาศหัวฟังก์ชันไว้ แล้วเว้นช่องให้เขียนโปรแกรม)
+
('''หมายเหตุถึง TA''': ให้ประกาศหัวฟังก์ชันไว้ แล้วเว้นช่องให้เติมให้สมบูรณ์  ให้ตัวอย่างโปรแกรมหลักและตัวอย่างการทำงาน)
 +
 
 +
เติมฟังก์ชันด้านล่างให้สมบูรณ์
 +
 
 +
def read_list():
 +
    output = []
 +
    x = int(input())
 +
    while ___________:
 +
        ___________________
 +
        x = int(input())
 +
    return output
  
 
ตัวอย่างของโปรแกรมหลักที่เรียกใช้ฟังก์ชันดังกล่าว  โปรแกรมนี้รับรายการแล้วพิมพ์ค่าในรายการออกมา
 
ตัวอย่างของโปรแกรมหลักที่เรียกใช้ฟังก์ชันดังกล่าว  โปรแกรมนี้รับรายการแล้วพิมพ์ค่าในรายการออกมา
แถว 21: แถว 31:
 
     print(x)
 
     print(x)
  
ตัวอย่างการทำงานของโปรแกรม
+
ตัวอย่างการทำงานของโปรแกรมตัวอย่าง
  
 
  10
 
  10
แถว 33: แถว 43:
 
  3
 
  3
  
 +
=== ผลรวมกำลังสอง ===
 +
 +
เขียนโปรแกรมอ่านรายการของจำนวนเต็ม จากนั้นคำนวณหาผลรวมของจำนวนเต็มในรายการยกกำลังสอง
 +
 +
ยกตัวอย่างเช่น ถ้าจำนวนเต็มในรายการเป็น  10 20 15 และ 3 ผลรวมคือ <math>10^2 + 20^2 + 15^2 + 3^2 = 734</math>
 +
 +
ผู้ใช้จะป้อนข้อมูลทีละจำนวน และจะจบการป้อนโดยการป้อน -1
 +
 +
ตัวอย่างการทำงาน
 +
 +
10
 +
20
 +
15
 +
3
 +
-1
 +
Answer = 734
 +
 +
'''หมายเหตุ:''' แนะนำให้ใช้ฟังก์ชัน <tt>read_list</tt> ที่เขียนในข้อที่แล้ว
 +
 +
=== ผลรวมของผลต่างจากค่าน้อยที่สุดกำลังสอง ===
 +
 +
เขียนโปรแกรมอ่านรายการของจำนวนเต็ม จากนั้นคำนวณหาผลรวมของกำลังสองของผลต่างของจำนวนเต็มกับค่าที่น้อยที่สุด
 +
 +
ยกตัวอย่างเช่น ถ้าจำนวนเต็มในรายการเป็น  10 20 15 และ 3  ดังนั้นค่าที่น้อยที่สุดคือ 3
 +
 +
คำตอบที่เราต้องการคือ <math>(10-3)^2 + (20-3)^2 + (15-3)^2 + (3-3)^2 = 482</math>
 +
 +
ผู้ใช้จะป้อนข้อมูลทีละจำนวน และจะจบการป้อนโดยการป้อน -1
 +
 +
ตัวอย่างการทำงาน
 +
 +
10
 +
20
 +
15
 +
3
 +
-1
 +
Answer = 482
 +
 +
หมายเหตุ สามารถใช้ฟังก์ชัน <tt>min</tt> ในการหาค่าน้อยที่สุดได้
 +
 +
=== ฝากเงิน ===
 +
 +
สมหญิงฝากเงินทุก ๆ เดือน  เงินที่ฝากเข้าไปจะสะสมไปเรื่อย ๆ  ให้เขียนโปรแกรมรับรายการเงินที่สมหญิงฝากจากผู้ใช้ โดยผู้ใช้จะป้อน -1 เมื่อข้อมูลหมด 
 +
 +
จากนั้นให้โปรแกรมพิมพ์เงินรวมทั้งหมด และเงินฝากรวมในทุก ๆ เดือนภายหลังจากที่สมหญิงฝากไป
 +
 +
'''หมายเหตุ:''' แนะนำให้ใช้ฟังก์ชัน <tt>read_list</tt> ที่เขียนในข้อที่แล้ว
 +
 +
ตัวอย่างการทำงาน
 +
 +
10
 +
20
 +
100
 +
15
 +
-1
 +
Total = 145
 +
10
 +
30
 +
130
 +
145
 +
 +
หมายเหตุ: ผลลัพธ์คือ เงินในแต่ละเดือนคือ 10, 30, 130, และ 145
 +
 +
=== ฝากเงินแบบมีดอกเบี้ยรายเดือน ===
 +
 +
สมหญิงฝากเงินทุก ๆ เดือน  เงินที่ฝากเข้าไปจะสะสมไปเรื่อย ๆ  ในแต่ละเดือนก่อนที่จะรับเงินฝาก ธนาคารจะให้ดอกเบี้ย 1% จากเงินฝากที่มีอยู่
 +
 +
ยกตัวอย่างเช่น ถ้าฝากเงินสองเดือนแรกเท่ากับ 10 และ 20 บาท ในเดือนแรกเนื่องจากยังไม่มีเงินต้น เงินรวมคือ 10 บาท ในเดือ่นที่สอง ก่อนจะได้เงินฝากจะได้รับดอกเบี้ย 1% คือ 0.1 บาท รวมเงินต้นเป็น 10.1 รวมกับเงินฝาก ได้เป็น 30.1 บาท
 +
 +
ให้เขียนโปรแกรมรับรายการเงินที่สมหญิงฝากจากผู้ใช้ โดยผู้ใช้จะป้อน -1 เมื่อข้อมูลหมด 
 +
 +
จากนั้นให้โปรแกรมพิมพ์เงินรวมทั้งหมด และเงินฝากรวมในทุก ๆ เดือนภายหลังจากที่สมหญิงฝากไป  ให้แสดงด้วยทศนิยม 3 ตำแหน่ง
 +
 +
'''หมายเหตุ:''' แนะนำให้ใช้ฟังก์ชัน <tt>read_list</tt> ที่เขียนในข้อที่แล้ว
 +
 +
ตัวอย่างการทำงาน
 +
 +
10
 +
20
 +
100
 +
15
 +
-1
 +
Total = 146.705
 +
10.000
 +
30.100
 +
130.401
 +
146.705
 +
 +
=== เลขกำลังสอง 1 ===
 +
 +
ให้เขียนฟังก์ชัน <tt>is_square(x)</tt> เพื่อตรวจสอบว่าจำนวนเต็ม '''x''' เป็นจำนวนเต็มที่เป็นกำลังสองของจำนวนเต็มบางจำนวนหรือไม่
 +
 +
('''หมายเหตุถึง TA:''' ในส่วนของโปรแกรมให้ประกาศ import math และให้ประกาศหัวฟังก์ชัน และให้ตัวอย่างการเรียกใช้ดังด้านล่าง)
 +
 +
ตัวอย่างการเรียกใช้ใน Python Shell (ในการทดลองให้นิสิตพิมพ์โปรแกรมที่มีฟังก์ชันดังกล่าว จากนั้นกด Run ใน Wing IDE จะสามารถเรียกใช้ฟังก์ชันดังกล่าวได้ใน Python Shell)
 +
 +
>>> is_square(4)
 +
True
 +
>>> is_square(5)
 +
False
 +
>>> is_square(121)
 +
True
 +
>>> is_square(200)
 +
False
 +
>>> is_square(80)
 +
False
 +
 +
('''หมายเหตุถึง TA:''' ในการตรวจ ให้ซ่อนโปรแกรมหลักไว้ ในโปรแกรมหลักดังกล่าวให้พิมพ์ผลลัพธ์ของฟังก์ชันเมื่อเรียกผ่าน input ต่าง ๆ  อย่าลืมใส่ กล่อง testcase:begin testcase:end ว่าง ๆ ไว้ด้วย ไม่เช่นนั้นระบบจะไม่ตรวจ)
 +
 +
=== เลขกำลังสอง 2 ===
 +
เขียนฟังก์ชัน <tt>filter_squares(ls)</tt> ที่รับรายการ <tt>ls</tt> และคืนค่าเป็นรายการที่ประกอบด้วยจำนวนเต็มที่เป็นเลขกำลังสอง
 +
 +
ให้นำฟังก์ชัน is_square ที่เขียนในข้อก่อนมาใช้
 +
 +
('''หมายเหตุถึง TA:''' พยายามจัดหน้าตาส่วนของโปรแกรมเป็นดังรูปด้านล่าง)
 +
 +
import math
 +
 +
def is_square(x):
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
 +
 +
def filter_squares(ls):
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
 +
_______________________________________
  
=== b1. ดื่มน้ำ (ยังไม่เสร็จ) ===
+
ตัวอย่างการเรียกใช้ใน Python shell (ในการทดลองให้นิสิตพิมพ์โปรแกรมที่มีฟังก์ชันดังกล่าว จากนั้นกด Run ใน Wing IDE จะสามารถเรียกใช้ฟังก์ชันดังกล่าวได้ใน Python Shell)
  
มีนักเรียนทั้งสิ้น N คน นั่งเรียงกันเป็นแถว นักเรียนแต่ละคนต้องการดื่มน้ำปริมาตรแตกต่างกัน เจ้าหน้าที่เดินรินน้ำให้กับนักเรียนแต่ละคน อยากทราบว่าหลังจากรินน้ำให้กับนักเรียนแต่ละคนแล้ว น้ำในเหยือกจะเหลือเท่าใด
+
  >>> filter_squares([1,2,3,4,5,6,7,8,9,10])
 +
[1,4,9]
 +
>>> filter_squares([10,20,30])
 +
[]
 +
>>> filter_squares([80,100,200,400,9,80])
 +
[100,400,9]
  
 +
('''หมายเหตุถึง TA:''' ในการตรวจ ให้ซ่อนโปรแกรมหลักไว้ ในโปรแกรมหลักดังกล่าวให้พิมพ์ผลลัพธ์ของฟังก์ชันเมื่อเรียกผ่าน input ต่าง ๆ  อย่าลืมใส่ กล่อง testcase:begin testcase:end ว่าง ๆ ไว้ด้วย ไม่เช่นนั้นระบบจะไม่ตรวจ)
  
=== b2. พิมพ์กลับหลัง ===
+
=== พิมพ์กลับหลัง ===
  
 
เขียนโปรแกรมรับจำนวนเต็ม จนกระทั่งผู้ใช้ป้อน -1 จากนั้นพิมพ์จำนวนเต็มที่รับ จากหน้าไปหลัง บรรทัดละ 1 ตัว
 
เขียนโปรแกรมรับจำนวนเต็ม จนกระทั่งผู้ใช้ป้อน -1 จากนั้นพิมพ์จำนวนเต็มที่รับ จากหน้าไปหลัง บรรทัดละ 1 ตัว
แถว 54: แถว 203:
 
  20
 
  20
 
  10
 
  10
 +
 +
== ร้านขายของ ==
 +
 +
ในส่วนนี้เราจะพัฒนาโปรแกรมสำหรับเป็นหน้าร้านซื้อขายเครื่องเขียน  เราจะเก็บข้อมูลของเครื่องเขียนในรายการ โดยข้อมูลที่จะเก็บเป็นดังนี้ คือ ชื่อของ ราคา และจำนวนที่เหลือในร้าน
 +
 +
ข้อมูลทั้งสามจะเก็บในรายการสามรายการ ตัวอย่างดังด้านล่างนี้
 +
 +
products = ['pen', 'pencil', 'ruler', 'cutter', 'ink']
 +
prices = [5, 1, 10, 15, 20]
 +
counts = [100, 200, 50, 30, 50]
 +
 +
จากข้อมูลข้างต้น ปากกา (pen) มีราคา 5 บาท มีจำนวนของเหลือ 100 ชิ้น
 +
 +
('''หมายเหตุถึง TA:''' ในแต่ละข้อ ให้ตัดคำอธิบายโจทย์รวมด้านบนไปด้วย)
 +
 +
=== ร้านขายของ: ค้นหาสินค้า ===
 +
 +
สังเกตว่าข้อมูลด้านราคาและจำนวนสินค้าจะถูกเก็บในรายการในตำแหน่งที่สอดคล้องกับข้อมูลชื่อสินค้า ดังนั้นเราจะประมวลผลข้อมูลดังกล่าวได้สะดวกถ้าเราทราบดัชนีของสินค้านั้น
 +
 +
เขียนฟังก์ชัน <tt>find_product(plist, name)</tt> ที่รับรายการของชื่อสินค้า plist และชื่อสินค้า name จากนั้นคืนดัชนีของ name ในรายการ plist ในกรณีที่ไม่มีสินค้านั้นในรายการให้คืนค่า -1
 +
 +
ตัวอย่างการเรียกใช้งานบน Python Shell  (ในการทดลองให้นิสิตพิมพ์โปรแกรมที่มีฟังก์ชันดังกล่าว จากนั้นกด Run ใน Wing IDE จะสามารถเรียกใช้ฟังก์ชันดังกล่าวได้ใน Python Shell)
 +
 +
>>> find_product(['pen','ink','pencil'],'pen')
 +
0
 +
>>> find_product(['pen','ink','pencil'],'pencil')
 +
2
 +
>>> find_product(['pen','ink','pencil'],'ruler')
 +
-1
 +
 +
('''หมายเหตุถึง TA:''' ในการตรวจ ให้ซ่อนโปรแกรมหลักไว้ ในโปรแกรมหลักดังกล่าวให้พิมพ์ผลลัพธ์ของฟังก์ชันเมื่อเรียกผ่าน input ต่าง ๆ  อย่าลืมใส่ กล่อง testcase:begin testcase:end ว่าง ๆ ไว้ด้วย ไม่เช่นนั้นระบบจะไม่ตรวจ)
 +
 +
=== ร้านขายของ: พิมพ์รายการสินค้าที่เหลือ ===
 +
 +
เขียนฟังก์ชัน <tt>show_stock(products, counts)</tt> ที่พิมพ์รายการสินค้าที่เหลือ โดยใช้ข้อมูลรายชื่อสินค้าในรายการ <tt>products</tt> และรายการจำนวนที่เหลือในรายการ <tt>counts</tt>
 +
 +
ตัวอย่างโปรแกรมหลักที่เรียกใช้งานฟังก์ชันดังกล่าว
 +
 +
products = ['pen', 'pencil', 'ruler', 'cutter', 'ink']
 +
counts = [100, 200, 50, 30, 50]
 +
show_stock(products, counts)
 +
 +
ตัวอย่างผลลัพธ์จากโปรแกรมข้างต้น
 +
 +
pen 100
 +
pencil 200
 +
ruler 50
 +
cutter 30
 +
ink 50
 +
 +
=== ร้านขายของ: ขายสินค้า ===
 +
 +
เขียนฟังก์ชัน <tt>sale(products, prices, counts)</tt> ที่รับชื่อสินค้า และจำนวนที่ต้องการซื้อจากผู้ใช้ จากนั้นระบุราคาที่ต้องจ่าย พร้อมทั้งตัดจำนวนสินค้าที่เหลือ
 +
 +
โดยฟังก์ชันดังกล่าว จะต้องตรวจสอบว่าสินค้าที่ซื้อมีหรือไม่ และจำนวนมากพอที่จะขายหรือไม่ด้วย  ถ้าผู้ใช้ป้อนจำนวนซื้อน้อยกว่า 0 ให้ระบุว่าเป็นจำนวนที่ผิดพลาดด้วย
 +
 +
เขัยนฟังก์ชันด่านล่าง
 +
 +
def sale(products, prices, counts):
 +
_____________________________________________________
 +
_____________________________________________________
 +
_____________________________________________________
 +
_____________________________________________________
 +
_____________________________________________________
 +
_____________________________________________________
 +
 +
ตัวอย่างโปรแกรมหลักที่ใช้ฟังก์ชันดังกล่าว (และใช้ฟังก์ชัน show_stock ด้วย แต่นิสิตไม่ต้องเขียนฟังก์ชันนี้ในการส่ง, แต่ต้องเขียนเพื่อทดสอบโปรแกรมของนิสิตเอง)
 +
 +
products = ['pen', 'pencil']
 +
prices = [5, 1]
 +
counts = [100, 200]
 +
sale(products, prices, counts)
 +
show_stock(products, counts)
 +
 +
'''ตัวอย่างการทำงาน 1'''
 +
 +
Enter product name: pen
 +
Enter amount: 3
 +
You have to pay 15 baths.
 +
pen 97
 +
pencil 200
 +
 +
หมายเหตุบรรทัดผลลัพธ์สองบรรทัดสุดท้ายพิมพ์โดย show_stock
 +
 +
'''ตัวอย่างการทำงาน 2'''
 +
 +
Enter product name: ruler
 +
Sorry, we do not have that product.
 +
pen 100
 +
pencil 200
 +
 +
'''ตัวอย่างการทำงาน 3'''
 +
 +
Enter product name: pencil
 +
Enter amount: 210
 +
Sorry, we do not have enough.
 +
pen 100
 +
pencil 200
 +
 +
'''ตัวอย่างการทำงาน 3'''
 +
 +
Enter product name: pencil
 +
Enter amount: -20
 +
Sorry, that is an invalid amount.
 +
pen 100
 +
pencil 200
 +
 +
'''หมายเหตุ:''' ในการเขียนฟังก์ชันนั้น ถ้าต้องการให้ฟังก์ชันจบการทำงานและคืนกลับไปทำงานที่โปรแกรมหลักเลย สามารถทำได้โดยใช้คำสั่ง <tt>return</tt> (สามารถสั่งโดยไม่ต้องตามด้วยค่าที่จะคืน)
 +
 +
=== ร้านขายของ: รวมเป็นโปรแกรม ===
 +
ให้นำฟังก์ชันที่เขียนไว้จากข้อก่อน ๆ มารวมเป็นโปรแกรมร้านขายของ ที่มีการทำงานดังนี้
 +
 +
* เริ่มต้นโดยการแสดงรายการสินค้าที่มี
 +
* จากนั้นถามผู้ใช้ว่าต้องการจบการทำงานหรือซื้อสินค้า
 +
** ถ้าผู้ใช้ซื้อสินค้า ให้ทำงานในลักษณะเดียวกับโจทย์ข้างต้น เมื่อซื้อเสร็จให้พิมพ์รายการสินค้าที่เหลือ
 +
** ถ้าผู้ใช้สั่งให้จบการทำงาน ให้พิมพ์รายการสินค้าที่เหลือ และจบการทำงาน
 +
 +
ให้โปรแกรมเริ่มต้นด้วยสินค้าที่มีตามรายการตัวอย่างด้านบน (ให้ประกาศตัวแปร products, prices, และ counts ตามด้านบนในส่วนของโปรแกรมหลัก)
 +
 +
ตัวอย่างการทำงาน
 +
 +
Current stock:
 +
pen 100
 +
pencil 200
 +
ruler 50
 +
cutter 30
 +
ink 50
 +
Buy or Exit (enter B or E): B
 +
Enter product name: pen
 +
Enter amount: 15
 +
You have to pay 75 bath.
 +
pen 85
 +
pencil 200
 +
ruler 50
 +
cutter 30
 +
ink 50
 +
Buy or Exit (enter B or E): B
 +
Enter product name: cutter
 +
Enter amount: 50
 +
Sorry, we do not have enough.
 +
pen 85
 +
pencil 200
 +
ruler 50
 +
cutter 30
 +
ink 50
 +
Buy or Exit (enter B or E): E
 +
At the end:
 +
pen 85
 +
pencil 200
 +
ruler 50
 +
cutter 30
 +
ink 50
 +
 +
(ให้เขียนทั้งโปรแกรม)
 +
 +
== โจทย์เกี่ยวกับพหุนาม ==
 +
=== การอ่านพหุนาม ===
 +
 +
ในโจทย์หลายข้อ เราจะอ่านพหุนามจากผู้ใช้ โดยการอ่านจะมีรูปแบบดังนี้
 +
 +
* ผู้ใช้จะป้อนข้อมูลตัวแรกเป็นจำนวนเต็ม <math>d</math> แทนกำลังสูงจุดของตัวแปร <math>x</math> ในพหุนามดังกล่าว
 +
* จากนั้นจะป้อนจำนวนจริงอีก <math>d + 1</math> จำนวน แทนสัมประสิทธิ์ของตัวแปร <math>x</math> โดยเริ่มจาก <math>a_0</math>, <math>a_1</math>, ไปจนถึง <math>a_d</math> พหุนามที่ผู้ใช้ป้อนคือ <math>f(x) = a_0 + a_1\cdot x + a_2\cdot x^2 + \cdots + a_d x^d</math>
 +
 +
ให้ฟังก์ชันดังกล่าวคืนค่าเป็นรายการของสัมประสิทธิ์ [<math>a_0</math>,<math>a_1</math>,<math>a_2</math>,...,<math>a_d</math>]
 +
 +
ยกตัวอย่างเช่น ถ้าพหุนามเป็น <math>f(x) = 2x^3 - x^2 + 3x + 10</math> ผู้ใช้ป้อนข้อมูลดังนี้
 +
 +
3
 +
10
 +
3
 +
-1
 +
2
 +
 +
ฟังก์ชันดังกล่าวจะคืนค่าเป็น [10,3,-1,2]
 +
 +
ตัวอย่างของโปรแกรมหลักที่เรียกใช้ฟังก์ชันดังกล่าว
 +
 +
print("Enter polynomial:")
 +
p = read_poly()
 +
print("Coefficients:")
 +
for c in p:
 +
    print(c)
 +
 +
ตัวอย่างการทำงาน
 +
 +
Enter polynomial:
 +
3
 +
10
 +
3
 +
-1
 +
2
 +
Coeeficients:
 +
10
 +
3
 +
-1
 +
2
 +
 +
=== หาค่าพหุนาม ===
 +
เขียนโปรแกรมรับพหุนาม <math>f(x)</math> จากผู้ใช้ จากนั้นรับค่า <math>a</math> แล้วคำนวณค่า <math>f(a)</math>
 +
 +
'''ข้อมูลป้อนเข้า'''
 +
 +
* ผู้ใช้จะป้อนข้อมูลตัวแรกเป็นจำนวนเต็ม <math>d</math> แทนกำลังสูงจุดของตัวแปร <math>x</math> ในพหุนามดังกล่าว
 +
* จากนั้นจะป้อนจำนวนจริงอีก <math>d + 1</math> จำนวน แทนสัมประสิทธิ์ของตัวแปร <math>x</math> โดยเริ่มจาก <math>a_0</math>, <math>a_1</math>, ไปจนถึง <math>a_d</math> พหุนามที่ผู้ใช้ป้อนคือ <math>f(x) = a_0 + a_1\cdot x + a_2\cdot x^2 + \cdots + a_d x^d</math>
 +
* สุดท้ายผู้ใช้จะป้อนจำนวนจริง <math>a</math>
 +
 +
ให้โปรแกรมตอบค่า <math>f(a)</math> เป็นทศนิยม 2 ตำแหน่ง
 +
 +
ตัวอย่างเช่น ถ้าพหุนามเป็น <math>f(x) = 2x^3 - x^2 + 3x + 10</math> และผู้ใช้ต้องการคำนวณค่า <math>f(3)</math> ตัวอย่างการทำงานของโปรแกรมจะเป็นดังนี้
 +
 +
3
 +
10
 +
3
 +
-1
 +
2
 +
3
 +
f(a) = 64.00
 +
 +
หมายเหตุ แนะนำให้ใช้ฟังก์ชัน <tt>read_poly</tt> ที่เขียนจากข้อที่แล้ว
 +
 +
=== บวกพหุนาม ===
 +
เขียนโปรแกรมรับพหุนามสองพหุนาม จากนั้นหาผลบวก แล้วพิมพ์รายการของสัมประสิทธิ์ให้กับผู้ใช้
 +
 +
ตัวอย่างการทำงาน
 +
 +
Enter first polynomial:
 +
2
 +
1
 +
2
 +
3
 +
Enter second polynomial:
 +
5
 +
10
 +
-1
 +
0
 +
2
 +
3
 +
4
 +
Result is:
 +
11
 +
1
 +
3
 +
3
 +
4
 +
 +
=== หาอนุพันธ์ของพหุนาม ===
 +
 +
สูตรการหาอนุพันธ์ของฟังก์ชันพหุนามคือ <math>\frac{d}{dx}x^k = k x^{k-1}</math>  ให้เขียนโปรแกรมรับพหุนาม จากนั้นคำนวนหาอนุพันธ์และแสดงกับผู้ใช้
 +
 +
ตัวอย่างการทำงาน
 +
 +
Enter polynomial:
 +
3
 +
4
 +
3
 +
2
 +
1
 +
Result:
 +
3
 +
4
 +
3
 +
 +
หมายเหตุ: ตัวอย่างข้างต้นแสดงว่า <math>\frac{d}{dx}(1x^3+2x^2+3x+4) = 3x^2 + 4x + 3</math>
 +
 +
=== คูณพหุนาม (ยากเป็นข้อโบนัส) ===
 +
เขียนโปรแกรมรับพหุนามสองพหุนาม จากนั้นคำนวณหาผลคูณของพหุนาม แล้วแสดงผล
 +
 +
ตัวอย่างการทำงาน
 +
Enter first polynomial:
 +
2
 +
1
 +
2
 +
3
 +
Enter second polynomial:
 +
1
 +
2
 +
1
 +
Result:
 +
2
 +
4
 +
8
 +
3
 +
 +
หมายเหตุ ตัวอย่างข้างต้นคำนวณ <math>(3x^2 + 2x + 1)\times(x + 2) = 3x^3 + 8x^2 + 5x + 2</math>

รุ่นแก้ไขปัจจุบันเมื่อ 17:47, 3 กรกฎาคม 2553

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

  • list

การอ้างข้อมูลในลิสต์

ลิสต์และลูป

ฟังก์ชันอ่านรายการ

ให้เขียนฟังก์ชัน read_list() ที่อ่านรายการของจำนวนเต็มที่ผู้ใช้ป้อน โดยสิ้นสุดการป้อนเมื่อป้อน -1 ให้ฟังก์ชันดังกล่าวคืนรายการของจำนวนเต็มที่อ่านได้ (ไม่รวม -1)

นิสิตสามารถนำฟังก์ชันที่เขียนไว้แล้วนี้ไปใช้ในข้ออื่น ๆ ได้

(หมายเหตุถึง TA: ให้ประกาศหัวฟังก์ชันไว้ แล้วเว้นช่องให้เติมให้สมบูรณ์ ให้ตัวอย่างโปรแกรมหลักและตัวอย่างการทำงาน)

เติมฟังก์ชันด้านล่างให้สมบูรณ์

def read_list():
    output = []
    x = int(input())
    while ___________:
        ___________________
        x = int(input())
    return output

ตัวอย่างของโปรแกรมหลักที่เรียกใช้ฟังก์ชันดังกล่าว โปรแกรมนี้รับรายการแล้วพิมพ์ค่าในรายการออกมา

ls = read_list()
for x in ls:
    print(x)

ตัวอย่างการทำงานของโปรแกรมตัวอย่าง

10
20
15
3
-1
10
20
15
3

ผลรวมกำลังสอง

เขียนโปรแกรมอ่านรายการของจำนวนเต็ม จากนั้นคำนวณหาผลรวมของจำนวนเต็มในรายการยกกำลังสอง

ยกตัวอย่างเช่น ถ้าจำนวนเต็มในรายการเป็น 10 20 15 และ 3 ผลรวมคือ

ผู้ใช้จะป้อนข้อมูลทีละจำนวน และจะจบการป้อนโดยการป้อน -1

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

10
20
15
3
-1
Answer = 734

หมายเหตุ: แนะนำให้ใช้ฟังก์ชัน read_list ที่เขียนในข้อที่แล้ว

ผลรวมของผลต่างจากค่าน้อยที่สุดกำลังสอง

เขียนโปรแกรมอ่านรายการของจำนวนเต็ม จากนั้นคำนวณหาผลรวมของกำลังสองของผลต่างของจำนวนเต็มกับค่าที่น้อยที่สุด

ยกตัวอย่างเช่น ถ้าจำนวนเต็มในรายการเป็น 10 20 15 และ 3 ดังนั้นค่าที่น้อยที่สุดคือ 3

คำตอบที่เราต้องการคือ

ผู้ใช้จะป้อนข้อมูลทีละจำนวน และจะจบการป้อนโดยการป้อน -1

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

10
20
15
3
-1
Answer = 482

หมายเหตุ สามารถใช้ฟังก์ชัน min ในการหาค่าน้อยที่สุดได้

ฝากเงิน

สมหญิงฝากเงินทุก ๆ เดือน เงินที่ฝากเข้าไปจะสะสมไปเรื่อย ๆ ให้เขียนโปรแกรมรับรายการเงินที่สมหญิงฝากจากผู้ใช้ โดยผู้ใช้จะป้อน -1 เมื่อข้อมูลหมด

จากนั้นให้โปรแกรมพิมพ์เงินรวมทั้งหมด และเงินฝากรวมในทุก ๆ เดือนภายหลังจากที่สมหญิงฝากไป

หมายเหตุ: แนะนำให้ใช้ฟังก์ชัน read_list ที่เขียนในข้อที่แล้ว

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

10
20
100
15
-1
Total = 145
10
30
130
145

หมายเหตุ: ผลลัพธ์คือ เงินในแต่ละเดือนคือ 10, 30, 130, และ 145

ฝากเงินแบบมีดอกเบี้ยรายเดือน

สมหญิงฝากเงินทุก ๆ เดือน เงินที่ฝากเข้าไปจะสะสมไปเรื่อย ๆ ในแต่ละเดือนก่อนที่จะรับเงินฝาก ธนาคารจะให้ดอกเบี้ย 1% จากเงินฝากที่มีอยู่

ยกตัวอย่างเช่น ถ้าฝากเงินสองเดือนแรกเท่ากับ 10 และ 20 บาท ในเดือนแรกเนื่องจากยังไม่มีเงินต้น เงินรวมคือ 10 บาท ในเดือ่นที่สอง ก่อนจะได้เงินฝากจะได้รับดอกเบี้ย 1% คือ 0.1 บาท รวมเงินต้นเป็น 10.1 รวมกับเงินฝาก ได้เป็น 30.1 บาท

ให้เขียนโปรแกรมรับรายการเงินที่สมหญิงฝากจากผู้ใช้ โดยผู้ใช้จะป้อน -1 เมื่อข้อมูลหมด

จากนั้นให้โปรแกรมพิมพ์เงินรวมทั้งหมด และเงินฝากรวมในทุก ๆ เดือนภายหลังจากที่สมหญิงฝากไป ให้แสดงด้วยทศนิยม 3 ตำแหน่ง

หมายเหตุ: แนะนำให้ใช้ฟังก์ชัน read_list ที่เขียนในข้อที่แล้ว

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

10
20
100
15
-1
Total = 146.705
10.000
30.100
130.401
146.705

เลขกำลังสอง 1

ให้เขียนฟังก์ชัน is_square(x) เพื่อตรวจสอบว่าจำนวนเต็ม x เป็นจำนวนเต็มที่เป็นกำลังสองของจำนวนเต็มบางจำนวนหรือไม่

(หมายเหตุถึง TA: ในส่วนของโปรแกรมให้ประกาศ import math และให้ประกาศหัวฟังก์ชัน และให้ตัวอย่างการเรียกใช้ดังด้านล่าง)

ตัวอย่างการเรียกใช้ใน Python Shell (ในการทดลองให้นิสิตพิมพ์โปรแกรมที่มีฟังก์ชันดังกล่าว จากนั้นกด Run ใน Wing IDE จะสามารถเรียกใช้ฟังก์ชันดังกล่าวได้ใน Python Shell)

>>> is_square(4)
True
>>> is_square(5)
False
>>> is_square(121)
True
>>> is_square(200)
False
>>> is_square(80)
False

(หมายเหตุถึง TA: ในการตรวจ ให้ซ่อนโปรแกรมหลักไว้ ในโปรแกรมหลักดังกล่าวให้พิมพ์ผลลัพธ์ของฟังก์ชันเมื่อเรียกผ่าน input ต่าง ๆ อย่าลืมใส่ กล่อง testcase:begin testcase:end ว่าง ๆ ไว้ด้วย ไม่เช่นนั้นระบบจะไม่ตรวจ)

เลขกำลังสอง 2

เขียนฟังก์ชัน filter_squares(ls) ที่รับรายการ ls และคืนค่าเป็นรายการที่ประกอบด้วยจำนวนเต็มที่เป็นเลขกำลังสอง

ให้นำฟังก์ชัน is_square ที่เขียนในข้อก่อนมาใช้

(หมายเหตุถึง TA: พยายามจัดหน้าตาส่วนของโปรแกรมเป็นดังรูปด้านล่าง)

import math

def is_square(x):
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________

def filter_squares(ls):
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________

ตัวอย่างการเรียกใช้ใน Python shell (ในการทดลองให้นิสิตพิมพ์โปรแกรมที่มีฟังก์ชันดังกล่าว จากนั้นกด Run ใน Wing IDE จะสามารถเรียกใช้ฟังก์ชันดังกล่าวได้ใน Python Shell)

>>> filter_squares([1,2,3,4,5,6,7,8,9,10])
[1,4,9]
>>> filter_squares([10,20,30])
[]
>>> filter_squares([80,100,200,400,9,80])
[100,400,9]

(หมายเหตุถึง TA: ในการตรวจ ให้ซ่อนโปรแกรมหลักไว้ ในโปรแกรมหลักดังกล่าวให้พิมพ์ผลลัพธ์ของฟังก์ชันเมื่อเรียกผ่าน input ต่าง ๆ อย่าลืมใส่ กล่อง testcase:begin testcase:end ว่าง ๆ ไว้ด้วย ไม่เช่นนั้นระบบจะไม่ตรวจ)

พิมพ์กลับหลัง

เขียนโปรแกรมรับจำนวนเต็ม จนกระทั่งผู้ใช้ป้อน -1 จากนั้นพิมพ์จำนวนเต็มที่รับ จากหน้าไปหลัง บรรทัดละ 1 ตัว

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

10
20
15
3
-1
3
15
20
10

ร้านขายของ

ในส่วนนี้เราจะพัฒนาโปรแกรมสำหรับเป็นหน้าร้านซื้อขายเครื่องเขียน เราจะเก็บข้อมูลของเครื่องเขียนในรายการ โดยข้อมูลที่จะเก็บเป็นดังนี้ คือ ชื่อของ ราคา และจำนวนที่เหลือในร้าน

ข้อมูลทั้งสามจะเก็บในรายการสามรายการ ตัวอย่างดังด้านล่างนี้

products = ['pen', 'pencil', 'ruler', 'cutter', 'ink']
prices = [5, 1, 10, 15, 20]
counts = [100, 200, 50, 30, 50]

จากข้อมูลข้างต้น ปากกา (pen) มีราคา 5 บาท มีจำนวนของเหลือ 100 ชิ้น

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

ร้านขายของ: ค้นหาสินค้า

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

เขียนฟังก์ชัน find_product(plist, name) ที่รับรายการของชื่อสินค้า plist และชื่อสินค้า name จากนั้นคืนดัชนีของ name ในรายการ plist ในกรณีที่ไม่มีสินค้านั้นในรายการให้คืนค่า -1

ตัวอย่างการเรียกใช้งานบน Python Shell (ในการทดลองให้นิสิตพิมพ์โปรแกรมที่มีฟังก์ชันดังกล่าว จากนั้นกด Run ใน Wing IDE จะสามารถเรียกใช้ฟังก์ชันดังกล่าวได้ใน Python Shell)

>>> find_product(['pen','ink','pencil'],'pen')
0
>>> find_product(['pen','ink','pencil'],'pencil')
2
>>> find_product(['pen','ink','pencil'],'ruler')
-1

(หมายเหตุถึง TA: ในการตรวจ ให้ซ่อนโปรแกรมหลักไว้ ในโปรแกรมหลักดังกล่าวให้พิมพ์ผลลัพธ์ของฟังก์ชันเมื่อเรียกผ่าน input ต่าง ๆ อย่าลืมใส่ กล่อง testcase:begin testcase:end ว่าง ๆ ไว้ด้วย ไม่เช่นนั้นระบบจะไม่ตรวจ)

ร้านขายของ: พิมพ์รายการสินค้าที่เหลือ

เขียนฟังก์ชัน show_stock(products, counts) ที่พิมพ์รายการสินค้าที่เหลือ โดยใช้ข้อมูลรายชื่อสินค้าในรายการ products และรายการจำนวนที่เหลือในรายการ counts

ตัวอย่างโปรแกรมหลักที่เรียกใช้งานฟังก์ชันดังกล่าว

products = ['pen', 'pencil', 'ruler', 'cutter', 'ink']
counts = [100, 200, 50, 30, 50]
show_stock(products, counts)

ตัวอย่างผลลัพธ์จากโปรแกรมข้างต้น

pen 100
pencil 200
ruler 50
cutter 30
ink 50

ร้านขายของ: ขายสินค้า

เขียนฟังก์ชัน sale(products, prices, counts) ที่รับชื่อสินค้า และจำนวนที่ต้องการซื้อจากผู้ใช้ จากนั้นระบุราคาที่ต้องจ่าย พร้อมทั้งตัดจำนวนสินค้าที่เหลือ

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

เขัยนฟังก์ชันด่านล่าง

def sale(products, prices, counts):
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________

ตัวอย่างโปรแกรมหลักที่ใช้ฟังก์ชันดังกล่าว (และใช้ฟังก์ชัน show_stock ด้วย แต่นิสิตไม่ต้องเขียนฟังก์ชันนี้ในการส่ง, แต่ต้องเขียนเพื่อทดสอบโปรแกรมของนิสิตเอง)

products = ['pen', 'pencil']
prices = [5, 1]
counts = [100, 200]
sale(products, prices, counts)
show_stock(products, counts)

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

Enter product name: pen
Enter amount: 3
You have to pay 15 baths.
pen 97
pencil 200

หมายเหตุบรรทัดผลลัพธ์สองบรรทัดสุดท้ายพิมพ์โดย show_stock

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

Enter product name: ruler
Sorry, we do not have that product.
pen 100
pencil 200

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

Enter product name: pencil
Enter amount: 210 
Sorry, we do not have enough.
pen 100
pencil 200

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

Enter product name: pencil
Enter amount: -20
Sorry, that is an invalid amount.
pen 100
pencil 200

หมายเหตุ: ในการเขียนฟังก์ชันนั้น ถ้าต้องการให้ฟังก์ชันจบการทำงานและคืนกลับไปทำงานที่โปรแกรมหลักเลย สามารถทำได้โดยใช้คำสั่ง return (สามารถสั่งโดยไม่ต้องตามด้วยค่าที่จะคืน)

ร้านขายของ: รวมเป็นโปรแกรม

ให้นำฟังก์ชันที่เขียนไว้จากข้อก่อน ๆ มารวมเป็นโปรแกรมร้านขายของ ที่มีการทำงานดังนี้

  • เริ่มต้นโดยการแสดงรายการสินค้าที่มี
  • จากนั้นถามผู้ใช้ว่าต้องการจบการทำงานหรือซื้อสินค้า
    • ถ้าผู้ใช้ซื้อสินค้า ให้ทำงานในลักษณะเดียวกับโจทย์ข้างต้น เมื่อซื้อเสร็จให้พิมพ์รายการสินค้าที่เหลือ
    • ถ้าผู้ใช้สั่งให้จบการทำงาน ให้พิมพ์รายการสินค้าที่เหลือ และจบการทำงาน

ให้โปรแกรมเริ่มต้นด้วยสินค้าที่มีตามรายการตัวอย่างด้านบน (ให้ประกาศตัวแปร products, prices, และ counts ตามด้านบนในส่วนของโปรแกรมหลัก)

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

Current stock:
pen 100
pencil 200
ruler 50
cutter 30
ink 50
Buy or Exit (enter B or E): B
Enter product name: pen
Enter amount: 15
You have to pay 75 bath.
pen 85
pencil 200
ruler 50
cutter 30
ink 50
Buy or Exit (enter B or E): B
Enter product name: cutter
Enter amount: 50
Sorry, we do not have enough.
pen 85
pencil 200
ruler 50
cutter 30
ink 50
Buy or Exit (enter B or E): E
At the end:
pen 85
pencil 200
ruler 50
cutter 30
ink 50

(ให้เขียนทั้งโปรแกรม)

โจทย์เกี่ยวกับพหุนาม

การอ่านพหุนาม

ในโจทย์หลายข้อ เราจะอ่านพหุนามจากผู้ใช้ โดยการอ่านจะมีรูปแบบดังนี้

  • ผู้ใช้จะป้อนข้อมูลตัวแรกเป็นจำนวนเต็ม แทนกำลังสูงจุดของตัวแปร ในพหุนามดังกล่าว
  • จากนั้นจะป้อนจำนวนจริงอีก จำนวน แทนสัมประสิทธิ์ของตัวแปร โดยเริ่มจาก , , ไปจนถึง พหุนามที่ผู้ใช้ป้อนคือ

ให้ฟังก์ชันดังกล่าวคืนค่าเป็นรายการของสัมประสิทธิ์ [,,,...,]

ยกตัวอย่างเช่น ถ้าพหุนามเป็น ผู้ใช้ป้อนข้อมูลดังนี้

3
10
3
-1
2

ฟังก์ชันดังกล่าวจะคืนค่าเป็น [10,3,-1,2]

ตัวอย่างของโปรแกรมหลักที่เรียกใช้ฟังก์ชันดังกล่าว

print("Enter polynomial:")
p = read_poly()
print("Coefficients:")
for c in p:
    print(c)

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

Enter polynomial:
3
10
3
-1
2
Coeeficients:
10
3
-1
2

หาค่าพหุนาม

เขียนโปรแกรมรับพหุนาม จากผู้ใช้ จากนั้นรับค่า แล้วคำนวณค่า

ข้อมูลป้อนเข้า

  • ผู้ใช้จะป้อนข้อมูลตัวแรกเป็นจำนวนเต็ม แทนกำลังสูงจุดของตัวแปร ในพหุนามดังกล่าว
  • จากนั้นจะป้อนจำนวนจริงอีก จำนวน แทนสัมประสิทธิ์ของตัวแปร โดยเริ่มจาก , , ไปจนถึง พหุนามที่ผู้ใช้ป้อนคือ
  • สุดท้ายผู้ใช้จะป้อนจำนวนจริง

ให้โปรแกรมตอบค่า เป็นทศนิยม 2 ตำแหน่ง

ตัวอย่างเช่น ถ้าพหุนามเป็น และผู้ใช้ต้องการคำนวณค่า ตัวอย่างการทำงานของโปรแกรมจะเป็นดังนี้

3
10
3
-1
2
3
f(a) = 64.00

หมายเหตุ แนะนำให้ใช้ฟังก์ชัน read_poly ที่เขียนจากข้อที่แล้ว

บวกพหุนาม

เขียนโปรแกรมรับพหุนามสองพหุนาม จากนั้นหาผลบวก แล้วพิมพ์รายการของสัมประสิทธิ์ให้กับผู้ใช้

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

Enter first polynomial:
2
1
2
3
Enter second polynomial:
5
10
-1
0
2
3
4
Result is:
11
1
3
3
4

หาอนุพันธ์ของพหุนาม

สูตรการหาอนุพันธ์ของฟังก์ชันพหุนามคือ ให้เขียนโปรแกรมรับพหุนาม จากนั้นคำนวนหาอนุพันธ์และแสดงกับผู้ใช้

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

Enter polynomial:
3
4
3
2
1
Result:
3
4
3

หมายเหตุ: ตัวอย่างข้างต้นแสดงว่า

คูณพหุนาม (ยากเป็นข้อโบนัส)

เขียนโปรแกรมรับพหุนามสองพหุนาม จากนั้นคำนวณหาผลคูณของพหุนาม แล้วแสดงผล

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

Enter first polynomial:
2
1
2
3
Enter second polynomial:
1
2
1
Result:
2
4
8
3

หมายเหตุ ตัวอย่างข้างต้นคำนวณ