1 / 39

Branching and Looping Statements charturong.ee.engr.tu.ac.th/CN208

Branching and Looping Statements charturong.ee.engr.tu.ac.th/CN208. จาตุรงค์ ตันติบัณฑิต ภาควิชาวิศวกรรมไฟฟ้าและคอมพิวเตอร์ มหาวิทยาลัยธรรมศาสตร์. เอกสารประกอบการสอนนี้จัดทำโดย ดร.ทรงยศ นาคอริยกุล. Introduction.

alvis
Download Presentation

Branching and Looping Statements charturong.ee.engr.tu.ac.th/CN208

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Branching and Looping Statementscharturong.ee.engr.tu.ac.th/CN208 จาตุรงค์ ตันติบัณฑิต ภาควิชาวิศวกรรมไฟฟ้าและคอมพิวเตอร์ มหาวิทยาลัยธรรมศาสตร์ เอกสารประกอบการสอนนี้จัดทำโดย ดร.ทรงยศ นาคอริยกุล

  2. Introduction • ในบทนี้ เราจะแนะนำการเขียนโปรแกรมใน MATLAB โดยการใช้คำสั่งที่ควบคุมการลำดับการประมวลผลของคำสั่งใน MATLAB โดยที่แบ่งออกได้เป็น 2 ประเภทใหญ่ๆคือ คำสั่ง branches ที่เลือกบางส่วนของโค้ด (code) ไปประมวลผล และ คำสั่ง loops ประมวลผลโค้ดแบบวนซ้ำ • โดยที่เราจะพูดถึงหัวข้อต่อไปนี้ • การเขียนโปรแกรมโดยใช้ top-down design techniques • การใช้ข้อมูลประเภทตรรกะ (logical data type) • การใช้คำสั่ง branches • การใช้คำสั่ง loops

  3. การเขียนโปรแกรมแบบ top-down design • การเขียนโปรแกรมแบบ top-down design คือการแตกปัญหาใหญ่ที่เราได้รับให้เป็นหัวข้อย่อยๆซึ่งง่ายต่อการแก้ไขและเข้าใจ จากนั้นจึงเขียนโปรแกรมแก้ปัญหาย่อยๆให้สำเร็จและตรวจสอบว่าโปรแกรมเหล่านี้ทำงานได้จริง ในขั้นตอนสุดท้ายจึงนำโปรแกรมย่อยๆเหล่านี้มารวมกันเพื่อแก้ปัญหาใหญ่ที่เราได้รับ • ขั้นตอนในการเขียนโปรแกรมแบบมีประสิทธิผลสามารถทำได้ดังต่อไปนี้ • เข้าใจปัญหาที่จะแก้ไขให้ถูกต้องและชัดเจน • กำหนดตัวอินพุต (input) และตัวเอาท์พุต (output) ของโปรแกรมให้ชัดเจน • ออกแบบการแก้ไขปัญหาให้ละเอียด (design the algorithm) • เปลี่ยนอัลกอริทึมให้เป็นคำสั่งใน MATLAB • ตรวจสอบและแก้ไขโปรแกรม

  4. การเขียนโค้ดเทียม (pseudocode) • ในการออกแบบโปรแกรมแต่ละครั้ง ผู้เขียนโปรแกรมสมควรเขียน pseudocode เพื่อช่วยให้ง่ายต่อการแก้ไขปัญหา pseudocode ที่เขียนจะเป็นคำพูดภาษาอังกฤษผสมกับรูปแบบการใช้ใน MATLAB เช่น เขียนคำสั่งเป็นบรรทัดๆแบบ MATLAB โดยที่คำสั่งเป็นคำพูดภาษาอังกฤษ เป็นต้น • Pseudocode จะช่วยผู้เขียนโปรแกรมในการเรียบเรียงความคิดก่อนที่จะแปลงความคิดเป็นคำสั่งใน MATLAB

  5. ตัวอย่างที่ 1: Temperature Conversion • จงเขียนโปรแกรม MATLAB ที่เปลี่ยนค่าอุณหภูมิในระบบฟาเรนไฮต์เป็นระบบองศาเซลเซียส โดยที่โปรแกรมจะรับค่าอินพุตจากผู้ใช้โปรแกรมเป็นตัวเลขอุณหภูมิในระบบฟาเรนไฮต์ แล้วแสดงผลเป็นอุณหภูมิระบบองศาเซลเซียส ออกบนหน้าจอ

  6. การแก้ไขปัญหา • เราจะแก้ไขปัญหาแบบ 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

  7. 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);

  8. Testing the program • หลังจากเขียนโปรแกรมสำเร็จแล้ว ผู้เขียนโปรแกรมสมควรที่จะต้องตรวจสอบความถูกต้องของโปรแกรมที่เขียนเสมอ โดยทำได้ด้วยการทดลองใส่ค่าอินพุตเพื่อตรวจสอบ

  9. 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

  10. Relational Operators • ค่าโอเปอเรเตอร์สำหรับเปรียบเทียบความสัมพันธ์ระหว่างค่าตัวแปรชนิดสเกลาร์หรือเมทริกซ์ก็ได้ โดยที่ค่าโอเปอเรอเตอร์ที่ใช้มีดังนี้

  11. ตัวอย่างการใช้ relational operators

  12. Logic Operators • โอเปอเรเตอร์ logic เป็นโอเปอเรเตอร์ที่ใช้เชื่อมความสัมพันธ์ระหว่างค่าของตัวแปรที่เกิดขึ้นโดยโอเปอเรเตอร์ relational ถ้าความสัมพันธ์สอดคล้องกันผลลัพธ์ที่ได้ก็จะมีค่าเป็นจริง (true) แต่ถ้าความสัมพันธ์ไม่สอดคล้องกันผลลัพธ์ที่ได้ก็จะมีค่าเป็นเท็จ (false) โอเปอเรเตอร์ logic ที่ใช้ทั่วไปใน MATLAB มีอยู่ 3 แบบ คือ

  13. ผลลัพธ์ของโอเปอเรเตอร์ logic • ยกตัวอย่างเช่น • >> x = (5 > 3) & (2 < 9); • ผลลัพธ์ x จะมีค่าเป็นจริง (true)

  14. Branches • การเขียนคำสั่งทดสอบเงื่อนไขใน MATLAB มีความจำเป็นอย่างมาก เพื่อช่วยในการตัดสินใจที่ซับซ้อน และช่วยให้โปรแกรมตัดสินใจเลือกคำสั่งที่จะกระทำและคำสั่งที่จะไม่กระทำ รูปแบบการใช้ที่น่าสนใจคือ คำสั่ง if และคำสั่ง switch • คำสั่ง if • คำสั่ง if ใช้ทำการทดสอบเงื่อนไขความสัมพันธ์ว่าเป็นจริงหรือเป็นเท็จแล้วจึงกระทำคำสั่งที่อยู่ภายใต้เงื่อนไขนั้น มีรูปแบบการใช้งานดังนี้ • ifexpression • (command 1) • (command 2) • … • end • ถ้าผลการทดสอบเงื่อนไขเป็นจริง โปรแกรมMATLAB จะกระทำคำสั่ง commands ทั้งหมดที่อยู่ระหว่าง if และ end แต่ถ้าผลการทดสอบเป็นเท็จ โปรแกรมจะข้าม(ไม่ประมวลผล) คำสั่งทั้งหมดที่อยู่ระหว่าง if และ end

  15. คำสั่ง 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 จะถูกกระทำ

  16. 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 นั้นอาจจะมีหรือไม่มีก็ได้

  17. ตัวอย่างที่ 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

  18. การแก้ไขปัญหา • เราเริ่มด้วยการเขียน 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)

  19. 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

  20. % 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)]);

  21. คำสั่ง 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 จะมีหรือไม่มีก็ได้

  22. การรวม 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) ก็ได้

  23. ตัวอย่างการใช้คำสั่ง 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

  24. ตัวอย่างคำสั่ง 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

  25. คำสั่งวนลูป • การเขียนโปรแกรมที่ซับซ้อน ในหลายๆครั้งมีความจำเป็นต้องคำนวณชุดคำสั่งบางอย่างซ้ำไปซ้ำมาหลายๆรอบ ซึ่งคำสั่งวนลูปที่สำคัญๆมีอยู่ 2 แบบคือ คำสั่ง for และคำสั่ง while • ข้อแตกต่างที่สำคัญของ 2 คำสั่งนี้คือ คำสั่ง while จะวนซ้ำไปเรื่อยๆไม่มีที่สิ้นสุด จนกว่า การทดสอบเงื่อนไขใน expression จะเป็นเท็จ ในขณะที่ คำสั่ง for จะกำหนดจำนวนรอบการวนซ้ำไว้ชัดเจน

  26. คำสั่ง while • คำสั่ง while จะทำการทดสอบเงื่อนไขใน expression ทุกๆรอบของการวนซ้ำ ถ้าผลการทดสอบใน expression ให้ค่าเป็นจริง โปรแกรมจะกระทำคำสั่งทั้งหมดภายใน while ลูปหนึ่งรอบ แล้วกลับมาตรวจสอบ expression อีกครั้งหนึ่ง และจะทำแบบนี้ต่อไปเรื่อยๆ จนกว่าผลการทดสอบจะเป็นเท็จ แล้วMATLAB จึงจะกระทำคำสั่งหลังจากคำสั่ง end • คำสั่ง while มีรูปแบบการใช้งานดังนี้ • whileexpression • (commands) • end

  27. ตัวอย่างการใช้คำสั่ง 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.')

  28. คำสั่ง 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

  29. ตัวอย่างการใช้คำสั่ง 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);

  30. คำอธิบายตัวอย่างการใช้ 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 จะถูกกระทำเป็นรอบสุดท้าย

  31. ตัวอย่างที่ 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);

  32. คำเตือนในการใช้คำสั่ง 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 เมื่อจบโปรแกรม

  33. คำสั่ง break กับ continue • มีคำสั่ง 2 คำสั่งที่สามารถใช้ควบคุมการวนลูปของคำสั่ง while และ for ได้นั่นก็คือ คำสั่ง breakและ continue • คำสั่ง break หยุดการทำงานของคำสั่งวนลูปใน for หรือ while และสั่งให้ MATLAB กระทำคำสั่งบรรทัดต่อไปจากคำสั่ง end • คำสั่ง continue หยุดการทำงานของคำสั่งวนลูปใน for หรือ while แล้วสั่งให้ MATLAB กลับไปทำคำสั่งในจุดเริ่มต้นของคำสั่งวนลูป

  34. ตัวอย่างการใช้ 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

  35. ตัวอย่างการใช้คำสั่ง 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 ในการวนรอบใหม่และกระทำคำสั่งต่อไปจนจบ

  36. 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

  37. คำสั่ง 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

  38. การใช้คำสั่ง 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');

  39. เมื่อคำสั่งวนลูปตัวใน กำหนดค่าให้ 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

More Related