โครงสร้าง while ลูป
โครงสร้าง while ลูปเป็นโครงสร้างแบบง่ายที่สุดที่สามารถนำมาใช้เขียนโปรแกรมเพื่อวนทำคำสั่ง (หรือกลุ่มของคำสั่ง) ซ้ำหลาย ๆ รอบ รูปแบบ การใช้งาน while ลูปเป็นดังนี้
while (condition)
statement;
|
เช่นเดียวกับโครงสร้าง if เราสามารถกำหนดการวนซ้ำให้กับกลุ่มของคำสั่งได้โดยใช้วงเล็บปีกกา
({...})
while (condition) {
statement1;
statement2;
:
statementN;
}
|
ตัวอย่างที่ 4.1 จงเขียนโปรแกรมเพื่อพิมพ์ค่าตั้งแต่ 1 ถึง N โดยรับค่า N จากผู้ใช้
1: using System;
2: class OneToN {
3: static void Main() {
4: int i, N;
5: Console.Write("Enter N: ");
6: N = int.Parse(Console.ReadLine());
7: i = 1; // initialize variable i to 1
8: while (i <= N) {
9: Console.WriteLine(i);
10: i++;
11: }
12: }
13: }
|
ตัวอย่างผลการทำงาน
Please input N: 5
1
2
3
4
5
|
ลองมาพิจารณาการทำงานของโปรแกรมทีละขั้นตอน เมื่อโปรแกรมเริ่มทำงาน ผู้ใช้จะป้อนตัวเลข
เพื่อใช้เป็นค่าของ N ณ บรรทัดที่ 6 และโปรแกรมจะกำหนดให้ค่า 1 เป็นค่าเริ่มต้นของ i ที่บรรทัดถัดมา
จากนั้นโครงสร้าง while จะมีผลทำให้โปรแกรมทำคำสั่งที่บรรทัดที่ 9 และ 10 จนกระทั่งนิพจน์ i <=
N มีค่าเป็นเท็จ ในการวนซ้ำแต่ละครั้งโปรแกรมจะพิมพ์ค่า i และเพิ่มค่า i ขึ้นทีละหนึ่ง ผลการทำงานของ
โปรแกรมจึงเป็นการพิมพ์ตัวเลขตั้งแต่ 1 (ซึ่งเป็นค่าเริ่มต้นของ i) จนถึงค่าของ N (ซึ่งเป็นค่าสุดท้ายของ i ที่ยังทำให้นิพจน์ i <= N เป็นจริง)
ตัวอย่างที่ 4.2 เราสามารถเขียนโปรแกรมเพื่อคำนวณหาผลรวมทั้งแต่ 1 ถึง N ใด ๆ โดยแก้ไขโปรแกรมใน
ตัวอย่างที่ 4.1 เพียงเล็กน้อยเท่านั้นดังต่อไปนี้
using System;
class Summing {
static void Main() {
int N, i, sum;
Console.Write("Please input N: ");
N = int.Parse(Console.ReadLine());
i = 1; sum = 0;
while (i <= N) {
sum = sum + i;
i++;
}
Console.WriteLine("Sum from 1 to {0} = {1} ", N, sum);
}
}
|
ตัวอย่างผลการทำงาน
Please input N: 4
1
2
3
4
Sum from 1 to 4 = 10
|
ในตัวอย่างที่ผ่านมาจะมีการกำหนดเงื่อนไขการทำงานของลูปโดยการกำหนดตัวแปรตัวหนึ่งขึ้นมาใช้เป็นตัวนับ (counter) ซึ่งมักจะถูกตั้งค่าเริ่มต้นให้เป็นศูนย์ก่อนเริ่มเข้าลูป และเพิ่มค่าขึ้นทีละหนึ่งหลังจากคำสั่งภายในลูปถูกทำงานเสร็จสิ้นหนึ่งรอบ โปรแกรมจะทำซ้ำไปเรื่อย ๆ จนกระทั่งตัวนับมีค่าเกินกว่าค่าที่กำหนด การวนลูปในลักษณะนี้เรียกว่าลูปวนนับ (counting loop)
อย่างไรก็ตามลูปวนนับไม่สามารถนำไปใช้ในสถานการณ์ที่เราไม่สามารถคาดการณ์ได้ว่าลูป
จะต้องถูกเรียกทำงานกี่รอบจึงจะจบการทำงาน อาทิเช่นการวนรับค่าจากผู้ใช้เรื่อย ๆ จนกว่าผู้ใช้จะป้อนค่า
พิเศษค่าหนึ่ง ในกรณีนี้เราจะไม่อาศัยตัวแปรที่ทำหน้าที่เป็นตัวนับ แต่จะใช้วิธีกำหนดเงื่อนไขของลูปให้มี
การเฝ้าดูค่าในตัวแปร (ซึ่งมักใช้รับค่าจากผู้ใช้) ว่ามีค่าเท่ากับค่าพิเศษที่กำหนดให้สิ้นสุดการวนลูปหรือไม่การวนลูปในลักษณะนี้เรียกว่าลูปเฝ้ายาม (sentinel loop)
ตัวอย่างที่ 4.3 จงเขียนโปรแกรมเพื่อวนรับตัวเลขจากผู้ใช้จนกว่าผู้ใช้จะป้อนค่าติดลบจึงจบการทำงาน
using System;
class While4 {
static void Main() {
int N = 0;
while (N >= 0) { // stop when N is negative
Console.Write("Please input N: ");
N = int.Parse(Console.ReadLine());
}
Console.WriteLine("Bye Bye!!!");
}
}
|
ตัวอย่างผลการทำงาน
Please input N: 3
Please input N: 2
Please input N: 3000
Please input N: 9999
Please input N: -50
Bye Bye!!!
|
โครงสร้าง do...while ลูป
และมีการทำงานคล้ายคลึงกับโครงสร้างแบบ while มาก สิ่งที่แตกต่างกันก็คือ do..while จะตรวจสอบเงื่อนไขหลังจากทำคำสั่งภายในลูปไปแล้วหนึ่งครั้ง และจะวนซ้ำไปเรื่อย ๆ จนกระทั้งเงื่อนไขที่ ระบุมีค่าเป็นเท็จ ดังนั้นโครงสร้างแบบ do..while จึงทำคำสั่งในลูปอย่างน้อย หนึ่งครั้ง แม้ว่าเงื่อนไขจะเป็นเท็จตั้งแต่แรกก็ตาม รูปแบบการใช้งาน โครงสร้าง do..while เป็นดังนี้
do statement; while (condition);
|
และเช่นเคย วงเล็บปีกกาถูกนำมาใช้เพื่อรวมหลาย ๆ คำสั่งให้เสมือนเป็นหนึ่งเอาไว้ภายในลูปได้
do {
statement1;
statement2;
:
statementN;
} while (condition);
|
ตัวอย่างที่ 4.4 โปรแกรมด้านล่างมีการใช้งานโครงสร้าง do..while แต่ให้ผลการทำงานเหมือนกัน
โปรแกรมในตัวอย่างที่ 4.3 ทุกประการ
using System;
class DoWhile1 {
static void Main() {
int N = 0;
do {
Console.Write("Please input N: ");
N = int.Parse(Console.ReadLine());
} while (N >= 0);
Console.WriteLine("Bye Bye!!!");
}
}
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น