การทำงานแบบเลือกทำ
ภาควิชาวิศวกรรมคอมพิวเตอร์
จุฬาลงกรณ์มหาวิทยาลัย
๒๕๖๒

ผังงาน (Flowchart)

ผังงานสามแบบ: แบบลำดับ เลือกทำ และวงวน
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
3

ผังงาน : บรรยายขั้นตอนการทำงาน

ผังงานคำนวณ BMI พร้อมคำอธิบายรับข้อมูลจากแป้นพิมพ์และแสดงผลทางจอภาพ
Program
weight = float(input()) height = float(input()) hm = height / 100 bmi = weight / (hm**2) print( bmi )
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
4

ผังงานและคำสั่ง : if -  else

ผังงาน if-else: เงื่อนไขเป็น false ไปทางซ้าย true ไปทางขวา
if เงื่อนไข :
do this if true
else :
do this if false
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
5
ผังงาน BMI เต็มรูปแบบ ตรวจ weight/height ที่ไม่ถูกต้อง แล้วแยกเป็น Underweight, Normal, Overweight
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
6

การเขียนคำสั่ง if -  else

ผังงานที่มี if ซ้อนกัน a < 9, b > 10 และ a < b ตัวอย่างคำสั่ง if-else พร้อมลูกศรชี้ว่าบรรทัด if และ else ต้องมีเครื่องหมาย :
ต้องมี
เครื่องหมาย
:
คำสั่งในกลุ่มเดียวกันต้องเยื้อง
เข้าไปทางขวา ให้ตรงกัน
if a < 9 :
a += 5
b = a * c / 2
else :
a -= 1
b = a + b
✔
กลุ่ม if กับ else ไม่ตรงกันก็ได้
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
7

นิพจน์บูลลีน: กำหนดเงื่อนไข

•ได้ผลเป็น True หรือ False
•ใช้เครื่องหมาย < > <= >= != == เพื่อ
เปรียบเทียบว่า < > ≤ ≥ ≠ เท่ากัน
•เชื่อมการเปรียบเทียบได้ด้วย and or
•กลับผลการเปรียบเทียบได้ด้วย not
•ถ้ามีทั้ง and or not จะทำ not ก่อน แล้ว and แล้ว or
if m == 4 or m == 6 or m == 9 or m == 11 : print('ลงท้ายด้วย "ยน"')
if not(m == 2 or m == 4 or \ m == 6 or m == 9 or m == 11) : print('ลงท้ายด้วย "คม"')
if m != 2 and m != 4 and \ m != 6 and m != 9 and m != 11 : print('ลงท้ายด้วย "คม"')
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
8

ตัวอย่าง

if x % 2 == 0 : # ถ้า x เป็นจำนวนคู่
if 1 <= m <= 12: # ถ้า m มีค่าตั้งแต่ 1 ถึง 12
if y % 400 == 0: # ถ้า y หารด้วย 400 ลงตัว
if student_id[-2:] == "21": # ถ้าเป็นนิสิตวิศวฯ
if tel_no[:2] == "02": # ถ้าเป็นโทรศัพท์ใน กทม
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
9

แบบฝึกหัด: หมายเลขโทรศัพท์เคลื่อนที่

tel_no เป็นหมายเลขโทรศัพท์เคลื่อนที่ เมื่อมี
- 10 หลัก และ
- ขึ้นต้นด้วยเลข 06, 08 หรือ 09
(ไม่ต้องตรวจหลักอื่นว่าเป็นตัวเลข
ถ้าตรวจจะยาวเกินไป ค่อยทำในภายหลัง)
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
10

ตัวอย่าง

ผังงาน BMI ระบายสีให้ตรงกับ if/else แต่ละชั้นในโปรแกรม
weight = float(input()) height = float(input()) if weight <= 0 or \ height <= 0 : print("Error") else : hm = height / 100 bmi = weight / hm**2 if bmi < 18.5 : print("Underweight") else : if bmi < 25 : print("Normal") else: print("Overweight")
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
11

