บทท่ี 2 การแกป้ ัญหาและข้ันตอนวธิ ี
นางสาวมัสณา ทรงนาศกึ
ครูกล่มุ สาระการเรียนรวู้ ิทยาศาสตรแ์ ละเทคโนโลยี
การแก้ปญั หา จุดประสงค์การเรียนรู้
และขัน้ ตอนวิธี
1. ระบุข้อมลู ข้อมลู ออก และเงอ่ื นไขของปญั หา
2. ออกแบบขน้ั ตอนวิธใี นการแกป้ ญั หา โดยใชร้ ูปแบบตา่ งๆ
เชน่ การกาหนดเงือ่ นไข และการทาซา้
3. ประยกุ ตใ์ ช้ขน้ั ตอนวธิ ีการจัดเรียงและคน้ หาขอ้ มลู ในการ
แก้ปญั หา
2.1 การแกป้ ัญหาด้วย
คอมพิวเตอร์
2.1 การแก้ปญั หาด้วย การแกป้ ัญหาด้วยคอมพวิ เตอร์
คอมพิวเตอร์ การแก้ปญั หาเปน็ กจิ กรรมพ้นื ฐานในการดารงชวี ติ ของมนษุ ย์
ปญั หาบางปญั หาสามารถหาคาตอบได้ในทนั ที ขณะทบี่ าง
ปญั หาใชเ้ วลานานในการค้นหาคาตอบ อยา่ งไรกต็ ามทุกคน
ต่างต้องการหาวิธีการในการแก้ปัญหาท่ที าใหไ้ ด้คาตอบที่
ถูกตอ้ งในเวลารวดเรว็
➢การแกป้ ญั หาไมจ่ าเปน็ ต้องเป็นปัญหาทาง
2.1 การแกป้ ญั หาด้วย คณิตศาสตร์
คอมพิวเตอร์ ➢การแก้ปญั หาได้ จะต้องเข้าใจถึงปญั หาและความ
ตอ้ งการทชี่ ดั เจน แลว้ จงึ จะสามารถพัฒนาข้ันตอนวิธี
ในการแกป้ ญั หาได้
ส่ิงสาคัญท่นี กั เรยี นต้องพจิ ารณาในการแกป้ ญั หา คือ ขอ้ มลู และเงอ่ื นไขท่ชี ดั เจน
ปญั หาในชวี ิตประจาวนั • การแกป้ ญั หาเป็นกิจกรรมพ้ืนฐานของมนษุ ย์
➢เย็นนจี้ ะกินอะไรดี ?
➢จ่ายเงนิ ไปแล้ว จะได้เงินทอนมาเท่าไร ?
➢จะเดินทางจากบา้ นไปโรงเรียนวิธีใดรวดเรว็ สุด?
➢จะพฒั นาวธิ กี ารแยกขยะในชมุ ชนไดอ้ ย่างไร ?
บางปัญหาอาจแกไ้ ดง้ า่ ย
แต่บางปญั หาอาจมีความซบั ซอ้ น
ตอ้ งใชข้ นั้ ตอนการแกป้ ัญหา
ตวั อย่าง ขณะน้ีเวลาเทย่ี ง นกั เรยี นเหนด็ เหน่อื ยจากการเรียนมา ตง้ั แต่เชา้ จึงต้องการจะสัง่ คอมพิวเตอร์ว่า
สถานการณ์
“เลอื กอาหารกลางวนั ทเ่ี หมาะสมกับฉันให้หน่อย”
คอมพวิ เตอร์สามารถเลอื กให้ได้หรือไม?่
ทาอยา่ งไรคอมพวิ เตอรถ์ ึงจะเลือกอาหารทเ่ี หมาะสมกบั ความตอ้ งการได้?
คอมพวิ เตอร์จะตัดสนิ ใจไดอ้ ย่างไร ?
FoodPanda
กาหนดเงื่อนไข
2.2 การระบุขอ้ มลู เขา้
ข้อมูลออก และ
เง่ือนไขของปัญหา
2.2 การระบุข้อมูลเขา้ ความสัมพันธร์ ะหว่างข้อมลู เขา้ ขอ้ มลู ออก และขนั้ ตอนวิธี
ข้อมูลออก และ
เงอื่ นไขของปัญหา
input Process Output
2.2 การระบขุ ้อมูลเข้า
ข้อมลู ออก และ
เงอื่ นไขของปญั หา
ตู้หยอดไข่ ตู้ขายนา้ อัตโนมตั ิ
ความสัมพันธ์ ความสมั พันธ์ระหว่างข้อมูลเขา้ ข้อมูลออก และขั้นตอนวธิ ี
ต้ขู ายนา้ อัตโนมัติ input Process Output
ขอ้ มูลเข้า ข้อมูลเข้า (input) ขอ้ มูลทน่ี าไปใชส้ าหรับการนา
ข้อมูลออก
ไปดาเนินการในขน้ั ตอนวิธี
ขอ้ มูลออก (output) ข้อมลู ผลลัพธ์ทต่ี อ้ งการ
สถานการณ์ จากคะแนนสอบของนักเรียน 40 คน
16 20 12 18 … 15 ใหน้ ักเรยี นหาค่าเฉล่ีย
หาค่าเฉลี่ย
16 20 12 18
คะแนนเฉลยี่
เท่ากบั 15
คะแนนสอบของ สตู รการหาค่าเฉลี่ย คะแนนสอบเฉลยี่
นกั เรียนทงั้ 40 คน ของนกั เรียน 40 คน
Process
input Output
สถานการณ์ จากคะแนนสอบของนักเรียน 40 คน
16 20 12 18 … 15 ใหน้ กั เรียนหาคา่ สงู สดุ
หาคะแนนสงู สดุ
16 20 12 18
คะแนนสูงสุด
เทา่ กับ 20
คะแนนสอบของ สูตรการหาคา่ สูงสุด คะแนนสอบสูงสุด
นกั เรียนทง้ั 40 คน
Process Output
input
2.3 การทาซา้
การทาซา้ การทาซา้ (Loop) เป็นการนาคาสง่ั มาทางานซ้าหลายๆ
รอบ จะทางานก่รี อบข้ึนอยูก่ ับเง่ือนไขท่ผี เู้ ขียนโปรแกรม
กาหนดไว้ ซ่งึ อาจจะเป็นการกาหนดจานวนรอบทแี่ น่นอน
เชน่ ต้งั ใจว่าจะวิง่ รอบสนาม 3 รอบ คอื รู้แน่นอนว่าจะทางาน
กีร่ อบ หรอื แบบจานวนรอบไมแ่ นน่ อน เชน่ ตงั้ ใจว่าจะว่ิงรอบ
สนามไปเร่อื ยๆ เหนือ่ ยเมื่อไหร่จึงจะหยุดวง่ิ คือไมแ่ นช่ ดั ว่าจะ
ทางานกรี่ อบ
ATM
เกมทายใจ จานวนครั้งทที่ าย
คนที่ 1 คนท่ี 2
ให้นกั เรยี นเขียนตวั เลข1ตวั เลข โดยมีคา่ ระหวา่ ง 0 –100 ไว้ในมอื
จากนั้นใหเ้ พ่ือนทายเลข
กรณี เลขที่เพื่อนทายมากกวา่ ให้พดู วา่ “คา่ มากเกินไป”
กรณี เลขท่ีเพ่ือนทายน้อยกว่าให้พดู วา่ “คา่ นอ้ ยเกินไป”
กรณี เลขทเ่ี พือ่ นทายถกู ตอ้ ง ให้พูดว่า “ทายถูกตอ้ ง”
ใครทายจานวนครงั้ นอ้ ยที่สุด ถอื ว่าเป็นผชู้ นะ
รหัสลาลอง จานวนคร้ังท่ที าย
เกมทายใจ
คนท่ี 1 คนที่ 2
1. ให้ Secret สุ่มจานวนเต็มทีม่ คี า่ ระหว่าง 1 ถงึ 100
2. ทาซา้ ไปเร่อื ยๆ
2.1 ให้ answer จานวนเตม็ ทผ่ี ู้เลน่ ทาย
2.2 ถา้ answer < Secret แล้ว
ใหต้ อบผูเ้ ล่นว่า “คา่ น้อยเกนิ ไป”
เพิ่มจานวนครง้ั ทที่ ายทลี ะ 1
2.3 ถ้า answer > Secret แล้ว
ใหต้ อบผู้เล่นวา่ “คา่ มากเกนิ ไป”
เพ่ิมจานวนครง้ั ทที่ ายทีละ 1
2.2 ถ้า answer = Secret แล้ว
ให้ตอบผเู้ ล่นว่า “ทายถูกแล้ว”
แสดงจานวนครง้ั ท่ีทายท้งั หมด
จบการทางาน
รหัสลาลอง สุ่มเลขที่
ATM
ออกมาหนา้ หอ้ ง
2.4 การจดั เรยี งข้อมลู
การจัดเรยี ง การจดั เรยี งข้อมลู คือวิธกี ารกระทากบั ข้อมลู เพื่อให้ขอ้ มูลถูก
ขอ้ มลู
จัดเก็บอย่างเปน็ ระบบ ส่งผลตอ่ การคน้ หาข้อมลู กระทาได้โดยง่าย
และมีประสทิ ธภิ าพ
เหตุผลทีต่ อ้ งมีการจัดเกบ็ ข้อมูล จดั เรยี ง เน่อื งข้อมลู หากไม่มี
การจดั เกบ็ หรอื จัดเก็บไวอ้ ยา่ งกระจัดกระจาย การค้นหาขอ้ มูลนน้ั
ย่อมกระทาได้ยาก อาจจะเสียเวลาในการค้นหาขอ้ มลู ดังน้ันหากมี
การจัดเกบ็ จัดเรยี งข้อมลู ย่อมเปน็ สง่ิ ทีด่ ี
ทาไมตอ้ ง ทาไมต้องจดั เรียงขอ้ มลู
จดั เรยี งข้อมลู
หาข้อมูลง่าย
ขอ้ มูลมีความสวยงาม
ตรวจสอบขอ้ มลู ได้
จัดเรียงขอ้ มูล
ในชีวิตประจาวนั
รหสั หนงั สอื
กSาeรจleัดcเรtียioงแnบSบoเลrือtก การจดั เรยี งตัวเลขจากนอ้ ยไปหามาก
10 15 2 7 12 9 1
1 2 7 9 10 12 15
กSาeรจleัดcเรtียioงแnบSบoแrทtรก การจดั เรยี งตัวเลขจากนอ้ ยไปหามาก
10 15 2 7 12 9 1
กSาeรจleัดcเรtียioงแnบSบoแrทtรก การจดั เรยี งตัวเลขจากนอ้ ยไปหามาก
10 15 2 7 12 9 1
2.5 การค้นหาขอ้ มลู
การคน้ หาขอ้ มลู การค้นหาข้อมูล การค้นหาข้อมูลท่ีมีประสิทธิภาพน้ัน ข้ึนอยู่กับ
หลักการคน้ หา รวมถงึ ขัน้ ตอนของการค้นหาน้ัน การค้นหาข้อมูลพน้ื ฐาน
มีหลากหลายวิธี เช่น การค้นหาข้อมูลแบบลาดับ การค้นหาข้อมูลแบบ
ทวภิ าค และการคน้ หาข้อมูลแบบแฮชชงิ
การใช้เทคนิคการค้นหาข้อมูลแบบใดต้องดูลักษณะของงาน ซ่ึงจะ
ชว่ ยให้เราสามารถตัดสนิ ใจเลือกเทคนิคการค้นหาข้อมูลที่เหมาะสมได้
การคน้ หาข้อมูลแบบลาดับ การค้นหาข้อมูลแบบลาดบั (Sequential Search)
(Sequential Search)
การหาข้อมูลแบบเป็นลาดบั ข้ันตอน โดยจะค้นหาตัง้ แต่ตัวแรกเรยี งลาดบั ไปที
ละตัวจนกว่าจะพบขอ้ มลู ทีต่ ้องการ หรือเปรียบเทยี บไปจนถงึ ตัวสุดท้าย การ
ค้นหาวิธนี เ้ี ป็นวธิ ีท่งี ่ายทสี่ ดุ อลั กอรทิ ม่ึ ในการคน้ หาไม่ซบั ซอ้ นสามารถใชก้ ับ
ขอ้ มลู ทเี่ รยี งลาดบั แลว้ หรือข้อมูลท่ยี งั ไม่ไดเ้ รียงลาดบั ก็ได้ โดยผลลัพธจ์ ากการ
คน้ หาขอ้ มลู จะมีความเปน็ ไปไดอ้ ยู่ 2 แบบ คือ
1. พบตาแหน่งขอ้ มูลท่ีต้องการภายในลิสต์(Successful Search)
2. ไมพ่ บตาแหนง่ ข้อมลู ที่ตอ้ งการภายในลสิ ต์ (Unsuccessful Search)
การค้นหาข้อมูลแบบลาดับ
(Sequential Search)
การค้นหาข้อมูลแบบทวภิ าค การคน้ หาข้อมลู แบบทวภิ าค (Binary Search)
(Binary Serach)
การค้นหาข้อมูลแบบทวิภาค เหมาะสาหรับค้นหาข้อมลู ที่มกี ารเรยี งลาดับอยู่
แล้ว โดยการคน้ หาแต่ละรอบจะลดขอบเขตการคน้ หาลงทลี ะคร่งึ
การค้นหาขอ้ มูลแบบทวภิ าคมีประสทิ ธภิ าพดีมากและเปน็ แนวคดิ หลักใน
การพฒั นาระบบฐานข้อมูล หลงั พจิ ารณาขอ้ มลู แตล่ ะครง้ั ขอบเขตของดชั นที ่ี
เปน็ ไปไดจ้ ะลดลงประมาณครึ่งหนึ่ง ถ้าขอ้ มลู ในรายการมีจานวน n ตัว จานวน
รอบทตี่ ้องทางานจะเท่ากบั จาานวนครัง้ ในการลดค่าขอบเขตท่เี ปน็ ไปไดจ้ าก n
ทีละครงึ่ จนเหลือค่าเท่ากบั 1 ซึ่งคา่ ดังกล่าวสอดคล้อง กับฟังก์ชนั ลอการทิ ึม
(logarithm) ฐาน 2 ของ n ดังน้ันความซบั ซอ้ นของ ขั้นตอนวิธีการค้นหาแบบ
ทวิภาคจะแปรผันตรงกับ log2 n นั่นคือเรา สามารถเขยี นวา่ การคน้ หาแบบ
ทวภิ าคมีความซบั ซอ้ นเป็น O(log2 n)
การค้นหาข้อมูลแบบทวภิ าค การค้นหาข้อมูลแบบทวภิ าค (Binary Search)
(Binary Serach)
1. กาหนดขอ้ มลู ทตี่ ้องการคน้ หาและทาการเรียงข้อมลู ตามความต้องการ
เรยี งจากมากไปนอ้ ย หรอื จากนอ้ ยไปมากกไ็ ด้
2. ทาการแบ่งขอ้ มลู ออกเป็น 2 สว่ น แลว้ ทาการหาคา่ กลาง
3. เม่อื ทราบแล้ววา่ ค่าของคีย์ฟลิ ดอ์ ยู่คร่งึ แรกหรือครึ่งหลงั แลว้ กจ็ ะนาขอ้ มูล
ในครึง่ ดังกลา่ วทาการหาค่ากลางอีก ทาแบบนีไ้ ปเรื่อย ๆ จนกระท้ังไดข้ อ้ มูล
ท่ีต้องการ หรือจนกระทัง่ ไมส่ ามารถแบง่ ขอ้ มูลไดอ้ ีก
เปรยี บเทียบ
Sequential Search
และ Binary Search
หลกั การเขียนผงั งาน
Flowchart
ผงั งาน (Flowchart) เป็นผังงานรูปภาพท่ีใช้แสดงแนวคิด หรือ
ขั้นตอนการทางานของโปรแกรม และเป็น
เครื่องมือที่ช่วยให้มองเห็นภาพรวมของ
โปรแกรมท่ีทาให้เราเขียนโปรแกรมได้ง่าย
ย่ิงขึ้น เนื่องจากเราสามารถมองเห็นแนวคิด
และทิศทางการทางานของโปรแกรม
สัญลักษณก์ ารเขียนผงั งาน
จุดเริม่ ตน้ / จุดส้ินสดุ แสดงผลออกทางหนา้ จอ
ประมวลผลโปรแกรม จุดเชอื่ มต่อของแผนงาน
รับหรอื แสดงผลโดยไมร่ ะบุ ทศิ ทางของโปรแกรม
อุปกรณ์
จดุ ขึน้ หน้าถัดไป
ตรวจสอบเงอื่ นไข
หลกั การเขียนผงั งาน
1. ผังงาน (Flowchart) จะตอ้ งมีจุดเร่มิ ตน้ และจดุ สนิ้ สดุ เสมอ
2. เลอื กใช้สญั ลกั ษณ์เพือ่ สอ่ื ความหมายให้ถกู ตอ้ ง
3. ใช้ลูกศรเป็นตัวกาหนดทิศทางการทางานของโปรแกรมจากบนลงล่าง จากซ้ายไปขวาโดยเรียง
ตามลาดบั
4. รปู สญั ลักษณ์ทกุ ตัวตอ้ งมลี ูกศรเข้าและออก ยกเว้นจุดเร่มิ ต้นจะมเี ฉพาะออก และจดุ สิ้นสุดจะมี
เฉพาะเข้าเทา่ น้นั
5. ลูกศรทุกตวั จะชี้ออกจากรปู สัญลักษณ์ตวั หนึง่ ไปยังรูปสญั ลกั ษณอ์ กี ตวั หน่งึ เสมอ
6. คาอธิบายภายในรปู สัญลักษณ์ ควรส้ันๆเข้าใจง่าย
7. ไม่ความใช้ลกู ศรช้ไี ปไกลมากเกินไป หากจาเป็นใหใ้ ช้จุดเชือ่ มแทน
การวางแผนไปโรงเรียน เร่ิมต้น
ต่ืนนอน
เร่ิมต้น อาบนา้
ต่ืนนอน ไปโรงเรียน
อาบนา้ สิน้ สดุ
ไปโรงเรียน
สิน้ สดุ
โครงสร้างแบบตา่ งๆสาหรับการเขยี นโปรแกรม
โครงสร้างแบบลาดับ
โครงสร้างแบบทางเลอื ก
โครงสรา้ งแบบทาซ้า
โครงสรา้ งแบบลาดบั คาสัง่ ท่ี 1
คาส่ังท่ี 2
คาสั่งท่ี 3
... คาสง่ั ที่ …
คาสั่งที่ n
เริ่มตน้ รบั คา่ x , y
x,y
z=x+y นาค่าทอ่ี ยู่ใน x และ y มาบวกกัน
Output z แล้วเก็บใน z
สิน้ สุด
แสดงค่าท่เี กบ็ อยู่ใน z
เริ่มต้น แสดงค่าทเ่ี กบ็ ใน x , y
a=2 , b=3
c = a+b นาค่าทีอ่ ยใู่ น a และ b มาบวกกัน
Output c แลว้ เก็บใน c
ส้ินสุด
แสดงค่าทเ่ี กบ็ อยูใ่ น c
โครงสรา้ งแบบทางเลอื ก
คาสัง่ ท่ี 1
จริง เงื่อนไข เทจ็
คาสัง่ ท่ี n คาสัง่ ท่ี n
เรมิ่ ตน้ รบั คา่ score
score
จรงิ ตรวจสอบเงอื่ นไข
score >50 เท็จ ถ้า score มากกวา่ 50
Pass ถา้ จริง ให้แสดงว่า Pass
ไม่ตรงเงอ่ื นไขแสดงว่า Fail
Fail
ส้นิ สดุ
จริง เรม่ิ ต้น รับค่า age
age
age * 2 ตรวจสอบเงือ่ นไข
age age >12 เท็จ ถ้า age มากกวา่ 12
ถ้าจริง ใหแ้ สดงว่า age คูณ 2 แลว้ แสดง
อายุ
ไมต่ รงเง่ือนไขแสดงคา่ age
age
ส้นิ สดุ
เร่มิ ตน้
num
num=1 Check num=3
num C
num=2
AB
สิ้นสุด
โครงสรา้ งแบบทาซ้า คาส่งั ท่ี 1 เทจ็
เงอื่ นไข คาสัง่ ท่ี n
จริง
คาสัง่ ท่ี n
เร่มิ ตน้ ให้สุ่ม 0-9
Put 0-9
จรงิ Put == 0 เท็จ ตรวจสอบเงอ่ื นไข
Very Good Fail put again ถ้า put เทา่ กับ 0
ถา้ จริง ใหแ้ สดงวา่ very good
ไมต่ รงเงื่อนไขแสดง Fail put again
จากน้ันให้สุม่ ตัวเลขใหม่
สิ้นสดุ