31 August 2020

Learn to Code 1 - บทที่ 4.1 Conditional Code (for + If, else)

for + If, else

วันนี้เรามาประกอบร่าง for กับ if, else กันนะคะ! 


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


โครงสร้างของ for + if, else

for + ตัวแปร + in 1 ... + ตัวเลข + { ชุดคำสั่ง if, else }

โจทย์ : 

  • ตัวละครต้องเดินหน้า 2 ช่อง
  • ถ้าอยู่บนสวิตช์ที่ปิดอยู่ จงกดสวิตช์ 
  • ถ้าอยู่บนที่ซึ่งมีอัญมณี จงเก็บอัญมณี
  • นอกเหนือจากนั้น จงเดินหน้า

คำสั่ง :

  • เดินหน้า moveForward()
  • กดสวิตช์ toggleSwitch()
  • เก็บอัญมณี collectGem()

เงื่อนไข :
  • อยู่บนสวิตช์ที่ปิดอยู่ isOnClosedSwitch
  • อยู่บนที่ซึ่งมีอัญมณี isOnGem


เฉลยพร้อมคำอธิบายอยู่ด้านล่างค่ะ





ฉลย :

for i in 1 ... 2 {
    moveForward()
    if isOnClosedSwitch {
        toggleSwitch()
    } else if isOnGem {
        collectGem()
    }
}

หมายเหตุ 1 โค้ดด้านบนสำหรับกรณีที่ช่องแรกไม่มีสวิตช์และอัญมณี

หมายเหตุ 2 สามารถเขียนโค้ดเพื่อแก้โจทย์นี้ได้หลายรูปแบบ ทดสอบผลลัพธ์ได้ในโปรแกรม Swift Playground บทเรียน Learn to Code 1 เรื่อง Conditional Code แบบฝึกหัดข้อ Using else if


คำอธิบาย :



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

for i in 1 ... 2 { ชุดคำสั่ง }

ดังนั้น เมื่อกดรัน (Run) เพื่อให้เริ่มทำงาน ตัวละครจะเดินตาม { ชุดคำสั่ง } ตามด้านล่างนี้

    }
         moveForward()
         if isOnClosedSwitch { toggleSwitch() }
         else if isOnGem { collectGem() }
    }



----------------------
ตัวแปร i เริ่มทำงานครั้งที่ 1

เจอคำสั่ง moveForward() 
ตัวละครเดินหน้า 1 ช่อง 

เจอเงื่อนไข if isOnClosedSwitch โปรแกรมตรวจพบสวิตช์ที่ปิดอยู่ จึงทำคำสั่ง { toggleSwitch() 
ตัวละครกดสวิตช์

เจอเงื่อนไข else if isOnGem
โปรแกรมตรวจสอบแล้วไม่พบอัญมณี จึงไม่ทำคำสั่ง { collectGem() }

จบการทำงานครั้งที่ 1



----------------------
ตัวแปร i เริ่มทำงานครั้งที่ 2

เจอคำสั่ง moveForward() 
ตัวละครเดินหน้า 1 ช่อง

เจอเงื่อนไข if isOnClosedSwitch 
โปรแกรมตรวจสอบแล้วไม่พบสวิตช์ที่ปิดอยู่ จึงไม่ทำคำสั่ง { toggleSwitch() 

เจอเงื่อนไข else if isOnGem
โปรแกรมตรวจพบอัญมณี จึงทำคำสั่ง { collectGem() }
ตัวละครเก็บอัญมณี

จบการทำงานครั้งที่ 2

จบการทำงานของโปรแกรม




ขอบคุณภาพจาก Swift Playgrounds

-- ดีบี --