ใบความรู้ที่ 4.1
โครงสร้าง 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!!!
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น