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

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

นิพจน์ทางตรรกศาสตร์

            นิพจน์ทางตรรกศาสตร์ (boolean expressions) เป็นนิพจน์ที่ถูกตีความเป็นค่าความจริง ซึ่งให้ค่าที่
เป็นไปได้เพียงสองค่าคือ true (จริง) และ false (เท็จ) นิพจน์ทางตรรกศาสตร์มีบทบาทอย่างมากใน
การกำหนดเงื่อนไขให้กับคำสั่งแบบมีเงื่อนไข ซึ่งภาษา C# อนุญาตให้เราสร้างนิพจน์เหล่านี้ได้จากการผสมนิพจน์ทางคณิตศาสตร์ (หรือแม้แต่นิพจน์แบบอักขระและนิพจน์แบบข้อความ) เข้าด้วยกันโดยอาศัยตัวดำเนินการเปรียบเทียบดังนี้

             นอกจากนี้เรายังสามารถนำเอานิพจน์ทางตรรกศาสตร์ตั้งแต่หนึ่งนิพจน์หรือมากกว่ามาผสมกันเพื่อสร้างนิพจน์ทางตรรกศาสตร์ที่ซับซ้อนขึ้นอีกโดยอาศัยตัวเชื่อมดังต่อไปนี้

• && เชื่อมนิพจน์ทางตรรกศาสตร์สองนิพจน์เข้าด้วยกันโดยใช้ตรรกแบบ "และ" (AND)
   ตัวอย่างเช่น (x>1) && (x<10) จะให้ค่าจริงเมื่อตัวแปร x มีค่าอยู่ระหว่าง 1 ถึง 10
• || เชื่อมนิพจน์ทางตรรกศาสตร์สองนิพจน์เข้าด้วยกันโดยใช้ตรรกแบบ "หรือ" (OR) ตัวอย่างเช่น
   (x<1) || (x>10) จะให้ค่าจริงเมื่อตัวแปร x มีค่าน้อยกว่า 1 หรือมากกว่า 10
• ! กลับค่าความจริงของนิพจน์ทางตรรกศาสตร์ ตัวอย่างเช่น !(x==1) จะเป็นจริงเมื่อตัวแปร x มี
   ค่าไม่เท่ากับ 1
โครงสร้าง if และ if...else

            โครงสร้าง if เป็นโครงสร้างที่ใช้ควบคุมการทำงานของคำสั่งอื่น ๆ ภายใต้เงื่อนไข (condition) ที่

กำหนด การใช้งานนั้นมีสองรูปแบบคร่าว ๆ ได้แก่

• รูปแบบที่ 1: โครงสร้าง if
จากการใช้งานด้านล่าง คำสั่ง statement จะถูกเรียกทำงานก็ต่อเมื่อนิพจน์ทางตรรกศาสตร์ที่
กำหนดเป็น condition มีค่าเป็นจริง
if (condition)
   statement; // executed if the condition is true

เนื่องจากโครงสร้างข้างต้นอนุญาตให้เรากำหนดเงื่อนไขให้กับคำสั่งเพียงคำสั่งเดียวเท่านั้น อย่างไร
ก็ตาม หากมีคำสั่งมากกว่าหนึ่งภายใต้เงื่อนไขเดียวกัน คำสั่งเหล่านี้สามารถถูกจัดกลุ่มให้เป็น
เสมือนคำสั่งเดียวได้โดยการครอบคำสั่งทั้งหมดด้วยวงเล็บปีกกา ({...})
if (condition) {
   statement1; // executed if the condition is true
   statement2; // executed if the condition is true
   statement3; // executed if the condition is true
   :
}

• รูปแบบที่ 2: โครงสร้าง if...else
คำสั่ง statement1 จะถูกเรียกทำงานเมื่อนิพจน์ในตำแหน่ง condition มีค่าเป็นจริง หาก
นิพจน์ดังกล่าวมีค่าเป็นเท็จ คำสั่ง statement2 จะถูกเรียกทำงานแทน

if (condition)
   statement1; //executed if the condition is true
else
   statement2; //executed if the condition is false

