คำสั่งวนซ้ำ
ในบทนี้ คุณจะได้เรียนรู้การควบคุมโปรแกรม โดยใช้คำสั่งวนซ้ำในภาษา Visual Basic ซึ่งในการเขียนโปรแกรมนั้น มันเป็นไปได้ที่โปรแกรมจะต้องมีการทำงานซ้ำๆ กัน โดยการทำงานในคำสั่งเดิม ภายใต้เงือนไขหรือสภาพแวดล้อมที่เปลี่ยนไป
ซึ่งการที่จะควบคุมให้โปรแกรมสามารถทำงานแบบซ้ำๆ ได้นั้น ในภาษา Visual Basic เราจะใช้คำสั่งวนซ้ำ เป็นคำสั่งที่จะทำให้โปรแกรมทำงานด้วยโค้ดเดิมภายใต้เงือนไขบางอย่าง จนกว่าเงือนไขนั้นจะเป็นเท็จ (False)
ด้านบนเป็น flowchart ตัวอย่างการทำงานของคำสั่ง loop ในการนับตัวเลข โปรแกรมจะทำการนับและแสดงผลในขณะที่ตัวเลขน้อยกว่า 10 เราเรียกส่วนนี้ว่าการทำงานซ้ำหรือ loop นั่นเอง ในภาษา Visual Basic มีคำสั่ง loop ประเภทต่างๆ ดังนี้ While Do-While Do-Until และ For loop
คำสั่ง While loop
คำสั่ง While loop เป็นคำสั่งที่ง่ายและพื้นฐานที่สุดในภาษา Visual Basic ในการที่จะให้โปรแกรมทำงานซ้ำๆ มันมีรูปแบบการใช้งานดังนี้
While Expression
statement
End While
การใช้งานจะใช้คำสั่ง While
ตามด้วย Expression
ซึ่งเป็นการกำหนดเงือนไขให้ While loop ทำงาน โปรแกรมจะทำงานใน loop ตราบใดที่เงือนไขยังคงเป็น True จนกว่ามันจะเป็น False โปรแกรมจะออกจาก loop และทำงานในคำสั่งต่อไป
ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง While loop อย่างง่าย กับโปรแกรมนับเลข 1 ถึง 10 และแสดงผลลัพธ์ออกมาทางหน้าจอ
Module WhileLoop
Sub Main()
Dim i As Integer = 1
While i <= 10
Console.WriteLine("Count {0}", i)
i = i + 1
End While
End Sub
End Module
นี่เป็นตัวอย่างพื้นฐานที่สุดในการใช้งานคำสั่ง loop เราได้เขียนโปรแกรมเพื่อให้นับเลขตั้งแต่ 1 ถึง 10
Dim i As Integer = 1
นี่เป็นคำสั่งในการกำหนดค่าเริ่มต้นสำหรับการนับ โปรแกรมของเราจะนับเริ่มจาก 1 และเราประกาศตัวแปร i
สำหรับมาเก็บค่านี้
While i <= 10
Console.WriteLine("Count {0}", i)
i = i + 1
End While
นี่เป็นส่วนการทำงานของ While loop ทุกๆ ครั้งโปรแกรมจะทำการตรวจสอบเงือนไขว่าตัวแปร i น้อยกว่าหรือเท่ากับ 10 หรือไม่ใน i <= 10
ถ้าใช้ โปรแกรมจะแสดงผลตัวเลขใน loop และทุกครั้งเราจะเพิ่มค่าตัวแปรนับขึ้น i = i + 1
Count 1
Count 2
Count 3
Count 4
Count 5
Count 6
Count 7
Count 8
Count 9
Count 10
นี่เป็นผลลัพธ์ของโปรแกรมในการใช้ While loop นับตัวเลข
คำเตือน: ในการทำงานกับคำสั่ง loop คุณต้องแน่ใจกว่าเงือนไขใน loop นั้นสามารถเป็น False ได้ ไม่เช่นนั้นโปรแกรมจะทำงานใน loop ตลอดไปซึ่งเราเรียกว่า infinity loop ในตัวอย่างเราได้เพิ่มค่า i ขึ้นทุกครั้งเพื่อให้โปรแกรมออกจาก loop ในตอนที่มันแสดงครบ 10 ตัวเลขแล้ว
คำสั่ง Do While loop
คำสัง Do While loop เป็นคำสั่งวนซ้ำเช่นเดียวกันกับคำสั่ง While loop แต่ในการตรวจสอบเงือนไขนั้น จะทำการตรวจสอบหลังจากที่โปรแกรมได้ทำงานใน loop ไปแล้วอย่างน้อย 1 ครั้ง นี่เป็นรูปแบบการใช้งานคำสั่ง Do While loop ในภาษา Visual Basic
Do
Statement
Loop While Expression
คุณจะสังเกตุว่า Expression
นั้นจะถูกตรวจสอบในตอนท้ายของ loop ดังนั้นโปรแกรมจะทำงานใน loop ก่อนอย่างน้อย 1 ครั้งเสมอ ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง Do while loop ในภาษา Visual Basic
Module DoWhileLoop
Sub Main()
Dim name As String
Do
Console.Write("Enter name: ")
name = Console.ReadLine()
Console.WriteLine("Hello {0}", name)
Loop While name <> ""
Console.WriteLine("Goodbye all")
End Sub
End Module
นี่เป็นตัวอย่างโปรแกรมในการรับชื่อ และแสดงข้อความทักทาย เราได้ประกาศตัวแปร name
เพื่อเก็บชื่อ
Do
Console.Write("Enter name: ")
name = Console.ReadLine()
Console.WriteLine("Hello {0}", name)
Loop While name <> "Mark"
ภายใน loop โปรแกรมจะถามให้ใส่ชื่อ และจะแสดงข้อความทักทายชื่อที่ใส่เข้ามา และโปรแกรมจะทำงานในขณะที่ชื่อที่ใส่เข้ามานั้นไม่เป็น "Mark" ซึ่งเราตรวจสอบโดยเงือนไข name <> "Mark"
นั่นคือถ้าชื่อที่ใส่มาเป็น Mark โปรแกรมจะจบการทำงานใน loop ทันที
Enter name: Mateo
Hello Mateo
Enter name: Danny
Hello Danny
Enter name: Callie
Hello Callie
Enter name: Mark
Hello Mark
Goodbye all
นี่เป็นตัวอย่างผลลัพธ์ของโปรแกรมการใช้คำสั่ง Do While loop เราได้กรอกชื่อ Mateo Danny Callie และสุดท้ายเราได้กรอกชื่อ Mark ตามลำดับ ทำให้โปรแกรมจะสิ้นสิ้นสุดการทำงานเพราะว่าเงือนไขไม่เป็นจริงอีกต่อไป
คำสั่ง Do Until loop
คำสั่ง Do Until loop เป็นคำสั่งวนซ้ำที่ออกแบบมาสำหรับใช้ตรงกันข้ามกับคำสั่ง Do While loop โดยการทำงานในตอนแรกนั้นจะเหมือนกัน โปรแกรมจะทำงานในลูปก่อนอย่างน้อย 1 ครั้ง นี่เป็นรูปแบบการใช้งานคำสั่ง Do Until loop
Do
Statement
Loop Until Expression
เราแค่เปลี่ยนจาก While เป็น Until
ซึ่งการทำงานของมันจะแตกต่างจาก While loop คือถ้า Expression
เป็น True โปรแกรมจะหยุดทำงานใน loop ในขณะที่คำสั่ง While loop โปรแกรมจะทำงานในขณะที่ Expression เป็น True
เราจะยกตัวอย่างสำหรับการใช้คำสั่ง Do Until ในภาษา Visual Basic กับโปรแกรมคูณตัวเลข
Module DoUntilLoop
Sub Main()
Dim n As String
Do
Console.Write("Enter number: ")
n = CType(Console.ReadLine(), Integer)
Console.WriteLine("You entered {0}, Double = {1}, Triple = {2}", n, n * 2, n * 3)
Loop Until n = 0
End Sub
End Module
ในตัวอย่าง เป็นโปรแกรมรับค่าตัวเลขมาและเก็บไว้ในตัวแปร n
โปรแกรมจะแสดงค่าสองเท่า และสามเท่าของตัวเลข จนกระทั่งตัวเลขที่กรอกมีค่าเป็น 0
ในเงื่อนไข n = 0
โปรแกรมจึงจะหยุดการทำงานใน loop
Enter number: 1
You entered 1, Double = 2, Triple = 3
Enter number: 3
You entered 3, Double = 6, Triple = 9
Enter number: 5
You entered 5, Double = 10, Triple = 15
Enter number: 16
You entered 16, Double = 32, Triple = 48
Enter number: 0
You entered 0, Double = 0, Triple = 0
นี่เป็นตัวอย่างผลลัพธ์ของโปรแกรมเมื่อใส่ตัวเลข 1 3 5 16 และ 0 ตามลำดับ
คำสั่ง For loop
คำสั่ง For loop เป็นคำสั่งวนซ้ำที่ใช้สำหรับการวนซ้ำๆ ที่มีจำนวนรอบที่แน่นอน โดยเราสามารถให้เรากำหนดค่าเริ่มต้น เงื่อนไขและการเพิ่มค่าไว้ที่ตอนต้นของ loop ซึ่งทำให้มันสะดวกในการใช้ นี่เป็นรูปแบบการใช้งานคำสั่ง For loop ในภาษา Visual Basic
For NewVariable To Value
statement
Next
ในการใช้คำสั่ง For loop นั้น คุณจะต้องประกาศตัวแปรใหม่ NewVariable
สำหรับใช้ในบล็อคของคำสั่ง For loop ที่จบด้วย Next
ในการทำงานแต่ละรอบของ loop โปรแกรมจะเพิ่มค่าตัวแปรขึ้นทีละ 1 จนถึง Value
ซึ่งเป็นค่าที่เราต้องกำหนดเพื่อให้โปรแกรมออกจาก loop เมื่อมันถึงค่านี้
For NewVariable To Value Step Change
statement
Next
ถ้าหากคุณไม่ต้องการให้ค่านั้นเพิ่มทีละ 1 คุณสามารถเปลี่ยนแปลงได้ โดยส่งค่า Change
หลังคำสั่ง Step
ซึ่งเป็นทางเลือกสำหรับ For loop และต่อไปมาดูตัวอย่างการใช้งานคำสั่ง For loop แบบต่างๆ ในภาษา Visual Basic
Module ForLoop
Sub Main()
For i As Integer = 1 To 5
Console.Write("{0}, ", i)
Next
Console.WriteLine()
For i As Integer = 10 To 50 Step 10
Console.Write("{0}, ", i)
Next
Console.WriteLine()
For i As Integer = 5 To 0 Step -1
Console.Write("{0}, ", i)
Next
End Sub
End Module
ในตัวอย่างเป็นการใช้งานคำสั่ง For loop ในการนับตัวเลขทั้งหมด 3 แบบ
For i As Integer = 1 To 5
Console.Write("{0}, ", i)
Next
นี่เป็น loop สำหรับแสดงตัวเลขตั้งแต่ 1 ถึง 5 หลังการทำงานคำสั่งใน loop แต่ละรอบจะมีการเพิ่มค่า i ขึ้น 1 อัตโนมัติ ซึ่งนี่เป็นการใช้คำสั่ง For loop แบบพื้นฐาน
For i As Integer = 10 To 50 Step 10
Console.Write("{0}, ", i)
Next
ต่อมาเราใช้คำสั่ง For loop ในการแสดงตัวเลขระหว่าง 10 ถึง 50 เราได้ใช้คำสั่ง Step
เพื่อให้ loop เพิ่มค่าตัวเลขทีละ 10 ในแต่ละรอบ
For i As Integer = 5 To 0 Step -1
Console.Write("{0}, ", i)
Next
และสำหรับ loop นี้เรานับตัวเลขถอยหลัง โดยกำหนด Step ให้เป็น -1
1, 2, 3, 4, 5,
10, 20, 30, 40, 50,
5, 4, 3, 2, 1, 0,
และนี่เป็นผลลัพธ์ของโปรแกรมที่เกิดจากการทำงานของทั้ง 3 loop
คำสั่ง Exit และ Continue loop
คำสั่ง Exit เป็นคำสั่งที่ใช้สำหรับออกจาก loop ในทันที โดยที่โปรแกรมจะไม่สนใจว่าเงือนไขใน loop นั้นเป็นจริงอยู่หรือไม่
ส่วนคำสั่ง Continue นั้นจะใช้สำหรับข้ามการทำงานของ loop ในรอบปัจจุบัน โปรแกรมจะทำงานในรอบถัดไปทันที โดยไม่สนใจคำสั่งที่เหลือหลังจากคำสั่ง Continue โดยคำสั่งเหล่านี้มักจะใช้กับคำสังเลือกเงือนไข เช่น คำสั่ง If
มาดูตัวอย่างการใช้งานคำสั่ง Exit และ Continue สำหรับควบคุม loop
Module LoopControlStatement
Sub Main()
For i As Integer = 1 To 100
If i = 5 Then
Continue For
End If
If i = 10 Then
Exit For
End If
Console.WriteLine("{0}", i)
Next
End Sub
End Module
ในตัวอย่าง เราได้สร้าง For loop สำหรับการวนซ้ำ 100 รอบ ในแต่ละรอบโปรแกรมจะแสดงตัวเลขออกมา เราได้ใช้คำสั่ง Continue For
ถ้า i มีค่าเท่ากับ 5 นี่จะทำให้โปรแกรมทำงาน loop ถัดไปทันที โดยไม่แสดงเลข 5 ในคำสั่งข้างล่าง และเราได้ใช้คำสั่ง Exit For
สำหรับเงือนไขถ้า i มีค่าเท่ากับ 5 โปรแกรมจะออกจาก loop ในทันที
1
2
3
4
6
7
8
9
นี่เป็นผลลัพธ์ของโปรแกรม คุณจะเห็นว่าเลข 5 ไม่ถูกแสดงเพราะว่าเป็นผลของคำสั่ง Continue และโปรแกรมแสดงถึงเลข 9 ถึงแม้เราจะกำหนดในคำสั่ง For ว่า To 100
ก็ตาม แต่เพราะคำสั่ง Exit ทำให้โปรแกรมจบการทำงานของ loop ในทันที
คุณยังสามารถใช้คำสั่ง Exit และ Continue สามารถใช้ได้กับคำสั่ง While loop ได้ เช่น Exit While
หรือ Exit Do
สำหรับ Do loop ทั้งสองแบบ
คำสั่ง Loop ซ้อน Loop
ในการใช้งานคำสั่งวนซ้ำนั้น มันสามารถซ้อนกันได้เช่นเดียวกันกับคำสั่งเลือกเงือนไข การซ้อนของ loop เราเรียกว่า Nested loop เราจะยกตัวอย่างการซ้อนกันของคำสั่ง For loop
เราจะมาเขียนโปรแกรมสำหรับหาค่า Factorial ของตัวเลขโดยการใช้ For loop ที่ซ้อนกัน
Module NestedForLoop
Sub Main()
Console.WriteLine(vbTab & "Factorial program")
For i As Integer = 1 To 10
Dim result As Integer = 1
For j As Integer = 1 To i
result = result * j
Next
Console.WriteLine("{0}! = {1}", i, result)
Next
End Sub
End Module
ในตัวอย่างเป็นการใช้คำสั่ง For loop ในการหาค่า Factorial ของตัวเลขโดย loop ด้านนอกสำหรับเป็นการสร้างตัวเลขในการนำมาหาค่า Factorial โดยเราจะวนรอบหาค่า Factorial สำหรับเลข 1 ถึง 10
For j As Integer = 1 To i
result = result * j
Next
Loop ข้างในเป็นการหาค่า Factorial ซึ่งสูตรในการหาค่า Factorial ของตำนวนเต็ม n ใดๆ ก็คือการนำตัวเลขจาก 1 ถึง n มาคูณกัน ดังนั้นเราสร้างตัวแปร result
มาเก็บผลลัพธ์ในการคูณแต่ละรอบ
Factorial program
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
นี่เป็นผลลัพธ์ของโปรแกรมในการหาค่า Factorial จาก 1 ถึง 10 คุณสามารถเปลียนช่วงขนาดของตัวเลขเป็นอย่างอื่นได้ แต่คุณต้องแน่ใจว่าตัวแปร result สามารถเก็บค่าของ Factorial ตัวเลขเหล่านั้นได้ ที่เราได้พูดถึงในเรื่องตัวแปรและประเภทข้อมูล
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับคำสั่งวนซ้ำ (loop) แบบต่างๆ ในภาษา Visual Basic และได้เห็นตัวอย่างในการนำไปใช้งานสำหรับแต่ละแบบ ซึ่งทำให้โปรแกรมของเรามีความสามารถในการทำงานมากขึ้น