วันพุธที่ 21 สิงหาคม พ.ศ. 2556

ใบความรู้ที่ 3.4 โครงสร้าง switch...case

ใบความรู้ที่ 3.4
โครงสร้าง switch...case

         ถึงแม้ว่าการจัดการเงื่อนไขหลาย ๆ เงื่อนไขในคราวเดียวกันจะสามารถทำได้โดยอาศัยโครงสร้าง
if แบบหลายชั้น ภาษา C# ยังได้เตรียมโครงสร้าง switch...case เพื่อใช้ในการจัดการเงื่อนไขหลาย

เงื่อนไขโดยเฉพาะ การใช้งานโครงสร้าง switch...case อยู่ในรูปแบบดังนี้

switch (expression)
{
   case constant-expression-1:
      statements;
      break;
   case constant-expression-2:
      statements;
      break;
   case constant-expression-3:
      statements;
      break;
   :
   default:
      statements;
      break;
}

            ภาษา C# ยอมให้นิพจน์ที่ใช้ในตำแหน่ง expression เป็นนิพจน์แบบจำนวนเต็ม (integer)
แบบอักขระ (char) หรือแบบข้อความ (string) เท่านั้น หลังจากที่ค่าของ expression ถูกตรวจสอบ
โปรแกรมจะกระโดดไปทำงาน ณ คำสั่ง case ที่ระบุค่าของ constant-expression ไว้ตรงกับค่า
ของ expression ที่ประเมินได้ คำสั่งต่าง ๆ ที่อยู่ถัดจากคำสั่ง case นั้น ๆ จะถูกเรียกใช้งานตามลำดับ
ไปเรื่อย ๆ จนกว่าโปรแกรมจะพบคำสั่ง break ซึ่งมีผลทำให้โปรแกรมหยุดการทำงานภายในโครงสร้าง
switch...case นั้นและกระโดดไปยังคำสั่งที่ต่อไปนอกโครงสร้าง หากไม่พบ constantexpression
ใดที่มีค่าตรงกับ expression โปรแกรมจะกระโดดไปยังจุดที่มีการระบุด้วยคำสั่ง default

ตัวอย่างที่ 3.5 โปรแกรมต่อไปนี้แสดงแต้มคะแนนตามระดับคะแนน (A,B,C,D,F) ที่ป้อนโดยผู้ใช้

ระดับคะแนน (grade)
แต้มระดับคะแนน (grade point)
A
4.0
B
3.0
C
2.0
D
1.0
F
0.0

using System;
class GradePoint {
  static void Main() {
    string grade;
    Console.Write("Please input your grade: ");
    grade = Console.ReadLine();
    switch (grade) {
      case "A" : Console.WriteLine("Your point is 4.0."); break;
      case "a" : Console.WriteLine("Your point is 4.0."); break;
      case "B" : Console.WriteLine("Your point is 3.0."); break;
      case "b" : Console.WriteLine("Your point is 3.0."); break;
      case "C" : Console.WriteLine("Your point is 2.0."); break;
      case "c" : Console.WriteLine("Your point is 2.0."); break;
      case "D" : Console.WriteLine("Your point is 1.0."); break;
      case "d" : Console.WriteLine("Your point is 1.0."); break;
      case "F" : Console.WriteLine("Your point is 0.0."); break;
      case "f" : Console.WriteLine("Your point is 0.0."); break;
      default: Console.WriteLine("Invalid input!!"); break;
    }
  }
}

ตัวอย่างผลการทำงาน

Please input your grade: A
Your point is 4.0.

Please input your grade: B
Your point is 3.0.


Please input your grade: e
Invalid input!!

           แม้ว่าโปรแกรมข้างต้นจะทำงานได้อย่างถูกต้อง โปรแกรมดังกล่าวยังค่อนข้างยาวอีกทั้งโปรแกรม
