วันพุธที่ 25 มิถุนายน พ.ศ. 2557

การใช้ลูปแบบ for



การใช้ลูปแบบ for

         for เป็นคีย์เวิร์ดสำหรับกำหนดการทำงานแบบวงรอบหรือลูป (Loop) จากค่าเริ่มต้น จนถึงค่าสุดท้ายของตัวที่ใช้เป็นตัวนับ โดยที่ตัวนับไม่จำเป็นต้องเริ่มต้นจาก 0 และอาจเป็นการนับแบบเพิ่มค่า หรือลดค่าก็ได้รูปแบบพื้นฐาน คือการใช้ลูปแบบ for

   โดยโปรแกรมจะเปรียบเทียบตัวนับว่าอยู่ภายในเงื่อนไขหรือไม่ หากอยู่ภายในเงื่อนไขก็เปลี่ยนค่าของตัวนับเพื่อนวนลูปถัดไป แต่หากตัวนับไม่อยู่ในเงื่อนไขก็จะออกจากลูปไป เช่น


       ความหมายของลูป for จากโค้ดข้างบนคือ ให้เริ่มนับจาก 0 ถ้า i ยังมีค่าน้อยกว่าหรือเท่ากับ 10 ก็ให้เพิ่มค่าตัวนับไปอีก 1 แล้ววนลูปไปเรื่อยๆและในรูปต่อๆไปค่า i ก็จะถูกเพิ่มทีละ 1 ซึ่งลูปจะสิ้นสุดเมื่อเงื่อนไข i <= 10 เป็นเท็จ หรือเมื่อ i มีค่ามากกว่า 10 นั่นเอง

ของควรรู้เพิ่มเติมสำหรับลูป for มีดังนี้

1. สำหรับวิธีการเปลี่ยนค่าของตัวนับนั้น อาจจะเป็นการเพิ่มค่า หรือลดค่าก็ได้ นอกจากนี้ก็ไม่จาเป็นต้องเพิ่มหรือลดทีละ 1 อาจเป็นค่ามากกว่า 1 ก็ได้ เช่น

2. ตัวนับอาจไม่ใช่เลขจำนวนเต็มเสมอไป อาจเป็นเลขจุดทศนิยมก็ได้ เช่น

3. ไม่ ควรเปลี่ยนไปค่าตัวนับภายในลูป เพราะอาจเกิดข้อผิดพลาดขึ้นได้ เช่น


ตัวอย่าง 3.4 ถ้าเราต้องสร้างรูปสามเหลี่ยมที่มีการจัดเรียงดังรูป จะมีหลักการคิดดังนี้ คือ


-  จำนวนที่เครื่องหมาย * แต่ละบรรทัดจะเท่ากับลำดับของบรรทัดนั้น เช่น บรรทัดที่ 1 มี 1 อัน, บรรทัด
   ที่ 2 มี 2 อันเป็นต้น
-  ใน .NET นั้นตัวแปรชนิดสตริงจะมีคำสั่ง (เมธอด) ในการเขียนอักขระซ้า เพื่อให้ผลลัพธ์มีจำนวน
   อักขระตามที่กำหนด คือ PadRight() เช่น
 - สำหรับการเขียนโปรแกรม เราจะใช้ลูป for เพื่อเขียนแต่ละบรรทัด โดยตัวนับของลูปก็คือลำดับ
   บรรทัด และจะใช้ตัวนับในการกำหนดเป็นจำนวน * ที่ต้องเขียนในลูปนั้นๆ
  ในตัวอย่างจะมีการ
   พลิกแพลงเล็กน้อย คือ ผู้ใช้สามารถกำหนดจำนวนบรรทัด และอักขระที่จะใช้เองได้ ดังต่อไปนี้

1.วางคอนโทรล พร้อมกำหนดชื่อที่จำเป็นดังรูป

2.ดับเบิลคลิกที่ปุ่ม แสดงผล แล้วกำหนดโค้ดดังนี้

3. รันโปรแกรม แล้วใส่อักขระและจำนวนที่ต้องการ ซึ่งลักษณะผลลัพธ์จะเป็นดังนี้
4. จากตัวอย่างนี้ หากเราต้องการให้เป็นสามเหลี่ยมกลับหัวดังรูป ให้กำหนดลูปแบบนับลง โดย
    เริ่มนับลง โดยเริ่มนับจากจำนวนบรรทัดไปยัง 1 เช่น ซึ่งเราแก้ไขโค้ดเพียงบรรทัดเดียว คือ


ตัวอย่าง 3.5 
ตัวอย่างนี้เป็นการพลิกแพลงเพิ่มเติมจากตัวอย่างที่แล้ว โดยนำอักขระที่กำหนดมาสร้างเป็นรูปสามเหลี่ยมในลักษณะดังรูป โดยมีหลักการคิดที่ซับซ้อนกว่าตัวอย่างที่เล็กน้อย ดังแนวทางต่อไปนี้


