คำสั่งวนซ้ำ
เนื้อหา ทบทวนการไหลของโปรแกรม โปรแกรมที่ทำงานแบบวนซ้ำ ลูปแบบ while ลูปแบบ do..while
การไหลของโปรแกรมแบบต่าง ๆ โปรแกรมอย่างง่าย มีการไหลจากบนลงล่าง Statement1 Statement2 Statementn END START Statement3 START END Statement โปรแกรมที่มีคำสั่งเดียว โปรแกรมที่มีหลายคำสั่ง
การไหลของโปรแกรมแบบต่าง ๆ โปรแกรมแบบมีเงื่อนไข START END Statement condition true false START END Statementf condition true false Statementt คำสั่ง if คำสั่ง if..else
การวนซ้ำ กิจกรรมหลายอย่างมีลักษณะการทำงานแบบซ้ำไปมา ตัวอย่างในชีวิตประจำวัน ก้าวไปข้างหน้า 10 ก้าว ขยี้ผ้าจนกว่าจะสะอาด เรียนวิชาคอมพิวเตอร์จนกว่าจะผ่าน ตัวอย่างในการเขียนโปรแกรม วนรับตัวเลขมา 10 ตัวเพื่อหาค่าเฉลี่ย
โปรแกรมแบบวนซ้ำดียังไง? เพื่อหลีกเลี่ยงการเขียนโค้ดแบบเดียวกันซ้ำหลายรอบ ได้โปรแกรมที่สั้นและกระชับขึ้น โปรแกรมจะมีความยืดหยุ่นมากกว่า เช่นรับข้อมูลได้หลากหลายขนาด โดยไม่ต้องแก้โปรแกรม ลองนึกถึงโปรแกรมที่หาผลรวมของตัวเลข 3 ตัว
ตัวอย่าง: หาผลรวมของตัวเลข 3 ตัว เกิดโจทย์เปลี่ยนเป็นหาผลรวมของเลข 100 ตัว? หรือกี่ตัวก็ได้จนกว่าผู้ใช้จะป้อนเลขลบ using System; class Summing { static void Main() { int n, sum = 0; Console.Write("Enter a value: "); n = int.Parse(Console.ReadLine()); sum = sum + n; Console.WriteLine("The sum is {0}.", sum); } 1st number 2nd number 3rd number
หาผลรวมตัวเลข: โฟลว์ชาร์ต START Let sum = 0 and i = 1 i num false true Read a value, n Increment sum by n Increment i by 1 Print sum on screen END
ลูปแบบ while ทำ statement ตราบเท่าที่ condition เป็นจริง ทำ stmt1,…,stmtN ตราบเท่าที่ condition เป็นจริง START while (condition) statement; condition false true Statement while (condition) { stmt1; stmt2; : stmtN; } END
หาผลรวมตัวเลข: โปรแกรม using System; class Summing { static void Main() { int i, n, sum = 0, num; Console.Write("How many values do you have: "); num = int.Parse(Console.ReadLine()); i = 1; while (i <= num) { Console.Write("Enter a value: "); n = int.Parse(Console.ReadLine()); sum = sum + n; i = i + 1; } Console.WriteLine("The sum is {0}.", sum);
ลับสมอง เขียนโฟลว์ชาร์ตและโปรแกรมภาษา C# เพื่อคำนวณค่า sum โดยที่ sum นิยามจากสูตร โดยที่ค่า N รับมาจากผู้ใช้ เช่นถ้า N = 3, sum = 1+4+9 = 14 ตัวอย่างผลลัพธ์ using System; class Sum { static void Main() { int sum = 0, i = 1, N; Console.Write("Enter N: "); N = int.Parse(Console.ReadLine()); while ( i <= N ) { sum = sum + i*i; i = i+1; } Console.WriteLine("The sum is {0}.", sum); ??? ??? Enter N: 3 The sum is 14
ลูปแบบดักค่า ที่ผ่านมาเป็นตัวอย่างของลูปวนนับ (counter loop) จำนวนครั้งที่วนซ้ำขึ้นอยู่กับค่าที่กำหนดไว้แล้ว ทำอย่างไรหากเราไม่ทราบจำนวนล่วงหน้า ใช้ลูปแบบดักค่า (sentinel loop) นิยามค่าที่ใช้ดัก เพื่อให้โปรแกรมหลุดออกจากลูป ตัวอย่าง ตัวดัก Enter a number, or -1 to quit: 3 Enter a number, or -1 to quit: 10 Enter a number, or -1 to quit: 15 Enter a number, or -1 to quit: -1 The sum is 28
ตัวอย่าง: ลูปดักค่า using System; class Summing { static void Main() { int n, sum = 0; Console.Write("Enter a number, or -1 to quit: "); n = int.Parse(Console.ReadLine()); while (n != -1) { sum = sum + n; } Console.WriteLine("The sum is {0}.", sum);
ลูปแบบ do...while ทำ stmt1...stmtN ตราบเท่าที่เงื่อนไขยังเป็นจริง START do { stmt1; stmt2; : stmtN; } while (condition); true Statement Statement condition false END
ลูปแบบดักค่าแบบ do...while using System; class Summing { static void Main() { int n, sum = 0; do { Console.Write("Enter a number, or -1 to quit: "); n = int.Parse(Console.ReadLine()); if (n != -1) sum = sum + n; } while (n != -1); Console.WriteLine("The sum is {0}.", sum); }
สรุป การเขียนโปรแกรมแบบวนซ้ำ ลูปวนนับ ลูปดักค่า โครงสร้างลูปแบบ while โครงสร้างลูปแบบ do..while