การเปรียบเทียบลิสต์กับลิสต์

•เปรียบเทียบทีละตัวจากซ้ายไปขวา
[10, 2] > [9, 9, 9]
เป็นจริง
[10, 2] > [10, 1, 9]
เป็นจริง
[10, 2] > [10]
เป็นจริง
[10] > []
เป็นจริง
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
12

การเปรียบเทียบสตริงกับสตริง

•อักษรอังกฤษตัวเล็กมีค่ามากกว่าตัวใหญ่
•ตัวอักษรมีค่าน้อยไปมากตามลำดับ A ถึง Z
"A" < "Z"
เป็นจริง
"A" < "B" < "Z" < "a" < "b" < "z"
เป็นจริง
•สตริงตัวเลขมีค่าน้อยไปมากตามลำดับ 0 ถึง 9
"0" < "1" < "2" < "3" < "4" < "9"
เป็นจริง
•เปรียบเทียบสตริงจะเปรียบเทียบทีละตัวจากซ้ายไปขวา
"ABC" < "aA"
เป็นจริง
"ABC" < "ACAA"
เป็นจริง
"ABC" < "ABCC"
เป็นจริง
"100" < "19"
เป็นจริง
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
13

ตัวอย่าง

if "a" <= x <= "z" or \ "A" <= x <= "Z" : # ถ้า x เป็นตัวอักษรอังกฤษ
if "0" <= x <= "9" : # ถ้า x เป็นตัวเลข
# ถ้าเกิดหลัง 31 ก.ย. 2540, birth_date = [y,m,d] if birth_date > [2540,9,31] :
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
14

แบบฝึกหัด: เลขใหญ่เล็ก

โปรแกรมรับอักขระสามตัว ตรวจว่า ตัวซ้าย
ตัวกลาง และตัวขวา เป็น ตัวเลข ตัวอังกฤษใหญ่
และ ตัวอังกฤษเล็ก ตามลำดับ หรือไม่
ตาราง Input/Output: 9Ab→Yes, 0Xj→Yes, 123→No, 1X→No
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
15

if a in b : a อยู่ใน b ?

•ถ้า a กับ b เป็นสตริง
–a in b หาว่า a เป็นสตริงย่อยของ b หรือไม่
–"python" in "I love python" เป็นจริง
–"python" in "I love Python" เป็นเท็จ
•ถ้า b เป็นลิสต์
–a in b หาว่า a เป็นสมาชิกในลิสต์ b หรือไม่
–6 in [2,4,6,8,10] เป็นจริง
–"Bones" in ["Kirk", "McCoy", "Spock"] เป็นเท็จ
•if not (a in b) : # ถ้า a ไม่อยู่ใน b
•if a not in b : # ถ้า a ไม่อยู่ใน b
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
16

ตัวอย่าง

# ให้ x เป็นสตริงที่เก็บตัวอักษรตัวเดียว
# ทดสอบว่า x เก็บตัวอักษรที่เป็นสระ
if x=="a" or x=="e" or x=="i" or \ x=="o" or x=="u" or x=="A" or \ x=="E" or x=="I" or x=="O" or x=="U" :
if x in "aeiouAEIOU" :
if x in ["a","e","i","o","u", "A","E","I","O","U"] :
ยาวมาก
ถ้า x เก็บ "ei"
ก็เป็นจริง
แบบนี้ชัวร์สุด
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
17

แบบฝึกหัด: ตรวจรหัสที่รับมาว่าถูกต้องหรือไม่ ?

