บทที่ 9 การทำซ้ำ (Loop)
จุดประสงค์การเรียนรู้ เข้าใจการทำงานแบบวนซ้ำ เข้าใจการทำงานแบบวนซ้ำและมีเงื่อนไข สามารถเขียนผังงานแบบมีการทำงานวนซ้ำได้ สามารถเขียนผังงานแบบมีการวนซ้ำและมีเงื่อนไขได้
หัวข้อเรื่อง การทำซ้ำคืออะไร รูปแบบของการทำซ้ำ ผังงานแบบการทำซ้ำ ตัวอย่าง
การทำซ้ำคืออะไร การทำซ้ำ หรือ Loop คือการทำงานแบบวนซ้ำ เช่น เครื่องเล่นเพลง MP3 หากเราเรียกใช้ฟังก์ชั่นเล่นเพลงซ้ำซึ่งอาจเลือกเฉพาะเพลงหรือเลือกเล่นซ้ำ ทั้งหมดก็ได้ เมื่อเราเลือกการใช้งานดังกล่าว เปรียบได้กับเราเรียกใช้ฟังก์ชั่น Loop จะทำให้เล่นเพลงซ้ำรอบใหม่หลังจากที่เล่นเพลงสุดท้าย หรือเล่นซ้ำเพลง เดิม ส่วนในการเขียนโปรแกรม Loop จะเป็นการทำขั้นตอนต่างๆ ซ้ำตามที่ ผู้เขียนโปรแกรมต้องการ
รูปแบบของการทำซ้ำ การทำซ้ำแบบจำนวนรอบที่แน่นอน เป็นการทำซ้ำที่มีการกำหนดรอบไว้ชัดเจน เช่นการคัดลายมือจำนวน 10 คำ การทำซ้ำแบบจำนวนรอบไม่แน่นอน เป็นการทำซ้ำแบบมีเงื่อนไข ซึ่งรูปแบบนี้จะกำหนดรอบในการทำซ้ำตายตัวไม่ได้ โปรแกรมจะทำการทำซ้ำจนกว่าเงื่อนไขจะไม่เป็นจริง เช่น การวิ่งรอบสนามจนกว่าจะเหนื่อย การทำซ้ำแบบไม่รู้จบ เป็นการทำซ้ำไปเรื่อย ๆ แบบไม่รู้จบ เช่น โลกหมุนรอบตัวเอง
ผังงานแบบการทำซ้ำ เป็นรูปแบบที่มีการกระทำกระบวนการหนึ่งหลายครั้ง โดยมีเงื่อนไขในการควบคุม การทำซ้ำเป็นหลักการที่ทำความเข้าใจยากกว่า 2 รูปแบบแรก คือ 1) การทำงานตามลำดับ (sequence) และ 2) การทำงานแบบมีเงื่อนไข (conditional statement หรือ if…else) ที่ได้ศึกษาผ่านมา
ตัวอย่างผังงานการทำซ้ำ ในวิชา Exercise for health จะต้อง วิ่งรอบสวนนันทนาการเป็นจำนวน 5 รอบ จึงจะสามารถหยุดวิ่งได้ เริ่มต้น รอบ = 0 วิ่งเพิ่ม 1 รอบ รอบ >= 5 เท็จ จริง สิ้นสุด
2, 4, 90, 52 ตัวอย่างที่ 1 ผลรวม จากตัวเลขต่อไปนี้ จงแสดงวิธีคิดผลรวม โดยใช้วิธีการทำซ้ำและเก็บค่าผลบวกในตัวแปร sum โดยกำหนดให้ค่า sum เริ่มต้นมีค่าเท่ากับ 0 และ กำหนดให้ตัวแปร count เป็นตัวแปรสำหรับนับรอบการทำงาน
รอบที่ 1 2 4 90 52 sum = sum + 2 sum = 0 + 2 sum = 2
รอบที่ 2 2 4 90 52 sum = sum + 4 sum = 2 + 4 sum = 6
รอบที่ 3 2 4 90 52 sum = sum + 90 sum = 6 + 90 sum = 96
รอบที่ 4 2 4 90 52 sum = sum + 52 sum = 96 + 52 sum = 148
2, 4, 90, 52 ดังนั้น ผลรวมของ มีค่าเท่ากับ 148 โดยทำการบวกซ้ำทั้งหมด 4 รอบ
เริ่มต้น sum = 0, count = 1 sum=0, count=1 รับค่า num รับค่า num=2 sum = sum + num count = count + 1 count<=4 จริง 1<=4 เท็จ แสดงค่า sum count=1+1 สิ้นสุด
เริ่มต้น sum = 0, count = 1 sum=0, count=1 รับค่า num รับค่า num=4 sum = sum + num count = count + 1 count<=4 จริง 2<=4 เท็จ แสดงค่า sum count=2+1 สิ้นสุด
เริ่มต้น sum = 0, count = 1 sum=0, count=1 รับค่า num รับค่า num=90 sum = sum + num count = count + 1 count<=4 จริง 3<=4 เท็จ แสดงค่า sum count=3+1 สิ้นสุด
เริ่มต้น sum = 0, count = 1 sum=0, count=1 รับค่า num รับค่า num=52 sum = sum + num count = count + 1 count<=4 จริง 4<=4 เท็จ แสดงค่า sum แสดงค่า 148 สิ้นสุด
ตัวอย่างที่ 2 แสดงเฉพาะเลขคู่ จงแสดงผลเลขคู่ที่อยู่ในช่วง 1-10 โดยกำหนดให้ตัวแปร N เป็นตัวแปรสำหรับการนับจำนวนรอบการทำงาน และ มีค่าเริ่มต้นเท่ากับ 1 และตัวแปร n จะเพิ่มขึ้น 1 เมื่อผ่านทุก ๆ 1 รอบ
แสดงผล N = 1 N = 1 เลขคู่ เลขคี่ เลขคี่ แสดงผล N = N+1 N = N+1
2 N = 2 N = 2 เลขคู่ เลขคู่ เลขคี่ แสดงผล แสดงผล N = N+1 N = N+1
แสดงผล N = 3 N = 3 2 เลขคู่ เลขคี่ เลขคี่ แสดงผล N = N+1 N = N+1
2 4 N = 4 N = 4 เลขคู่ เลขคู่ เลขคี่ แสดงผล แสดงผล N = N+1 N = N+1
แสดงผล N = 5 N = 5 2 4 เลขคู่ เลขคี่ เลขคี่ แสดงผล N = N+1 N = N+1
2 4 6 N = 6 N = 6 เลขคู่ เลขคู่ เลขคี่ แสดงผล แสดงผล N = N+1 N = N+1
แสดงผล N = 7 N = 7 2 4 เลขคู่ เลขคี่ เลขคี่ 6 แสดงผล N = N+1 N = N+1
2 4 6 8 N = 8 N = 8 เลขคู่ เลขคู่ เลขคี่ แสดงผล แสดงผล N = N+1 N = N+1
แสดงผล N = 9 N = 9 2 4 เลขคู่ เลขคี่ เลขคี่ 6 แสดงผล 8 N = N+1 N = N+1
2 4 6 8 10 N = 10 N = 10 เลขคู่ เลขคู่ เลขคี่ แสดงผล แสดงผล N = N+1
1-10 ดังนั้น เลขคู่ที่อยู่ในช่วง คือ 2, 4, 6, 8, 10 และทำการวนซ้ำจำนวน 10 รอบ
เริ่มต้น N = 1 N = 1 N%2=0 1%2 = 0 แสดงค่า N N = N+1 N<=10 จริง แสดงค่า N เท็จ N = N+1 จริง N<=10 1 <= 10 เท็จ สิ้นสุด N = 1+1
เริ่มต้น N = 1 N = 1 N%2=0 2%2 = 0 แสดงค่า N N = N+1 แสดงค่า 2 จริง แสดงค่า N เท็จ N = N+1 แสดงค่า 2 จริง N<=10 2 <= 10 เท็จ สิ้นสุด N = 2+1
เริ่มต้น N = 1 N = 1 N%2=0 3%2 = 0 แสดงค่า N N = N+1 N<=10 จริง แสดงค่า N เท็จ N = N+1 จริง N<=10 3 <= 10 เท็จ สิ้นสุด N = 3+1
เริ่มต้น N = 1 N = 1 N%2=0 4%2 = 0 แสดงค่า N N = N+1 แสดงค่า 4 จริง แสดงค่า N เท็จ N = N+1 แสดงค่า 4 จริง N<=10 4 <= 10 เท็จ สิ้นสุด N = 4+1
เริ่มต้น N = 1 N = 1 N%2=0 5%2 = 0 แสดงค่า N N = N+1 N<=10 จริง แสดงค่า N เท็จ N = N+1 จริง N<=10 5 <= 10 เท็จ สิ้นสุด N = 5+1
เริ่มต้น N = 1 N = 1 N%2=0 6%2 = 0 แสดงค่า N N = N+1 แสดงค่า 6 จริง แสดงค่า N เท็จ N = N+1 แสดงค่า 6 จริง N<=10 6 <= 10 เท็จ สิ้นสุด N = 6+1
เริ่มต้น N = 1 N = 1 N%2=0 7%2 = 0 แสดงค่า N N = N+1 N<=10 จริง แสดงค่า N เท็จ N = N+1 จริง N<=10 7 <= 10 เท็จ สิ้นสุด N = 7+1
เริ่มต้น N = 1 N = 1 N%2=0 8%2 = 0 แสดงค่า N N = N+1 แสดงค่า 8 จริง แสดงค่า N เท็จ N = N+1 แสดงค่า 8 จริง N<=10 8 <= 10 เท็จ สิ้นสุด N = 8+1
เริ่มต้น N = 1 N = 1 N%2=0 9%2 = 0 แสดงค่า N N = N+1 N<=10 จริง แสดงค่า N เท็จ N = N+1 จริง N<=10 9 <= 10 เท็จ สิ้นสุด N = 9+1
เริ่มต้น N = 1 N = 1 N%2=0 10%2 = 0 แสดงค่า N N = N+1 แสดงค่า 10 จริง แสดงค่า N เท็จ N = N+1 แสดงค่า 10 จริง N<=10 10 <= 10 เท็จ สิ้นสุด N = 10+1
เริ่มต้น N = 1 N = 1 N%2=0 11%2 = 0 แสดงค่า N N = N+1 N<=10 จริง แสดงค่า N เท็จ N = N+1 จริง N<=10 11 <= 10 เท็จ สิ้นสุด
1-10 ดังนั้น เลขคู่ที่อยู่ในช่วง คือ 2, 4, 6, 8, 10 และทำการวนซ้ำจำนวน 11 รอบ
แนะนำบล็อคคำสั่งการวนซ้ำ วนซ้ำโดยระบุจำนวนรอบแน่ชัด วนซ้ำตลอด จนกว่าผู้ใช้จะกดปุ่ม วนซ้ำ ถ้าเงื่อนไขเป็นเท็จ เมื่อเงื่อนไขเป็นจริง จะออกจากการวนซ้ำ
ตัวอย่าง Scratch ที่ 1 กำหนดให้ผู้ใช้สามารถป้อนตัวเลขเข้าโปรแกรมได้ 10 จำนวน โปรแกรมทำหน้าที่แสดงจำนวนจัวเลขคู่ทั้งหมดที่ผู้ใช้ป้อนเข้ามา ตัวอย่าง ผู้ใช้ป้อนตัวเลข 1, 0, 9, 12, 23, 10, 3, 8, 99, 11
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
“มีจำนวนคู่ทั้งหมด” + count เริ่มต้น round = 1 , count = 0 number เท็จ number%2=0 จริง round = round+1 count = count+1 จริง round ≤ 10 เท็จ “มีจำนวนคู่ทั้งหมด” + count สิ้นสุด
ชมตัวอย่างได้ที่ https://scratch.mit.edu/projects/132147193/
ตัวอย่าง Scratch ที่ 2 กำหนดให้ผู้ใช้ป้อนตัวเลข N ตัวอย่าง ผู้ใช้ป้อน 5 และป้อน 0, 9, 10, 2, 5 ผลลัพธ์ที่แสดงคือ 26
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
เริ่มต้น n round = n , count = 1 , sum = 0 number count = count + 1 sum = sum + number จริง count < round เท็จ “ผลบวกคือ” sum สิ้นสุด
ชมตัวอย่างได้ที่ https://scratch.mit.edu/projects/111933616/
แหล่งอ้างอิง https://scratch.mit.edu