- จากรูป สิ่งที่เราต้องเขียนลงไปแต่ละแถว คือ อักขระและช่องว่างหน้าอักขระ
- จำนวนอักขระที่ต้องเขียนในแต่ละแถว คือ 1,3,5,7, … ตามลำดับ หรือเป็นเลขคี่นั่นเองสูตรในการคิดก็
  คือ (2*ลาดับ)-1
- จำนวนช่องว่างหน้าอักขระที่ต้องเขียนในแต่ละแถว จะสัมพันธ์กับจำนวนแถวที่ต้องเขียน เช่น สมมุติ
  เราจะเขียนทั้งหมด 4 แถว แสดงว่า
แถวที่ 1 จะต้องมีช่องว่าง 3 ช่อง
แถวที่ 2 จะต้องมีช่องว่าง 2 ช่อง
แถวที่ 3 จะต้องมีช่องว่าง 1 ช่อง
แถวที่ 4 จะต้องมีช่องว่าง 0 ช่อง 
ดังนั้น สูตรในการคิดสหรับการเขียนช่องว่างของแต่ละบรรทัด คือ จำนวนแถว – ลำดับแถว

- เนื่องจากฟอนต์ โดยทั่วไปความกว้างของอักขระกับความกว้างของช่องว่างจะไปเท่ากัน ทำให้แต่ใน
  การแสดงผลนั้น แถวในแนวตั้งมักจะจัดเรียงได้ไม่ตรงกัน ซึ่งจะดูไม่สวย แต่เราสามารถแก้ไขปัญหา
  โดยการกำหนดฟอนต์เป็นชนิด Fixed Font หรือฟอนต์ที่มีความกว้างของอักขระเท่ากันหมด เช่น
  Courier
  

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

1. จัดวางคอนโทรลลงไป พร้อมกำหนดพร็อปเพอร์ตี้ที่สาคัญดังรูป

2. ดับเบิ้ลคลิกที่ปุ่ม แสดงผล แล้วกำหนดโค้ดลงไปดังนี้


3. รันโปรแกรม แล้วกำหนดอักขระและจำนวนแถว ลักษณะผลลัพธ์เป็นดังนี้


วันอังคารที่ 24 มิถุนายน พ.ศ. 2557

การใช้คาสั่ง switch…case

การใช้คำสั่ง switch…case

     ใช้ในกรณีที่ค่าของข้อมูลที่เราต้องการตรวจสอบนั้น อาจเป็นไปได้หลายกรณีโดยกาหนดว่าค่าที่เป็นไปได้ในแต่ละกรณีนั้นจะต้องทำอย่างไรอย่างไร ซึ้งการใช้ switch นี้จะคล้ายกับการเปรียบเทียบด้วย else if แต่ในบางครั้งอาจไม่สะดวกที่จะใช้ else if ก็สามารถใช้ switch แทนได้ รูปแบบที่ใช้มีดังนี้


เช่น

ข้อควรทราบเพิ่มเติมเกี่ยวกับการใช้คาสั่ง switch…case

     คำสั่ง break เป็นคาสั่งให้โปรแกรมออกจากบล็อกของคาสั่ง switch หากเจอเขื่อนไขที่ต้องการแล้ว มิฉะนั้นโปรแกรมจะยังตรวจสอบเงื่อนไขถัดไปเรื่อยๆ แม้ว่าจะพบกับเงื่อนไขที่ต้องการแล้วก็ตาม ส่วนคำสั่ง default นั้นจะมีหรือไม่ก็ได้ขึ้นกับว่าเราจาเป็นต้องสั่งให้ทำอะไร หากไม่ตรงกับ case ใดๆ เลยหรือไม่

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



     โค้ดนี้หมายความว่า หาก m มีค่าอย่างใดอย่างหนึ่งระหว่าง (Jan, Mar, May, Jul, Aug, Oct, Dec) จะพิมพ์คาว่า “This month has 31 days” แต่หากตัวแปร m มีค่าใดอย่างหนึ่งระหว่าง (Apr, Jun, Sep, Nov) จะพิมพ์คาว่า “This month has 30 days” ส่วนที่เหลือก็พิจารณาในทำนองเดียวกัน ซึ่งหากเราเปลี่ยนไปใช้ if จะเขียนได้เป็น



วันพฤหัสบดีที่ 12 มิถุนายน พ.ศ. 2557

การตรวจสอบหลายเงื่อนไข

การตรวจสอบหลายเงื่อนไข

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

หลักการสำคัญ

-ใช้โอเปอเรเตอร์ && ถ้าต้องการให้เงื่อนทั้งหมดเป็นจริง จึงจะทำตามคำสั่ง
-ใช้โอเปอเรเตอร์ || ถ้าต้องการเพียงเงื่อนไขอันใดอันหนึ่งเป็นจริง ก็จะทำตามคำสั่ง

