420 likes | 645 Views
Branching and Looping Statements charturong.ee.engr.tu.ac.th/CN208. จาตุรงค์ ตันติบัณฑิต ภาควิชาวิศวกรรมไฟฟ้าและคอมพิวเตอร์ มหาวิทยาลัยธรรมศาสตร์. เอกสารประกอบการสอนนี้จัดทำโดย ดร.ทรงยศ นาคอริยกุล. Introduction.
E N D
Branching and Looping Statementscharturong.ee.engr.tu.ac.th/CN208 จาตุรงค์ ตันติบัณฑิต ภาควิชาวิศวกรรมไฟฟ้าและคอมพิวเตอร์ มหาวิทยาลัยธรรมศาสตร์ เอกสารประกอบการสอนนี้จัดทำโดย ดร.ทรงยศ นาคอริยกุล
Introduction • ในบทนี้ เราจะแนะนำการเขียนโปรแกรมใน MATLAB โดยการใช้คำสั่งที่ควบคุมการลำดับการประมวลผลของคำสั่งใน MATLAB โดยที่แบ่งออกได้เป็น 2 ประเภทใหญ่ๆคือ คำสั่ง branches ที่เลือกบางส่วนของโค้ด (code) ไปประมวลผล และ คำสั่ง loops ประมวลผลโค้ดแบบวนซ้ำ • โดยที่เราจะพูดถึงหัวข้อต่อไปนี้ • การเขียนโปรแกรมโดยใช้ top-down design techniques • การใช้ข้อมูลประเภทตรรกะ (logical data type) • การใช้คำสั่ง branches • การใช้คำสั่ง loops
การเขียนโปรแกรมแบบ top-down design • การเขียนโปรแกรมแบบ top-down design คือการแตกปัญหาใหญ่ที่เราได้รับให้เป็นหัวข้อย่อยๆซึ่งง่ายต่อการแก้ไขและเข้าใจ จากนั้นจึงเขียนโปรแกรมแก้ปัญหาย่อยๆให้สำเร็จและตรวจสอบว่าโปรแกรมเหล่านี้ทำงานได้จริง ในขั้นตอนสุดท้ายจึงนำโปรแกรมย่อยๆเหล่านี้มารวมกันเพื่อแก้ปัญหาใหญ่ที่เราได้รับ • ขั้นตอนในการเขียนโปรแกรมแบบมีประสิทธิผลสามารถทำได้ดังต่อไปนี้ • เข้าใจปัญหาที่จะแก้ไขให้ถูกต้องและชัดเจน • กำหนดตัวอินพุต (input) และตัวเอาท์พุต (output) ของโปรแกรมให้ชัดเจน • ออกแบบการแก้ไขปัญหาให้ละเอียด (design the algorithm) • เปลี่ยนอัลกอริทึมให้เป็นคำสั่งใน MATLAB • ตรวจสอบและแก้ไขโปรแกรม
การเขียนโค้ดเทียม (pseudocode) • ในการออกแบบโปรแกรมแต่ละครั้ง ผู้เขียนโปรแกรมสมควรเขียน pseudocode เพื่อช่วยให้ง่ายต่อการแก้ไขปัญหา pseudocode ที่เขียนจะเป็นคำพูดภาษาอังกฤษผสมกับรูปแบบการใช้ใน MATLAB เช่น เขียนคำสั่งเป็นบรรทัดๆแบบ MATLAB โดยที่คำสั่งเป็นคำพูดภาษาอังกฤษ เป็นต้น • Pseudocode จะช่วยผู้เขียนโปรแกรมในการเรียบเรียงความคิดก่อนที่จะแปลงความคิดเป็นคำสั่งใน MATLAB
ตัวอย่างที่ 1: Temperature Conversion • จงเขียนโปรแกรม MATLAB ที่เปลี่ยนค่าอุณหภูมิในระบบฟาเรนไฮต์เป็นระบบองศาเซลเซียส โดยที่โปรแกรมจะรับค่าอินพุตจากผู้ใช้โปรแกรมเป็นตัวเลขอุณหภูมิในระบบฟาเรนไฮต์ แล้วแสดงผลเป็นอุณหภูมิระบบองศาเซลเซียส ออกบนหน้าจอ
การแก้ไขปัญหา • เราจะแก้ไขปัญหาแบบ top-down design ดังที่กล่าวไปแล้วในข้างต้น สำหรับตัวอย่างนี้มีขนาดเล็กจึงไม่จำเป็นต้องแตกปัญหาเป็นปัญหาย่อยๆแต่อย่างใด โปรแกรมนี้สรุปได้สั้นๆว่ามีตัวอินพุตเป็นตัวเลขหนึ่งตัวและตัวเอาท์พุตหนึ่งตัว ซึ่งการออกแบบอัลกอริทึมในการแก้ปัญหาก็แสดงได้ด้วยสมการต่อไปนี้ • เราสามารถเขียน pseudocode สำหรับปัญหานี้ได้ดังนี้ • Prompt user to enter temperature in degree Fahrenheit • Read temperature in degrees Fahrenheit (temp_f) • temp_c in Celsius (temp_f – 32) / 1.8 • Write temperature in Celsius
temp_conversion.m • % Script file: temp_conversion • % Programmer: ……………. • % Purpose: to convert an input temperature from degrees Fahrenheit • % to an output temperature in Celsius. • % Define variables: • % temp_f -- Temperature in degrees Fahrenheit • % temp_c -- Temperature in degrees Celsius • % Prompt the user for the input temperature • temp_f = input('Enter the temperature in degrees Fahrenheit:'); • % Convert to Celsius. • temp_c = (temp_f - 32) / 1.8; • % Write out the result. • fprintf('%6.2f degrees Fahrenheit = %6.2f Celsius.\n', temp_f, temp_c);
Testing the program • หลังจากเขียนโปรแกรมสำเร็จแล้ว ผู้เขียนโปรแกรมสมควรที่จะต้องตรวจสอบความถูกต้องของโปรแกรมที่เขียนเสมอ โดยทำได้ด้วยการทดลองใส่ค่าอินพุตเพื่อตรวจสอบ
The Logical Data Type • ชนิดของข้อมูลอีกประเภทหนึ่งใน MATLAB คือ ข้อมูลตรรกะ (logical data type) ที่มีค่าได้ 2 ชนิดคือ จริง (true) หรือ เท็จ (false) โดยมีการเริ่มใช้ใน MATLAB 6.5 เป็นต้นไป ข้อมูลตรรกะสามารถถูกสร้างโดยคำสั่ง 2 ประเภทคือ relational operators กับ logic operators • หากเราต้องการกำหนดค่าตัวแปรให้เป็นประเภท logical ก็ทำได้เช่น • >> a1 = true; • เวลาที่ข้อมูลประเภทตรรกะถูกใช้ผสมกับตัวเลข ข้อมูลประเภทตรรกะจะถูกเปลี่ยนเป็นตัวเลขโดยที่ค่า true คือ 1 และค่า false เป็น 0 ถ้าหากข้อมูลตัวเลขถูกใช้แทนที่ข้อมูลตรรกะ ค่าตัวเลขที่ไม่เท่ากับ 0 จะถูกเปลี่ยนเป็น true และค่า 0 จะถูกเปลี่ยนเป็น false
Relational Operators • ค่าโอเปอเรเตอร์สำหรับเปรียบเทียบความสัมพันธ์ระหว่างค่าตัวแปรชนิดสเกลาร์หรือเมทริกซ์ก็ได้ โดยที่ค่าโอเปอเรอเตอร์ที่ใช้มีดังนี้
ตัวอย่างการใช้ relational operators
Logic Operators • โอเปอเรเตอร์ logic เป็นโอเปอเรเตอร์ที่ใช้เชื่อมความสัมพันธ์ระหว่างค่าของตัวแปรที่เกิดขึ้นโดยโอเปอเรเตอร์ relational ถ้าความสัมพันธ์สอดคล้องกันผลลัพธ์ที่ได้ก็จะมีค่าเป็นจริง (true) แต่ถ้าความสัมพันธ์ไม่สอดคล้องกันผลลัพธ์ที่ได้ก็จะมีค่าเป็นเท็จ (false) โอเปอเรเตอร์ logic ที่ใช้ทั่วไปใน MATLAB มีอยู่ 3 แบบ คือ
ผลลัพธ์ของโอเปอเรเตอร์ logic • ยกตัวอย่างเช่น • >> x = (5 > 3) & (2 < 9); • ผลลัพธ์ x จะมีค่าเป็นจริง (true)
Branches • การเขียนคำสั่งทดสอบเงื่อนไขใน MATLAB มีความจำเป็นอย่างมาก เพื่อช่วยในการตัดสินใจที่ซับซ้อน และช่วยให้โปรแกรมตัดสินใจเลือกคำสั่งที่จะกระทำและคำสั่งที่จะไม่กระทำ รูปแบบการใช้ที่น่าสนใจคือ คำสั่ง if และคำสั่ง switch • คำสั่ง if • คำสั่ง if ใช้ทำการทดสอบเงื่อนไขความสัมพันธ์ว่าเป็นจริงหรือเป็นเท็จแล้วจึงกระทำคำสั่งที่อยู่ภายใต้เงื่อนไขนั้น มีรูปแบบการใช้งานดังนี้ • ifexpression • (command 1) • (command 2) • … • end • ถ้าผลการทดสอบเงื่อนไขเป็นจริง โปรแกรมMATLAB จะกระทำคำสั่ง commands ทั้งหมดที่อยู่ระหว่าง if และ end แต่ถ้าผลการทดสอบเป็นเท็จ โปรแกรมจะข้าม(ไม่ประมวลผล) คำสั่งทั้งหมดที่อยู่ระหว่าง if และ end
คำสั่ง if กับ else • คำสั่ง if ยังมีรูปแบบการใช้งานในการตัดสินใจที่ซับซ้อน โดยมีรูปแบบการใช้งานร่วมกับ else ดังนี้ • ifexpression • (commands evaluated if expression is true) • else • (commands evaluated if expression is false) • end • ถ้าผลการทดสอบเงื่อนไขใน expression เป็นจริง MATLAB จะกระทำคำสั่ง commands ทั้งหมด(ซึ่งอาจจะมีมากกว่า 1 คำสั่ง) ที่อยู่ระหว่าง if กับ else แต่ถ้าหากผลการทดสอบexpressionเป็นเท็จ คำสั่ง commands ทั้งหมดที่อยู่ระหว่าง else กับ end จะถูกกระทำ
elseif • หากในการตัดสินใจมีหลายเงื่อนไขและซับซ้อนมากขึ้น คำสั่ง if มีการใช้ร่วมกับคำสั่ง elseif ได้ดังนี้ • ifexpression_1 • (commands_1 evaluated if expression_1 is true) • elseifexpression_2 • (commands_2 evaluated if expression_2 is true) • elseifexpression_3 • (commands_3 evaluated if expression_3 is true) else • (commands evaluated if no other expression is true) • end • ซึ่งหากผลการทดสอบเงื่อนไขใน expression_1 เป็นจริง คำสั่ง commands_1 ทั้งหมด (ซึ่งอาจจะมีมากกว่า 1 คำสั่ง) จะถูกกระทำและจะข้ามคำสั่งที่เหลือทั้งหมดไปจนถึง end แต่ถ้าexpression_1 เป็นเท็จ expression_2จะถูกตรวจสอบเป็นลำดับต่อไปเรื่อยๆ • ข้อควรจำ:คำสั่ง else ตัวสุดท้ายและ commands ที่เกี่ยวกับ else นั้นอาจจะมีหรือไม่มีก็ได้
ตัวอย่างที่ 2: function of two variables • จงเขียนโปรแกรม MATLAB เพื่อช่วยคำนวณค่าของฟังก์ชั่น f(x,y) โดยกำหนดให้ผู้ใช้เป็นผู้กำหนดค่า x และ y แล้วแสดงผล f(x,y) ออกบนหน้าจอฟังก์ชั่น f(x,y) มีดังค่าต่อไปนี้ • f(x,y) = x + y, x >= 0 and y >= 0 • x + y2, x >= 0 and y < 0 • x2 + y, x < 0 and y >= 0 • x2 + y2, x < 0 and y < 0
การแก้ไขปัญหา • เราเริ่มด้วยการเขียน pseudocode สำหรับปัญหาข้อนี้ • Prompt the user for the values x and y • Read x and y • if x >= 0 and y >= 0 • func x + y • elseif x >= 0 and y < 0 • func x + y^2 • elseifx < 0 and y >= 0 • func x^2 + y • else • func x^2 + y^2 • end • Write out f(x,y)
func_xy.m • % Script file: func_xy.m • % Programmer: ................... • % Purpose: This program solves the function f(x,y) for a user- • % specified x and y, where f(x, y) is defined as: • % f(x,y) = x + y, x >= 0 and y >= 0 • % x + y2, x >= 0 and y < 0 • % x2 + y, x < 0 and y >= 0 • % x2 + y2, x < 0 and y < 0 • % • % Define variables: • % x -- first independent variable • % y -- second independent variable • % func -- resulting function
% Prompt the user for the values x and y • x = input('Enter the x coefficient: '); • y = input('Enter the y coefficient: '); • % Calculate the function f(x,y) • if x >= 0 & y >= 0 • func = x + y; • elseif x >= 0 & y < 0 • func = x + y^2; • elseif x < 0 & y >= 0 • func = x^2 + y; • else • func = x^2 + y^2; • end • %Write the value of the function • disp (['The value of the function is', num2str(func)]);
คำสั่ง switch • คำสั่ง switch เป็นคำสั่งประเภท branching อีกแบบหนึ่งที่ให้ผู้เขียนโปรแกรมเลือกใช้ รูปแบบของคำสั่ง switch มีดังนี้ • switchswitch_var • casecase_expression_1 • (commands_1) • casecase_expression_2 • (commands_2) • otherwise • (commands_3) • end • ถ้าค่าของ switch_varเท่ากับcase_expression_1คำสั่ง commands_1 ทั้งหมด (ซึ่งอาจมีมากกว่า 1 คำสั่ง)จะถูกกระทำแล้วโปรแกรมจะข้ามคำสั่งที่เหลือทั้งหมดไปจนถึง end แต่ถ้า switch_varเท่ากับ case_expression_2 commands_2 ทั้งหมดจะถูกกระทำแทนแบบนี้ต่อไปเรื่อยๆ ถ้าทุก case เป็นเท็จ คำสั่งใน otherwise จะถูกใช้ • ข้อควรจำ:คำสั่ง otherwise จะมีหรือไม่มีก็ได้
การรวม case ใน switch • ถ้า case บาง case ให้ผลลัพธ์ของคำสั่งเดียวกัน เราสามารถรวม case เหล่านี้เข้าด้วยกันได้ ซึ่งทำได้โดยการรวมไว้ในเครื่องหมายปีกกา (brackets) โดยใช้รูปแบบดังนี้ • switchswitch_var • case {case_expression_1, case_expression_2} • (commands_1) • case {case_expression_3, case_expression_4} • (commands_2) • otherwise • (commands_3) • end • โดยที่ switch_var สามารถเป็นตัวเลข (double) หรือตัวอักษร (character string) ก็ได้
ตัวอย่างการใช้คำสั่ง switch • หากเราต้องการแสดงผลบนหน้าจอว่าตัวเลขที่ผู้ใช้เลือกระหว่าง 1 ถึง 10 เป็นเลขคู่หรือเลขคี่ก็สามารถใช้คำสั่ง switch ได้ดังนี้ • value = input('Choose a integer between 1 and 10: '); • switch value • case {1, 3, 5, 7, 9} • disp('The number is odd.'); • case {2, 4, 6, 8, 10} • disp('The number is even.'); • otherwise • disp('The number is out of range.'); • end
ตัวอย่างคำสั่ง switch กับตัวแปร char • คำสั่ง switch สามารถใช้เปรียบเทียบตัวแปรประเภทตัวอักษร (character string) โดยเช่น • การแปลงค่าตัวแปร x จากเซนติมิเตอร์เป็นระบบอื่นเช่น เป็นนิ้ว ฟุต หรือ เมตร • x = 2.7; • units = 'm' ; • switch units • case {'inch' , 'in' } • y = x/2.54; • case {'feet' , 'ft' } • y = x/2.54/12; • case {'meter' , 'm' } • y = x/100; • otherwise • disp(['Unknown Units: ', units]) • y = nan; • end • หลังจาก run โปรแกรมนี้แล้ว ผลลัพธ์ที่ได้คือ y = 0.027
คำสั่งวนลูป • การเขียนโปรแกรมที่ซับซ้อน ในหลายๆครั้งมีความจำเป็นต้องคำนวณชุดคำสั่งบางอย่างซ้ำไปซ้ำมาหลายๆรอบ ซึ่งคำสั่งวนลูปที่สำคัญๆมีอยู่ 2 แบบคือ คำสั่ง for และคำสั่ง while • ข้อแตกต่างที่สำคัญของ 2 คำสั่งนี้คือ คำสั่ง while จะวนซ้ำไปเรื่อยๆไม่มีที่สิ้นสุด จนกว่า การทดสอบเงื่อนไขใน expression จะเป็นเท็จ ในขณะที่ คำสั่ง for จะกำหนดจำนวนรอบการวนซ้ำไว้ชัดเจน
คำสั่ง while • คำสั่ง while จะทำการทดสอบเงื่อนไขใน expression ทุกๆรอบของการวนซ้ำ ถ้าผลการทดสอบใน expression ให้ค่าเป็นจริง โปรแกรมจะกระทำคำสั่งทั้งหมดภายใน while ลูปหนึ่งรอบ แล้วกลับมาตรวจสอบ expression อีกครั้งหนึ่ง และจะทำแบบนี้ต่อไปเรื่อยๆ จนกว่าผลการทดสอบจะเป็นเท็จ แล้วMATLAB จึงจะกระทำคำสั่งหลังจากคำสั่ง end • คำสั่ง while มีรูปแบบการใช้งานดังนี้ • whileexpression • (commands) • end
ตัวอย่างการใช้คำสั่ง while • ในตัวอย่างนี้จะแสดงการใช้ while loop ในการถามผู้ใช้โปรแกรมให้ตอบคำถามทางคณิตศาสตร์ และจะไม่ออกจากโปรแกรมจนกว่าผู้ใช้โปรแกรมจะตอบถูก • sum = input('What is five plus ten?:'); • while (sum ~= 15) • disp('Nope! Your answer is incorrect.'); • sum = input('What is five plus ten?:'); • end • disp('Great! You are smart.')
คำสั่ง for • คำสั่ง for จะกระทำคำสั่งทั้งหมด (ซึ่งอาจจะมีมากกว่า 1 คำสั่ง) ที่อยู่ระหว่าง expression กับ end ในจำนวนรอบที่คงที่ ที่กำหนดไว้ใน expression โดยมีรูปแบบการใช้งานดังนี้ • for index = array • (commands) • end • ตัวแปร index คือ ตัวแปรของลูป (loop variable) และ arrayคือ อาเรย์ที่เป็นตัวควบคุมจำนวนลูป (loop control expression) แต่ละคอลัมน์ใน array จะถูกกำหนดให้กับตัวแปร index ในแต่ละรอบในการวนลูป คำสั่ง commands ทั้งหมดจะถูกกระทำในแต่ละจำนวนรอบของการวนลูป โดยส่วนมากแล้ว array จะเป็นเวกเตอร์และมีแบบฟอร์มคือ first:incr:last
ตัวอย่างการใช้คำสั่ง for • sum = 0; • for ii = 1:10 • sum = sum + ii; • fprintf('sum = %6.2f.\n', sum); • end • fprintf('The value of ii is now %d.\n', ii);
คำอธิบายตัวอย่างการใช้ for • ในตอนเริ่มต้นของคำสั่ง for โปรแกรม MATLAB สร้าง array ซึ่งเป็น row vector มีค่าจาก 1 ถึง 10 • ในครั้งที่ 1 ของการวนลูป ตัวแปร ii มีค่าเป็น 1 ซึ่งเป็นค่าเลขตัวแรกใน array และคำสั่งทั้งหมดระหว่าง คำสั่ง for กับ end จะถูกกระทำ ผลลัพธ์คือค่าของตัวแปร sum =sum + ii หรือ 0 + 1 ซึ่งก็คือ 1 • เมื่อคำสั่ง fprintf ถูกกระทำ โปรแกรมจะเจอกับคำสั่ง end ดังนั้นโปรแกรมจะวนกลับไปยังจุดเริ่มต้นของคำสั่ง for และกำหนดค่าตัวเลขตัวต่อไปใน array ให้กับตัวแปร ii ซึ่งก็คือเลข 2 เพราะฉะนั้นในการวนลูปครั้งนี้ ii = 2 และค่าของตัวแปร sum = sum + ii = 1 + 2 หรือ 3 • โปรแกรม MATLAB จะทำคำสั่งในข้อ 3 ไปเรื่อยๆ จนกระทั่งตัวเลขตัวสุดท้ายใน array ถูกกำหนดให้กับตัวแปร ii และคำสั่ง commands ระหว่าง for กับ end จะถูกกระทำเป็นรอบสุดท้าย
ตัวอย่างที่ 2 ของการใช้คำสั่ง for • sum = 0; • for ii = 1:2:9 • sum = sum + 1; • fprintf('sum = %6.2f.\n', sum); • end • fprintf('The value of ii is now %d.\n', ii);
คำเตือนในการใช้คำสั่ง for • หลีกเลี่ยงการกำหนดค่าใหม่ให้กับตัวแปร index โดยใช้คำสั่ง commands ภายในคำสั่ง for ลูป • การกำหนดค่าใหม่ให้กับตัวแปร index ภายในคำสั่ง for ไม่สามารถทำให้คำสั่งวนลูป for จบเร็วขึ้นได้ และอาจทำให้เกิดข้อผิดพลาดหรือ bug ได้ง่าย ยกตัวอย่างเช่น • sum = 0; • for ii = 1:10 • ii = 5; • sum = sum + ii; • fprintf('sum = %6.2f.\n', sum); • end • fprintf('The value of ii is now %d.\n', ii); • ในตัวอย่างนี้ คำสั่ง for จะวนลูปเป็นจำนวน 10 รอบและค่า sum จะมีค่าเป็น 50 เมื่อจบโปรแกรม
คำสั่ง break กับ continue • มีคำสั่ง 2 คำสั่งที่สามารถใช้ควบคุมการวนลูปของคำสั่ง while และ for ได้นั่นก็คือ คำสั่ง breakและ continue • คำสั่ง break หยุดการทำงานของคำสั่งวนลูปใน for หรือ while และสั่งให้ MATLAB กระทำคำสั่งบรรทัดต่อไปจากคำสั่ง end • คำสั่ง continue หยุดการทำงานของคำสั่งวนลูปใน for หรือ while แล้วสั่งให้ MATLAB กลับไปทำคำสั่งในจุดเริ่มต้นของคำสั่งวนลูป
ตัวอย่างการใช้ break • for ii = 1:5 • if ii == 3 • break; • end • fprintf('ii = %d\n', ii); • end • disp(['End of loop!']); • เวลาที่ m-file นี้ถูก run ผลลัพธ์ที่จะได้บนหน้าจอคือ • ii = 1 • ii = 2 • End of loop! • นั่นเพราะเมื่อ ii เท่ากับ 3 เงื่อนไขทดสอบใน if จะเป็นจริงแล้วคำสั่ง break จะถูกกระทำ ซึ่งทำให้ข้ามคำสั่งทั้งหมดในคำสั่ง for ลูป แล้วไปกระทำคำสั่งหลังจาก end
ตัวอย่างการใช้คำสั่ง continue • for ii = 1:5 • if ii == 3 • continue; • end • fprintf('ii = %d\n', ii); • end • disp(['End of loop!']); • เวลาที่ m-file นี้ถูก run ผลลัพธ์ที่จะได้บนหน้าจอคือ • ii = 1 • ii = 2 • ii = 4 • ii = 5 • End of loop! • นั่นคือเมื่อ ii เท่ากับ 3 เงื่อนไขทดสอบใน if จะเป็นจริงแล้วคำสั่ง continue จะถูกกระทำ ซึ่งทำให้ข้ามคำสั่งทั้งหมดในรอบลูปนั้น ไปยังคำสั่ง for ใหม่ แล้ว ii จะมีค่าเป็น 4 ในการวนรอบใหม่และกระทำคำสั่งต่อไปจนจบ
Nested Loops • ในบางกรณี อาจมีการเขียนคำสั่งวนลูปภายในของอีกคำสั่งวนลูป ซึ่งทั้ง 2 ลูปนั้นเรียกว่า nested loops โดยตัวอย่างต่อไปนี้เป็น คำสั่ง for ลูปภายในอีกคำสั่ง for ลูป (two nested for loops) สำหรับหาผลคูณของจำนวนเต็มของจำนวน • for ii = 1:3 • for jj = 1:3 • product = ii * jj; • fprintf('%d * %d = %d\n', ii, jj, product); • end • end
คำสั่ง for ตัวนอก(ตัวแรก) จะกำหนดค่า 1 ให้กับตัวแปร ii จากนั้นคำสั่ง for ตัวใน(ตัวที่สอง) จะถูกกระทำ 3 ครั้งโดยที่ตัวแปร jj จะมีค่า 1, 2, และ 3 ซึ่งหลังจากจบการกระทำ for ลูปตัวในแล้ว คำสั่ง for ตัวนอกจะกำหนดค่าตัวแปร ii เป็น 2 แล้ว เริ่มทำคำสั่ง for ตัวในใหม่อีกครั้งแบบนี้ ไปจนกระทั่งคำสั่ง for ตัวนอก ได้กำหนดค่าให้กับตัวแปร ii จนครบ 3 ครั้ง • ผลลัพธ์ที่ได้จากโปรแกรมข้างต้นคือ • 1 * 1 = 1 • 1 * 2 = 2 • 1 * 3 = 3 • 2 * 1 = 2 • 2 * 2 = 4 • 2 * 3 = 6 • 3 * 1 = 3 • 3 * 2 = 6 • 3 * 3 = 9
การใช้คำสั่ง break หรือ continue ใน nested loops • ถ้าคำสั่ง break หรือ continue ปรากฎอยู่ภายในคำสั่งวนลูปตัวใน คำสั่ง break หรือ continue นั้นจะมีผลต่อคำสั่งวนลูปตัวในเท่านั้น ยกตัวอย่างเช่น • for ii = 1:3 • for jj = 1:3 • if jj == 3 • break; • end • product = ii * jj; • fprintf('%d * %d = %d\n', ii, jj, product); • end • fprintf('End of inner loop\n'); • end • fprintf('End of outerloop\n');
เมื่อคำสั่งวนลูปตัวใน กำหนดค่าให้ jj เป็น 3 คำสั่ง break จะถูกกระทำซึ่งทำให้โปรแกรมหยุดการกระทำคำสั่งลูปตัวใน และพิมพ์แสดงผล End of inner loop จากนั้นโปรแกรมก็จะกลับไปที่คำสั่งวนลูปตัวนอก และเพิ่มค่า ii อีก 1 และกระทำคำสั่งวนลูปตัวในอีกครั้ง ผลลัพธ์ที่ได้คือ • 1 * 1 = 1 • 1 * 2 = 2 • End of inner loop • 2 * 1 = 2 • 2 * 2 = 4 • End of inner loop • 3 * 1 = 3 • 3 * 2 = 6 • End of inner loop • End of outer loop