ยังมีคำสั่งที่ถูกใช้ซ้ำ ๆ กันอยู่หลายแห่งเนื่องจากการป้อนระดับคะแนนด้วยตัวอักษรตัวใหญ่และตัวเล็กจะ
ให้ผลเหมือนกัน ภาษา C# อนุญาตให้คำสั่ง case หลาย ๆ คำสั่งควบคุมชุดคำสั่งร่วมกันได้ดังตัวอย่าง

using System;
class GradePoint {
  static void Main() {
    string grade;
    Console.Write("Please input your grade: ");
    grade = Console.ReadLine();
    switch (grade) {
      case "A" :
      case "a" : Console.WriteLine("Your point is 4.0."); break;
      case "B" :
      case "b" : Console.WriteLine("Your point is 3.0."); break;
      case "C" :
      case "c" : Console.WriteLine("Your point is 2.0."); break;
      case "D" :
      case "d" : Console.WriteLine("Your point is 1.0."); break;
      case "F" :
      case "f" : Console.WriteLine("Your point is 0.0."); break;
      default: Console.WriteLine("Invalid input!!"); break;
    }
  }
}

           โปรแกรมนี้ยังสามารถทำให้สั้นลงได้อีกโดยการใช้ตัวแปรเสริมอีกตัวเพื่อเก็บแต้มระดับคะแนน
แล้วจึงนำค่าของตัวแปรพิมพ์ออกทางหน้าจอโดยใช้คำสั่ง Console.WriteLine ในคราวเดียวก่อน
จบโปรแกรม ดังแสดง

using System;
class GradePoint {
  static void Main() {
    string grade;
    double point = -1;
    Console.Write("Please input your grade: ");
    grade = Console.ReadLine();
    switch (grade) {
      case "A" : case "a" : point = 4.0; break;
      case "B" : case "b" : point = 3.0; break;
      case "C" : case "c" : point = 2.0; break;
      case "D" : case "d" : point = 1.0; break;
      case "F" : case "f" : point = 0.0; break;
      default: Console.WriteLine("Invalid input!!"); break;
    }
    if (point >= 0)
       Console.WriteLine("Your point is {0:f1}.", point);
  }
}

ตัวอย่างที่ 3.6 โปรแกรมต่อไปนี้เป็นโปรแกรมเครื่องคิดเลขอย่างง่าย เมื่อเริ่มทำงานโปรแกรมจะให้ผู้ใช้
ป้อนค่าตัวเลขจำนวนจริงสองค่า พร้อมระบุตัวดำเนินการทางคณิตศาสตร์ที่ต้องการโดยเป็นได้เพียง + หรือ - จากนั้นโปรแกรมจะแสดงผลลัพธ์จากการคำนวณ หากผู้ใช้ป้อนตัวดำเนินการอื่นนอกเหนือจาก + หรือ - โปรแกรมจะรายงานความผิดพลาด

1:  using System;
2:  class Calculator {
3:     static void Main() {
4:        double n1, n2, ans = 0;
5:        char op;
6:        Console.Write("Enter the first number: ");
7:        n1 = double.Parse(Console.ReadLine());
8:        Console.Write("Enter the second number: ");
9:        n2 = double.Parse(Console.ReadLine());
10:       Console.Write("Enter the operator: ");
11:       op = char.Parse(Console.ReadLine());
12:       switch(op) {
13:         case '+': ans = n1+n2; break;
14:         case '-': ans = n1-n2; break;
15:         default: op = ' '; break;
16:       } 
17:       if (op == ' ')
18:         Console.WriteLine("Invalid operator!");
19:       else
20:         Console.WriteLine("{0}{1}{2} = {3}", n1, op, n2, ans);
21:     }
22:  }

          สังเกตบรรทัดที่ 15 ซึ่งใช้จัดการกรณีที่ผู้ใช้ป้อนตัวดำเนินการอื่นนอกเหนือจาก + หรือ - บรรทัดนี้
จะเปลี่ยนค่าของตัวแปร op ให้เป็นช่องว่าง (' ') เพื่อนำไปเช็คที่ท้ายโปรแกรมอีกทีหนึ่ง

ตัวอย่างผลการทำงาน

Enter the first number: 8
Enter the second number: 10
Enter the operator: +
8+10 = 18










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

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