พิจารณาจากโค้ดต่อไปนี้



นอกจากนี้สามารถตรวจสอบได้มากกว่า เงื่อนไข


     ถ้ามีมากกว่า 2 เงื่อนไข และใช้โอเปอเรเตอร์ต่างกัน ควรใช้วงเล็บในการแยกแต่ละกลุ่มให้ชัดเจนว่าเงื่อนไขใดจะเปรียบเทียบกับเงื่อนไขใด มิฉะนั้นอาจเกิดข้อผิดพลาด

 ตัวอย่างที่ 3.3

     เงื่อนไขของปีที่เป็นปี leap Year (เดือนกุมภาพันธ์มี 29 วัน)นั้นมี 2 อย่างดังนี้(ถ้าให้ตัวแปร year แทนปีที่ตองการตรวจสอบ)

-ปีนั้นต้องหารด้วย 400 ลงตัว ดังนั้นลักษณะเงื่อนไขจะเป็นดังนี้
-หรือปีนั้นต้องหารด้วย 100 ไม่ลงตัว แต่หารด้วย 4 ลงตัว ดังนั้นลักษณะเงื่อนไขจะเป็นดังนี้

เราสามารถทดสอบปี Leap Year ได้ดังนี้

1.จัดวางคอนโทรลลงไปดังรูป

2. ดับเบิ้ลคลิกที่ปุ่ม ตรวจสอบ แล้วกำหนดโค้ดดังนี้

3. รันโปรแกรม แล้วกำหนดปี ค.ศ. ลงไป เมื่อคลิกปุ่ม ตรวจสอบ ลักษณะผลลัพธ์เป็นดังนี้


วันพฤหัสบดีที่ 22 พฤษภาคม พ.ศ. 2557

การตรวจสอบเงื่อนไขด้วย if

การใช้คำสั่ง if

    ใช้สำหรับการตรวจสอบเงื่อนไขก่อนการทำตามคำสั่ง หากตรงกับที่กำหนดหลัง if จะทาตามคำสั่งที่อยู่ภายในบล็อก { } โดยมีรูปแบบดังนี้ คือ


    สำหรับการกำหนดเงื่อนไขต้องเขียนไว้ในวงเล็บเสมอ และสิ่งที่จะนำมากำหนดเป็นเงื่อนไขของ if นั้นต้องให้ค่าออกมาเป็น true หรือ false เท่านั้น เช่น




คำสั่ง if…else


การใช้คำสั่ง else if

    คำสั่ง else if ในกรณีที่มีการตรวจสอบหลายๆ เงื่อนไขทำให้ไม่สะดวกต่อการใช้ if หลายๆ ครั้ง เราสามารถใช้ else if เข้ามาช่วยตรวจสอบในแต่ละเงื่อนไขได้โดยใช้รูปแบบ คือ


   
      ทั้งนี้เราจะใช้เงื่อนไข else if กี่ครั้งก็ได้ และสามารถนำทั้ง if, else if, และ else มาใช้ร่วมกันได้ แต่ต้องวาง else ไว้ในลำดับท้ายสุด เช่น


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


      จากที่กำหนด score=75 แสดงว่าตรงกับเงื่อนไข (score>=70) และ(score>=60) แต่เนื่องจากเราวางเงื่อนไข (score>=70) เอาไว้ก่อน ดังนั้น เฉพาะเงื่อนไข (score>=70) เท่านั้นที่จะถูกเลือก และหลังจากที่ทำตามเงื่อนไขนี้เสร็จ ก็ข้ามการตรวจสอบเงื่อนไขส่วนนี้ไปเลย

การใช้คำสั่ง if ซ้อนกัน (Nest if)

     สาเหตุที่ต้องใช้คำสั่ง if ซ้อนกันหลายชั้น เนื่องจาก การทาตามคำสั่งของบางเงื่อนไขต้องขึ้นอยู่กับเงื่อนไขอื่นๆ ซึ่งการใช้ if ซ้อนกันนี้ เงื่อนไขที่อยู่นอกสุดต้องเป็นจริง เงื่อนไขที่อยู่ในลำดับถัดไปจึงจะถูกประมวลผล


ตัวอย่าง

      การเปรียบเทียบว่าช่วงอายุดังกล่าวจะอยู่ในวัยใด โดยรับข้อมูลปี พ.ศ. ที่เกิดแล้วนำไปคำนวณหาอายุจากปีปัจจุบัน โดยปีปัจจุบันหาได้จาก DateTime.Now.Year

1. จัดวางคอนโทรลดังรูป



2. กำหนดโค้ดสำหรับเมื่อคลิกที่ปุ่ม ตรวจสอบ ดังนี้

3. รันโปรแกรม แล้วลองกำหนด พ.ศ. ที่เกิดลงไป จะได้ผลลัพธ์ลักษณะดังนี้