และเช่นเคย เราสามารถใช้งานโครงสร้าง if...else ร่วมกับวงเล็บปีกกาหากมีคำสั่งที่ต้องการ
ให้ทำงานภายใต้เงื่อนไขมากกว่าหนึ่ง

if (condition) {
   statementT1; //executed if the condition is true
   statementT2; //executed if the condition is true
}
else {
   statementF1; //executed if the condition is false
   statementF2; //executed if the condition is false
}
ตัวอย่างที่ 3.1 รหัสจำลอง (pseudo-code) ด้านล่างอธิบายขั้นตอนวิธีสำหรับให้โปรแกรมพิมพ์คำว่า
Passed หากคะแนนของนักเรียนมีค่ามากกว่าหรือเท่ากับ 60 ไม่เช่นนั้นให้พิมพ์คำว่า Failed

if student's score is greater than or equal to 60
   Print "Passed"
otherwise
   Print "Failed"
เราสามารถนำรหัสจำลองข้างต้นมาเขียนเป็นโปรแกรมภาษา C# ได้ดังนี้ (แสดงเพียงส่วนสำคัญเท่านั้น)

if (score >= 60)
  Console.WriteLine("Passed");
else
  Console.WriteLine("Failed");

เนื่องจากคีย์เวิร์ด else เป็นตัวกำหนดให้การพิมพ์คำว่า Failed ทำงานเมื่อเงื่อนไข score >= 60
เป็นเท็จ ดังนั้นหากเราแทนที่ else ด้วยคำสั่ง if และใช้เงื่อนไขที่ตรงข้ามกันคือ score < 60
โปรแกรมก็จะมีการทำงานเหมือนกับโปรแกรมข้างบนทุกประการ

if (score >= 60)
  Console.WriteLine("Passed");
if (score < 60)
  Console.WriteLine("Failed");

ตัวอย่างที่ 3.2 โปรแกรมต่อไปนี้จะรอรับตัวเลขจากผู้ใช้และให้คำตอบว่าตัวเลขนั้น ๆ เป็นเลขคู่ (even) หรือ เลขคี่ (odd)

• ใช้รูปแบบ if
using System;
class OddOrEven {
  static void Main() {
     int N;
     Console.Write("Please input N: ");
     N = int.Parse(Console.ReadLine());
     if (N%2 == 0)
       Console.WriteLine("{0} is even", N); //true
     if (N%2 != 0)
       Console.WriteLine("{0} is odd", N); //true
  }
}

• ใช้รูปแบบ if...else

using System;
class OddOrEven {
  static void Main() {
    int N;
    Console.Write("Please input N: ");
    N = int.Parse(Console.ReadLine());
    if (N%2 == 0)
      Console.WriteLine("{0} is even", N); //true
    else
      Console.WriteLine("{0} is odd", N); //false
  }
}

ตัวอย่างที่ 3.3 บริษัทโทรศัพท์มือถือแห่งหนึ่งเสนอโปรโมชั่นให้กับลูกค้าโดยมีการคำนวณค่าธรรมเนียม
การใช้งานดังนี้
       • สองนาทีแรก คิดนาทีละห้าบาท
       • นาทีถัดมาคิดนาทีละสองบาท

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

using System;
class Cellphone {
   static void Main() {
      // Step 1: Take the number of minutes input
      Console.Write("Enter the number of minutes: ");
      int minutes = int.Parse(Console.ReadLine());

      // Step 2: Split the number of minutes into two parts,
      // the first two and the remaining
      int first, remaining;
      if (minutes > 2) {
         // Step 2.1: If the call takes more than two minutes,
         // then the first two minutes is used entirely and the
         // remaining is minutes subtracted by two
         first = 2;
         remaining = minutes - 2;
      }
      else {
         // Step 2.2: If the call takes less than 2 minutes,
         // these minutes are considered part of the first two
         first = minutes;
         remaining = 0;
      }
      // Step 3: Compute the fee based on the number of minutes
      // during the first two minutes, and the number of minutes
      // after the first two minutes
      int fee = (first*5) + (remaining*2);
      Console.WriteLine("The air time fee is {0} baht.", fee);
  }
}

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

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