หน่วยที่
7
โครงสร้างควบคุมแบบทำซ้ำ
หัวเรื่อง(Topics)
7.1 คำสั่ง While
7.2 คำสั่ง do...While
7.3 คำสั่ง for
7.4 การทำซ้ำแบบซอนกัน (Nested loop)
แนวคิดสำคัญ (Main Idea)
การเขียนโปรแกมแบบทำซ้ำหรือที่เรียกว่าลูป (Loop)
เป็นการกระทำในหนึ่งกระบวนการหลายครั้งโดยมีเงื่อนไขควบคุม
ซึ่งหน่วยนี้จะขอกล่าวถึงคำสั่งที่เป็นโครงสร้างแบบทำซ้ำ 4 รูปแบบ
คื่อคำสั่งที่ทำซ้ำแบบ While คำสั่งทำซ้ำแบบ do...While
คำสั่งทำซ้ำแบบ for และคำสั่งทำซ้ำแบบซ้อน
ซึ่งการเลือกใช้โครงสร้างแบบทำซ้ำแต่ละรูปแบบขึ้นอยู่กับลักษณะของงานและผลลัพท์ที่ต้องการ
คำสั่ง While เป็นคำสั่งโครงสร้างแบบทำซ้ำที่จะมีการทดสอบเงื่อนไขก่อนทำคำสั่งในลูป
ซึ่งถ้าเงื่อนไขที่อยู่หลัง While เป็นจริง
จะทำคำสั่งในลูปและย้อนกลับมาทดสอบเงื่อนไขที่อยู่หลัง While ไปเรื่อยๆ จนกว่าเงื่อนไขที่อยู่หลัง While เป็นเท็จ
จึงจะออกนอนลูป
คำสั่ง do...While เป็นคำสั่งโครงสร้างแบบทซ้ำที่จะมีการทำคำสั่งในลูปก่อนทดสอบเงื่อนไข
โดยหากเงื่อนไขที่อยู่หลัง While เป็นจริงจะทำคำสั่งในลูป
และวนรอบและตรวจสอบเงื่อนไขไปเรื่อยๆจนกว่าเงื่อนไขที่อยู่หลัง While จะเป็นเท็จ
คำสั่ง for เป็นคำสั่งโครงสร้างแบบทำซ้ำที่จะมีการทดสอบเงื่อนไขก่อนทำคำสั่งในลูป
โดยหากเงื่อนไขเป็นจริง จะทำคำสั่งในลูปไปเรื่อยๆ จนกว่าเงื่อนไขเป็นเท็จ
จึงจะออกนอกรูป
การทำซ้ำแบบซ้อนกัน (Nested loop) เป็นคำสั่งโครงสร้างแบบทำซ้ำแบบลูปซ้อนลูป โดยจะมีการทำงานเริ่มจากลูป for
ที่อยู่ภายนอกก่อน จากนั้นจึงจะเข้าทำงานลูป for ที่อยู่ภายในโดยทุก ๆ ค่าของลูป for นอก
จะทำซ้ำคำสั่งภายในลูป for ในให้ครบทุกรอบก่อน
จึงจะออกมาทำลูป for นอก
สมรรถนะย่อย (Element of Competency)
1. แสดงความรู้เกี่ยวกับโครงสร้างควบคุมแบบทำซ้ำ
2. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำ
จุดประสงค์เชิงพฤติกรรม (Behavioral Objectives)
1. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำด้วยคำสั่ง While
ได้ถูกต้อง
2. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำด้วยคำสั่ง do...While
ได้ถูกต้อง
3. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำด้วยคำสั่ง for
ได้ถูกต้อง
4. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำแบบซ้อนกัน
ได้ถูกต้อง
คำสั่ง While
การใช้คำสั่ง
While
loop
คำสั่งวนซ้ำที่ง่ายที่สุดในภาษา
Java
คือ คำสั่ง While loop โดยมันมีรูปแบบในการใช้งานดังนี้
while
( expression ) {
// statements
}
ในการใช้งานคำสั่ง while สำหรับการสร้าง while loop และ expression คือเงื่อนไขที่จะให้โปรแกรมทำงานใน loop ถ้าหากเงื่อนไขเป็นจริงโปรแกรมจะทำงานในบล็อคคำสั่งวงเล็บปีกกา {
} เมื่อเงือนไขเป็นเท็จโปรแกรมจะออกจากลูปจะทำงานคำสั่งต่อไปหลัง
while
มาดูตัวอย่างการใช้
While
loop ในภาษา Java กับการนับเลขอย่างง่าย
public
class WhileLoop {
public static void main(String[] args)
{
int i = 1;
while ( i <= 10 ) {
System.out.print (i + ", ");
++i;
}
System.out.println("End");
}
}
ในโปรแกรม
นั้นเราได้ประกาศตัวแปร i มาใช้ในการนับ
ในเงือนไขของ while เราได้ตรวจสอบว่าถ้าหาก i น้อยกว่าหรือเท่ากับ 10 while ( i <= 10 ) โปรแกรมจะทำงานใน loop และแสดงค่า i ออกมา แต่ละรอบเราจะทำการเพิ่มค่าของ i ด้วยคำสั่ง ++i; เพื่อป้องกันไม่ให้ลูปทำงานตลอดไป (Infinity loop) จนกว่าเงือนไขไม่เป็นจริง
โปรแกรมได้ออกนอกลูปและทำคำสั่งต่อมา
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, End
ข้างล่างนี้เป็นผลลัพธ์ของโปรแกรม
คุณจะเห็นว่ามันวิเศษไปเลย เราสามารถทำให้มันแสดงผลได้ 10
ครั้งเพียงแค่เขียนโปรแกรมไม่กี่บรรทัด แน่นอนคุณจะทำให้มันแสดงถึง 100
ก็ยังได้ เพียงแค่เปลี่ยนเงือนไขในเป็น while ( i <=
100 ) แค่นั้นเอง
คำสั่ง do...While
การใช้คำสั่ง
Do-While
loop
คำสั่งวนซ้ำอีกชนิดหนึ่งคือ
คำสั่ง do-while
loop ซึ่งคำสั่งนี้จะทำงานแตกต่างคำสั่ง while loop เล็กน้อยคือ มันจะทำงานก่อนอย่างน้อย 1 ครั้งหลังจากนั้นจะตรวจสอบเงื่อนไขอยู่ด้านท้ายของ
loop มันมีรูปแบบการใช้งานดังนี้
do
{
// statements
}
while ( expression );
ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง
do-while
loop ในภาษา Java เราจะเขียนโปรแกรมในการตรวจสอบตัวเลข
ว่าเป็นจำนวนคี่หรือคู่ (odd or even number)
import
java.util.Scanner;
public
class DoWhileLoop {
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int number;
System.out.println("\tDetermine
odd/even program");
do {
System.out.print("Enter odd
number to exit loop: ");
number = reader.nextInt();
if (number % 2 == 0) {
System.out.println("You
entered " + number + ", it's even.");
} else {
System.out.println("You
entered " + number + ", it's odd.");
}
} while (number % 2 == 0);
System.out.println("Exited
loop.");
}
}
ในตัวอย่างโปรแกรมจะถามให้ผู้ใช้กรอกตัวเลขคี่
(odd
number) เพื่ออกจากลูป โปรแกรมจะทำงานในลูปเรื่อยๆ
ถ้าหากเขายังคงกรอกเลขคู่ (even number) โดย number
% 2 == 0 เป็น expression เพื่อตรวจสอบว่าตัวเลขเป็นเลขคู่หรือไม่
โดยการใช้ตัวดำเนินการ Mod เลขคู่คือเลขที่หารด้วย 2 แล้วมีเศษเป็น 0
คุณอาจจะเห็นว่าโปรแกรมของเราอาจจะซับซ้อน
เช่น การใช้คำสั่ง If ซ้อนข้างใน
เพราะการทำเช่นนี้มันจะทำให้คุณจดจำและมองเห็นวิธีการนำไปประยุกต์ใช้ได้ดีขึ้น
Determine odd/even program
Enter
odd number to exit loop: 2
You
entered 2, it's even.
Enter
odd number to exit loop: 4
You
entered 4, it's even.
Enter
odd number to exit loop: 8
You
entered 8, it's even.
Enter
odd number to exit loop: 0
You
entered 0, it's even.
Enter
odd number to exit loop: 3
You
entered 3, it's odd.
Exited
loop.
และนี่คือผลลัพธ์ของโปรแกรม
โปรแกรมจะออกจากลูปเมื่อผู้ใช้กรอกเลขคี่ ซึ่งก็คือ 3
สำหรับตัวอย่าง
คำสั่ง for
การใช้คำสั่ง
For
loop
คุณได้เรียนรู้คำสั่งลูปพื้นฐานไปแล้ว
ต่อไปเราจะให้คุณรู้จักกับ For loop ซึ่งเป็น loop
ที่นิยมใช้กันเป็นจำนวนมาก เพราะว่า Foor loop มักจะใช้กับ Loop ที่ทราบจำนวนการวนซ้ำที่แน่นอน
และมันอำนวยความสะดวกในการประกาศตัวแปรเริ่มต้น กำหนดเงือนไข
และเพิ่มลดค่าไว้ที่เดียวกัน ซึ่งตัวแปรเหล่านี้สามารถใช้ได้เพียงแค่ใน Loop
scope เท่านั้น
การใช้คำสั่ง
For
loop ในภาษา Java นั้นมีรูปแบบดังนี้
for
(initial; condition; update) {
// Statements
}
สำหรับรูปแบบของ
for
loop นั้นจะมีการกำหนดส่วนประกอบ 3 ส่วนคือ initial คือการประกาศส่วนเริ่มต้นของลูป เช่น กำหนดค่าให้กับตัวแปร condition คือการกำหนดเงือนไขที่จะให้ทำงานในลูป และ update เป็นการอัพเดทค่าหลังจากจบแต่ละลูป ซึ่งจะเห็นว่ามันรวมกันที่ส่วนหัวของ for
ซึ่งง่ายต่อการใช้งาน
ต่อไปมาดูตัวอย่าง
การใช้ For
loop ในภาษา Java ตัวอย่างนี้
เราจะใช้ตัวอย่างเดียวกันกับ While loop คือแสดงเลข 1
- 10
public
class ForLoop {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("Loop " +
i);
}
System.out.println("End of
loop");
}
}
จากตัวอย่างนั้นจะได้ผลลัพธ์เช่นกันกับ
while
loop ในตัวอย่างก่อนหน้า คุณจะเห็นว่ามันง่ายและสะดวกกว่าในการใช้
นอกจากนี้ For loop ยังนิยมใช้กับข้อมูลแบบอาเรย์
คุณจะได้เรียนในบทต่อไป
การทำซ้ำแบบซ้อนกัน (Nested loop)
Nested
For loop
เช่นเดียวกัน
คำสั่ง loop
ทุกชนิดสามารถที่จะซ้อนกันได้ ซึ่งเราเรียกว่า Nested loop ต่อไปมาดูตัวอย่างการใช้คำสั่ง For loop ซ้อนกัน
โดยเราจะสร้างแมทริกขนาด 2 มิติ ที่แต่ละค่าเป็นค่าของ i
และ j คูณกัน
public
class ForLoop {
public static void main(String[] args) {
int width = 6;
int height = 6;
System.out.println("\tMatrix
program");
for (int i = 1; i <= height ; i++) {
for (int j = 1; j <= width ;
j++) {
System.out.print("\t"
+ (i * j));
}
System.out.println();
}
}
}
ในตัวอย่าง
เราได้สร้าง For loop สองอันที่ซ้อนกันอยู่
โดยลูปข้างนอก (outer loop) จะทำการวนตามจำนวนในตัวแปร height และลูปข้างใน (inner loop) จะทำการวนตามจำนวน widthผลลัพธ์ตัวเลขที่ได้นั้นเกิดจาก ค่าของ i * j และเราใช้ Tab (\t) เพื่อทำให้มันสวยงาม
Matrix program
1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36
และนี่เป็นผลลัพธ์ของโปรแกรม
Nested
for loop
ในการเขียนโปรแกรมทำงานกับ
Loop
นั้นจะมีคำสั่งสองชนิดที่คุณมักจะต้องใช้ควบคุมการทำงานของ Loop
ในกรณีพิเศษ โดยคำสั่งเหล่านั้นคือ Continue และ
Break