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

05 Loops