8. การทำซ้ำ หรือ การวนลูป (for-while)

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

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

8.1 การวนลูปด้วย for

รูปแบบของคำสั่ง for มีดังนี้

for  start:step:end
       …code…
end

*หมายเหตุ ถ้าหากค่า step เท่ากับ 1 เราสามารถละไว้ โดยไม่เขียนได้ กลายเป็น start:end
ตัวอย่างเช่น

1. ให้เขียนโปรแกรมแสดงตัวเลข 1 ถึง 20


รูปภาพข้างต้นนั้น ด้านซ้ายมือ คือ flow chart ส่วนด้านขวามือ คือ โค้ดโปรแกรมที่ได้จากการเขียนตาม flow chart

บรรทัดแรก clc;clear;
เป็นการเคลียร์ข้อมูล ซึ่งจะใส่หรือไม่ใส่ก็ได้ แต่โดยปกติผมจะใส่ไว้ในโปรแกรมเสมอ

ส่วนบรรทัดที่ 2-4 นั้นเป็นรูปแบบของ for-loop ซึ่งถ้าหากดูใน flow chart จะเห็นว่า m=1 คือค่าเริ่มต้น
ดังนั้น m=1 จึงถูกนำมาเขียนไว้ในตำแหน่ง “start”

ส่วนคำสั่ง m = m+1 ถ้าดูตามสมการนี้ก็คือ m จะมีค่าเพิ่มขึ้นทีละ 1 ทุกครั้งที่ทำซ้ำ ซึ่งกระบวนการนี้ตรงกับคำว่า “step” ซึ่งหมายความว่า ขั้นตอนการเปลี่ยนแปลงของค่า start จนถึง end เป็นอย่างไร และถ้ากลับไปดูที่หัวข้อการสร้างอาเรย์แบบใช้ตัวช่วย เราจะเห็นว่า colon ( : ) ใช้ในการสร้างอาเรย์ 1 มิติ ดังนั้นหากเราเอาโค้ด

>> m = 1:1:20;

ไปรันใน command window ก็จะเห็นว่า m มีค่าเริ่มต้นที่ 1 และเพิ่มทีละ 1 จนถึง 20 ดังนั้นรูปแบบการสร้างอาเรย์ 1 มิติแบบนี้ จึงถูกนำมาใช้เป็นเงื่อนไขของ for-loop เพราะให้ความหมายตรงกับเงื่อนไขของ for-loop

8.2 การวนลูปด้วย while

รูปแบบของ while มีดังนี้

while(cond)
     …code…
end

การวนลูปของ while จะต่างจาก for ตรงที่ ค่า start, step, end จะไม่ถูกระบุไว้ในฟอร์มรูปแบบของการวนลูป ซึ้งคำว่า “ไม่ระบุ” ไม่ได้หมายความว่าจำเป็นต้องเขียนเอาไว้ที่อื่น แต่หมายความว่า “มีหรือไม่มีก็ได้”

ดังนั้นข้อแตกต่างที่ชัดเจนระหว่าง for และ while คือ for-loop ใช้สำหรับการวนลูปที่มีจุดเริ่มต้นและจุดสิ้นสุดที่แน่นอน เช่นการวนลูปเพื่ออ่านค่าในอาเรย์ ส่วน while-loop นั้นเป็นการวนลูปแบบไม่มีจุดเริ่มต้น และไม่มีจุดสิ้นสุดที่แน่นอน ดังนั้น while-loop จึงถูกนำมาใช้สำหรับการทำซ้ำที่ไม่รู้จำนวนรอบที่แน่นอน เช่น วนลูปรับค่าจาก user ไปเรื่อยๆ จนกว่า user จะป้อนคำว่า “stop”

วิธีการหยุดการทำงานของ loop หรือ การออกจาก loop มีอยู่ 2 วิธีคือ

1. เงื่อนไขของ loop กลายเป็นเท็จ

2. ใช้คำสั่ง break

ซึ่งทั้ง 2 วิธีนี้ใช้ได้ทั้ง for-loop และ while-loop

ในตัวอย่างต่อไปนี้ เราจะใช้ while-loop เพื่อเขียนโปรแกรมเดียวกันกับ for-loop ก่อนหน้านี้




จบหัวข้อที่ 8

ความเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การแก้สมการ Differential ด้วย MATLAB

การหาค่าเฉลี่ยโดยไม่ต้องเก็บค่า

ว่าด้วยเรื่องของ ERROR