วันศุกร์ที่ 6 กันยายน พ.ศ. 2556

ใบความรู้ 6 การเขียนโปรแกรมด้วยภาษา C#

โครงสร้าง 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 ลูป

         โครงสร้างแบบ 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!!!");
  }
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น