01 02 20 21 22 23 24 25 26 27 28 29 30 31
สถาบันภาษาไทยสิรินธร ศูนย์การศึกษาทั่วไป บัณฑิตวิทยาลัย คณะวิศวกรรมศาสตร์ คณะอักษรศาสตร์ คณะวิทยาศาสตร์ คณะรัฐศาสตร์ คณะสถาปัตยกรรมศาสตร์ คณะพาณิชยศาสตร์ และการบัญชี คณะครุศาสตร์ คณะนิเทศศาสตร์ คณะเศรษฐศาสตร์ คณะแพทยศาสตร์ คณะสัตวแพทยศาสตร์
32 33 34 35 36 37 38 39 40 51 53 55 58
คณะทันตแพทยศาสตร์ คณะเภสัชศาสตร์ คณะนิติศาสตร์ คณะศิลปกรรมศาสตร์ คณะพยาบาลศาสตร์ คณะสหเวชศาสตร์ คณะจิตวิทยา คณะวิทยาศาสตร์การกีฬา สำนักวิชาทรัพยากร การเกษตร วิทยาลัยประชากรศาสตร์ วิทยาลัยวิทยาศาสตร์ สาธารณสุข สถาบันภาษา สถาบันบัณฑิตบริหารธุรกิจ ศศินทร์ฯ
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
18

รูปแบบคำสั่งกรณี จริงถึงทำ / เท็จถึงทำ

รูปแบบ if-else ที่ใช้ pass ในสาขาหนึ่ง และรูปแบบย่อที่เทียบเท่า
pass เป็นคำสั่งที่บอกว่าไม่ต้องทำอะไร ผ่านไปเลย
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
19

ตัวอย่าง: ปีนี้มีกี่วัน

•ให้ y เก็บเลขปี ค.ศ.
เดือนกุมภาพันธ์มี 29 วัน ก็เมื่อ
– y หารด้วย 400 ลงตัว หรือ
– y หารด้วย 4 ลงตัว แต่ต้องหารด้วย 100 ไม่ลงตัว
– เช่น ปี 2004, 2000, (ปี 2100 ไม่เงื่อนไข)
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
20

ตัวอย่าง: ซื้อ 2 แถม 1

p1 = float(input()) p2 = float(input()) p3 = float(input()) min_p = p1 if p2 < min_p: min_p = p2 if p3 < min_p: min_p = p3 total_p = p1 + p2 + p3 print("Total:", total_p) print("Get on free:", min_p) print("Pay only:", total_p – min_p)
รับข้อมูล
หาค่าน้อยสุด
แสดงผล
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
21

แบบฝึกหัด: คะแนนยิมนาสติก

คะแนนของกรรมการ 4 คน ตัดคะแนนที่ต่ำสุดและสูงสุดออก
แล้วนำคะแนนของสองคนที่เหลือมาหาค่าเฉลี่ย
Input
Output
9.15 9.20 9.30 9.50
ลูกศรชี้ไปทางขวา
9.25
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
22

if – else – if – else - … if – else

if w == 0 : print("เสาร์") else : if w == 1 : print("อาทิตย์") else : if w == 2 : print("จันทร์") else : if w == 3 : print("อังคาร") else : if w == 4 : print("พุธ") else : if w == 5 : print("พฤหัสบดี") else : print("ศุกร์")
ผังงานตรวจ w = 0 ถึง 5 แล้วแสดงชื่อวัน
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
23

if – else – if – else → if – elif – else

if w == 0 : print("เสาร์") else : if w == 1 : print("อาทิตย์") else : if w == 2 : print("จันทร์") else : if w == 3 : print("อังคาร") else : if w == 4 : print("พุธ") else : if w == 5 : print("พฤหัสบดี") else : print("ศุกร์")
☹
if w == 0 : print("เสาร์") elif w == 1 : print("อาทิตย์") elif w == 2 : print("จันทร์") elif w == 3 : print("อังคาร") elif w == 4 : print("พุธ") elif w == 5 : print("พฤหัสบดี") else : print("ศุกร์")
☺
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
24

แบบฝึกหัด: ตัดเกรด

ผังงานตัดเกรด: s≥80 A, s≥70 B, s≥60 C, s≥50 D มิฉะนั้น F
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
25