https://drive.google.com/file/d/1GLbTTGfa2oLBckButZd9ZIblrjnJU30f/view?usp=sharing 8.1. จุดประสงค์รายสัปดาห์
8.2. Boolean
ข้อมูลประเภทนี้มีได้สองค่าคือ ประพจน์ (proposition)
เพรดิเคต (predicate)
predicate นิยมเขียนพร้อม quantifier และ variable (ตัวแปร) เช่น \(\forall x P(x)\)
8.2.1. 1. การประกาศp = True q = False r = len('พอล') > len('Paul') x = -3 s = x**2 > 4 8.2.2. 2. ตัวดำเนินการ
ตัวอย่างการใช้งาน x, y = 1, 2 p = x**2 < y q = x**2 <= y**0.5 r = x**2 + 3*x == y s = len('พอล') >= len('Paul') t = len('พอล'*4) > 3*len('Paul') u = (x**2 + 3*x + 2) != y การตรวจสอบช่วงค่า p = 0 < x < 5 q = -10 < x <= 10 8.2.3. Boolean Expression (Bool_Ex)
8.2.4. การเชื่อม Bool_Ex: and, or, notp = 0 < x and x < 5 q = -10 < x and x <= 10 r = p or q s = not (p and q) or r 8.3. DecisionDecision Control Structure
8.3.1. ระบบแจ้งเตือนอุณหภูมิ 1โปรแกรมแสดงข้อความแจ้งเตือนเมื่ออุณหภูมิเกินพิกัด
Algorithm
Implementation t = float(input('กรอกอุณภูมิ: ')) if t > 50: print('ร้อนเกินไป') 8.4. ระบบแจ้งเตือนอุณภูมิ 1 (One-way)flowchart-01 คำสั่งภาษา Python t = float(input('กรอกอุณภูมิ: ')) if t > 50: print('ร้อนเกินไป') 8.5. Flowchart ระบบแจ้งเตือนอุณภูมิ 1bflowchart-01b คำสั่งภาษา Python t = float(input('กรอกอุณภูมิ: ')) if t > 50: print('ร้อนเกินไป') else: print('อุณหภูมิปกติ') 8.6. ระบบแจ้งเตือนอุณหภูมิ 2 (Two-way)โปรแกรมแสดงข้อความแจ้งเตือนเมื่ออุณหภูมิเกินพิกัดและต่ำกว่าพิกัด
8.6.1. ระบบแจ้งเตือนอุณหภูมิ 2aflowchart-02 คำสั่งภาษา Python t = float(input('กรอกอุณหภูมิ: ')) if t > 30: print('ร้อนเกินไป') if t < 10: print('เย็นเกินไป') 8.6.2. ระบบแจ้งเตือนอุณหภูมิ 2bflowchart-02b คำสั่งภาษา Python t = float(input('กรอกอุณหภูมิ: ')) if t > 30: print('ร้อนเกินไป') else: print('เย็นเกินไป') 8.7. Note: รูปแบบคำสั่ง if
8.8. หารากของสมการกำลังสองรากของสมการกำลังสองที่อยู่ในรูปแบบ \(f(x) = ax^2 + bx + c\) โดยที่ \(a, b, c\) เป็นค่าคงที่ นั้นสามารถหารากของสมการที่เป็นจำนวนจริงได้ก็ต่อเมื่อ \(b^2 - 4ac \ge 0\) โจทย์ จงเขียนโปรแกรมเพื่อหารากของสมการ \(f(x) = ax^2 + bx + c\) Algorithm
\(r_1 = \frac{-b + r}{2a}\) \(r_2 = \frac{-b - r}{2a}\) Implementation a = float(input('a: ')) b = float(input('b: ')) c = float(input('c: ')) r = b**2 - 4*a*c r1 = (-b + r) / (2 * a) r2 = (-b - r) / (2 * a) print( r1, r2 ) เขียนเป็นฟังก์ชัน def solve(a, b, c): r = b**2 - 4*a*c r1 = (-b + r) / (2 * a) r2 = (-b - r) / (2 * a) print( r1, r2 ) Testing solve(1,0,-4) solve(-3,1,1) solve(2,-12,7) 8.9. Input Errorsolve(1, 1, 2) solve(1, 2, 3) 8.10. Two-way เพื่อการตรวจสอบ 1def solve(a, b, c): r = b**2 - 4*a*c if r >= 0: r1 = (-b + r) / (2 * a) r2 = (-b - r) / (2 * a) print( r1, r2 ) else: print( 'ไม่มีรากของสมการในระบบจำนวนจริง' ) 8.10.1. Mutually Exclusive - if/else
8.11. Two-way เพื่อการตรวจสอบ 2def solve(a, b, c): r = b**2 - 4*a*c if r < 0: print( 'ไม่มีรากของสมการในระบบจำนวนจริง' ) else: r1 = (-b + r) / (2 * a) r2 = (-b - r) / (2 * a) print( r1, r2 ) 8.12. Multi-way Decisionถ้าทดสอบโดยเรียกใช้ การตรวจสอบว่าสมการใดมีรากของสมการเดียวในกรณี \(r = 0\) เราสามารถเพิ่ม เงื่อนไขของฟังก์ชัน เป็น 3 ทางได้ดังนี้ 8.12.1. Multi-way 1def solve(a, b, c): r = b**2 - 4*a*c if r < 0: print( 'ไม่มีรากของสมการในระบบจำนวนจริง' ) elif r == 0: r1 = (-b + r) / (2 * a) print( 'สมการมีรากเดียวคือ ', r1 ) else: r1 = (-b + r) / (2 * a) r2 = (-b - r) / (2 * a) print( 'สมการมีสองรากคือ ', r1, r2 ) 8.12.2. Multi-way 2 ด้วยวิธี nested
def solve(a, b, c): r = b**2 - 4*a*c if r < 0: print( 'ไม่มีรากของสมการในระบบจำนวนจริง' ) else: if r == 0: r1 = (-b + r) / (2 * a) print( 'สมการมีรากเดียวคือ ', r1 ) else: r1 = (-b + r) / (2 * a) r2 = (-b - r) / (2 * a) print( 'สมการมีสองรากคือ ', r1, r2 ) 8.13. Multi-way Decisionif Bool_Ex1: statements elif Bool_Ex2: statements elif Bool_Ex3: statements elif Bool_Ex4: statements else: statements Note
8.14. SA - แปลงคะแนนเป็น เกรดโจทย์ จงเขียนโปรแกรมเพื่อแปลงคะแนน
ตัวอย่างข้อมูลนำเข้า-ส่งออก
8.14.1. Solution - SASolution 1 score = float(input('คะแนน: ')) if score < 50: print('F') elif score < 60: print('D') elif score < 70: print('C') elif score < 80: print('B') else: print('A') Solution 2 score = float(input('คะแนน: ')) if 0 < score < 50: print('F') elif 50 <= score < 60: print('D') elif 60 <= score < 70: print('C') elif 70 <= score < 80: print('B') else: print('A') 8.15. EX1001 - Grraderrโจทย์ จงเขียนโปรแกรมเพื่อแปลงไฟล์คะแนนดิบให้เป็นเกรดของแต่ละรายวิชา ตัวอย่างข้อมูลนำเข้า 0,50,60,70,80,100 5 6111440005,19,22.5,9.2,13 6111440001,20,23.0,9.5,14 6111440003,18,25.0,8.5,13 6111440002,15,22.0,10,12 6111440004,20,27.0,9,15 ตัวอย่างข้อมูลส่งออก 6111440005,C 6111440001,C 6111440003,C 6111440002,D 6111440004,B 8.16. EX1002 - GPASโจทย์ จงเขียนโปรแกรมเพื่อหาเกรดเฉลี่ยรวมจากเกรดที่เป็นตัวอักษร F, D, D+, C, C+, B, B+, A โดยตารางการเทียบเกรดเป็นดังนี้ F = 0 D = 1 D+ = 1.5 C = 2 C+ = 2.5 B = 3 B+ = 3.5 A = 4 หมายเหตุ: จำนวนหน่วยกิตทุกวิชาเท่ากัน ตัวอย่างข้อมูลนำเข้า ตัวอย่างข้อมูลส่งออก ตัวอย่างการคำนวณ
ผลรวมคือ \(\frac{3+2+1.5+3.5+4}{5} = \frac{14.0}{5} = 2.8\) 8.17. EX1003 - GRADEWALKโจทย์ เอเคเป็นอาจารย์วิชาหนึ่งซึ่งต้องการประกาศเกรด แต่ต้องการให้นักศึกษาหาใช้เชาว์ปัญญาในการหาเกรดของตัวเอง วันประกาศเกรด นักศึกษาแต่ละคนจะได้ไฟล์ที่
เช่น W,3 \(\to\) หมายถึง ก้าวขึ้นไปด้านบน 3 บรรทัด D,4 \(\to\) หมายถึง ก้าวไปทางขวา 4 ตัวอักษร หมายเหตุ r และ c เริ่มนับที่ 0 ตัวอย่างข้อมูลนำเข้า 5,20 AAAAABBBBBCCCCCFFFFF DDDDDDACBCCDDFFFAAAB FFFFFFCCCBAAAACCFFFD AACCCDDDBBBFFFFDDDFC BBBCDDBBCAAAFDCBAAFC 4,6 W,3 D,4 ตัวอย่างข้อมูลส่งออก ลำดับการค้นหา
AAAAABBBBBCCCCCFFFFF DDDDDDACBCCDDFFFAAAB FFFFFFCCCBAAAACCFFFD AACCCDDDBBBFFFFDDDFC BBBCDD_BCAAAFDCBAAFC
AAAAABBBBBCCCCCFFFFF DDDDDD_CBCCDDFFFAAAB FFFFFFCCCBAAAACCFFFD AACCCDDDBBBFFFFDDDFC BBBCDDBBCAAAFDCBAAFC
AAAAABBBBBCCCCCFFFFF DDDDDDACBC_DDFFFAAAB FFFFFFCCCBAAAACCFFFD AACCCDDDBBBFFFFDDDFC BBBCDDBBCAAAFDCBAAFC
8.18. Exception Handling
ในโปรแกรมหาแก้สมการ \(ax^2 + bx + c = 0\)
เราใช้คำสั่ง โดยปกติแล้วโปรแกรมทั่วไปจะใช้ decision structures เพื่อเขียนเงื่อนไขป้องกันข้อผิดพลาดทุกกรณีที่จะเป็นไปได้ Note ฟังก์ชันส่วนใหญ่สำหรับการค้นหาจะส่งค่าพิเศษออกมาเมื่อเกิดข้อผิดพลาดหรือค้นไม่พบ เช่น -1 sentence = 'Anna is a pretty princess.' sentence.find('pretty') sentence.find('lady') Try/Except โปรแกรมต้องตรวจสอบหลายกรณี โปรแกรมจะมีหลายเงื่อนไข ทำความเข้าใจได้ยาก ภาษาโปรแกรมใหม่ๆ จะมีรูปแบบคำสั่งที่ช่วยลดจำนวนเงื่อนไขในการเขียนเพื่อรองรับข้อผิดพลาด try: <body> except XError: <handler> ไม่ต้องใช้เงื่อนไขตรวจทุกขั้นตอน import math try: a,b,c=int(input("a")),int(input("b")),int(input("c")) r = math.sqrt(b * b - 4 * a * c) r1 = (-b + r) / (2 * a) r2 = (-b - r) / (2 * a) print('r1 = ', r1) print('r2 = ', r2) except ValueError: print('No real roots') รูปและการทำงาน try: try-statements except ErrorType: except-statements
8.19. SA - วิเคราะห์ Max of Three
Algorithm
Solution 1 def max3(x1, x2, x3): if x1 >= x2 >= x3: print(x1) elif x2 >= x1 >= x3: print(x2) else print(x3)
Solution 2 def max3(x1, x2, x3): if x1 >= x2 and x1 >= x3: print(x1) elif x2 >= x1 and x2 >= x3: print(x2) else print(x3)
Solution 3 def max3(x1, x2, x3): if x1 >= x2: if x1 >= x3: print(x1) else: print(x3) else: if x2 >= x3: print(x2) else: print(x3)
Solution 4 > sentinel maxval = x1 if x2 > maxval: maxval = x2 if x3 > maxval: maxval = x3 print( maxval ) Solution 5 > builtin function maxval = max(x1, x2, x3) print( maxval ) 8.20. ข้อคิด - lesson learnt
8.21. EX1004 - STATUSโจทย์ จงเขียนโปรแกรมเพื่อแจ้งเตือนสถานะนักศึกษาจากไฟล์รวมเกรดนักศึกษา สถานะนักศึกษาคิดจาก เกรดเฉลี่ย และ จำนวนหน่วยกิต ดังนี้
รูปแบบข้อมูล ตัวเลขระบุจำนวนรายวิชา (n) n บรรทัดที่เหลือจะมีข้อมูลผลการเรียนระบุจำนวนหน่วยกิต (c) และเกรดที่ได้ (g) โดยที่ c และ g คั่นด้วย , หมายเหตุ โดยตารางการเทียบเกรดเป็นดังนี้ F = 0 D = 1 D+ = 1.5 C = 2 C+ = 2.5 B = 3 B+ = 3.5 A = 4 ตัวอย่างข้อมูลนำเข้า 14 3,B 3,B 3,B 3,B 2,C+ 1,D 3,B 3,A 2,B+ 3,A 3,B 2,A 3,B+ 3,A ตัวอย่างข้อมูลส่งออก |