คำสั่ง Getkey คือคำสั่งที่ถูกเรียกใช้เพื่อให้คืนค่ากลับมาเป็นเลขรหัสของปุ่มที่ถูกกดล่าสุด เนื่องจากในแต่ละปุ่มบนเครื่องคิดเลขนั้นจะมีเลขรหัสเป็นของตัวเองที่ไม่ซ้ำกันตามภาพเปรียบเทียบนี้
จะเห็นว่าปุ่มแต่ละปุ่มมีเลขรหัสเป็นของตัวเองที่ไม่ซ้ำกันกับปุ่มอื่นเช่น ปุ่มเลข "1" มีรหัสเป็น 35, ปุ่ม "+" มีรหัสเป็น 77, ปุ่ม "DEL" มีรหัสเป็น 34 เป็นต้น ปุ่มเดียวที่ไม่มีรหัสคือปุ่ม "AC" ที่ไม่จำเป็นต้องมีเข้าใจว่าเพราะเอาไว้สำหรับหยุดการทำงานของโปรแกรม
เพื่อทำความเข้าใจคำสั่ง Getkey เรามาลองป้อนโปรแกรมตามตัวอย่างที่อยู่ในคู่มือ แต่เพื่อให้อ่านโค้ดง่ายขึ้นเลยขอแยกบรรทัดแบบนี้
มีคำสั่งที่ไม่เคยกล่าวถึงในบทความที่ผ่านมาอยู่ 4 คำสั่งคือ Locate, Ran#, Do และ LpWhile เลยจะขออธิบายสั้นๆ ดังนี้
- Locate
เนื่องจากหน้าจอของ fx-5800P สามารถแสดงผลได้ 4 บรรทัด และในแต่ละบรรทัดแสดงตัวอักษรได้ 16 ตัว ตามภาพ
คำสั่ง Locate ก็คือคำสั่งที่ใช้กำหนดตำแหน่งที่ต้องการแสดงผลมีรูปแบบการใช้งานคือ
Locate ตำแหน่งคอลัมน์ , ตำแหน่งบรรทัด , สิ่งที่ต้องการแสดง
โดยที่
- ตำแหน่งคอลัมน์ นั้นกำหนดได้ตั้งแต่ 1 ถึง 16(เนื่องจากในหนึ่งบรรทัดแสดงได้เพียง 16 ตัวอักษร)
- ตำแหน่งบรรทัด กำหนดได้ตั้งแต่ 1 ถึง 4
- สิ่งที่ต้องการแสดง นั้นอาจจะเป็น ตัวแปร, ตัวเลข หรือข้อความก็ได้
ตัวอย่างเช่น Locate 5 , 3 , "HELLO" คือการสั่งให้แสดงข้อความว่า HELLO ในบรรทัดที่ 3 และตำแหน่งที่ 5(ตัวอักษรตัวแรกเริ่มที่คอลัมน์ 5)
- Ran#
คือคำสั่งแสดงตัวเลขที่เกิดจากการสุ่มขึ้นมาโดยจะมีค่าเป็นเลขทศนิยมอยู่ระหว่าง 0 ถึง 1(มากกว่า 0 แต่น้อยกว่า 1) ทดลองใช้คำสั่งนี้สามครั้งได้ผลดังนี้
จะเห็นว่าผลลัพธ์ที่ได้จากคำสั่งนี้ไม่เท่ากันซักครั้งเนื่องจากค่าที่ได้ในแต่ละครั้งเกิดจากการสุ่มตัวเลข
- Do... LpWhile
Do และ LpWhile เป็นคำสั่งที่ใช้ร่วมกันในวนลูป(วนซ้ำการทำงาน)ตามเงื่อนไขที่กำหนดไว้ท้ายคำสั่ง LpWhile จากตัวอย่างข้างต้น การวนลูปเริ่มต้นที่คำสั่ง Do จากนั้นก็ทำงานตามคำสั่งที่อยู่ภายในลูปจนถึงคำสั่ง LpWhile มีการตรวจสอบตามเงื่อนไขที่ระบุไว้ท้ายคำสั่งซึ่งถ้าเป็น "จริง" โปรแกรมจะย้อนกลับไปทำที่คำสั่ง Do อีกครั้ง แต่ถ้าเงื่อนไขเป็น "เท็จ" โปรแกรมจึงจะข้ามคำสั่ง LpWhile เพื่อทำงานในบรรทัดถัดไป(ุถ้ามี)
แต่โดยส่วนตัวแล้วผมไม่ค่อยชอบใช้คำสั่งพวก Do... LpWhile ซักเท่าไหร่เพราะขี้เกียจจำเงื่อนไขเยอะแยะหลายตัว นอกจากนี้ในภาษาของ fx-5800P ยังมีคำสั่ง While... WhileEnd อีกตัวที่พาให้สับสน(คงสับสนแค่ผมคนเดียว ^ ^) ถ้าใครขี้เกียจจำคำสั่งแบบผมจะลองหันมาใช้บริการ If... Then... IfEnd โดยแก้คำสั่งใหม่ตามโค้ดข้างล่างนี้ก็ได้ ให้ผลลัพธ์เหมือนกัน
หลังจากทำความเข้าใจกับคำสั่งเพิ่มเติมแล้ว ทีนี้จะขออธิบายการทำงานของโปรแกรมอย่างคร่าวๆ พอเข้าใจ
- โปรแกรมเริ่มต้นด้วยการกำหนดตำแหน่งจุดเริ่มต้นลูป
- แสดงผลตัวเลขที่เกิดจากการสุ่มในบรรทัดที่ 1
- บรรทัดถัดมาแสดงข้อความแนะนำว่าให้กดปุ่มเลข 0(เพื่อหยุดการสุ่มตัวเลข)
- บรรทัดสุดท้ายตรวจสอบว่าปุ่มที่ถูกกดล่าสุดมีรหัสที่ไม่ใช่ 25 ? (ปุ่มเลข "0") ซึ่งถ้าเงื่อนไขเป็น "จริง" (ไม่กดปุ่ม 0) โปรแกรมจะกลับไปทำงานที่ตำแหน่งเริ่มต้นลูป แต่ถ้าเงื่อนไขเป็น "เท็จ" (กดปุ่ม 0) โปรแกรมจึงจะออกจากลูป
ผลการรัน ที่บรรทัดแรกจะแสดงตัวเลขที่เกิดจากการสุ่มออกมาอย่างที่ไม่รู้จักเหน็ดเหนื่อย ส่วนบรรทัดที่สองก็แสดงข้อความ "PRESS 0" คือให้กดเลขศุนย์ซักทีสิ(เหนื่อยแล้วนะ) ทีนี้ลองกดปุ่มอื่นๆ ที่ไม่ใช่ปุ่ม "0" กับปุ่ม "AC" จะเห็นว่าโปรแกรมก็ยังทำงานเหมือนเดิมต่อไปเรื่อยๆ เมื่อดูจนพอใจแล้วก็กดปุ่ม "0" โปรแกรมจึงหยุดทำงาน
จากชื่อหัวข้อบทความ "เขียนเมนูตัวเลือกแบบไม่ต้องกด EXE" ทีนี้เราจะเอา Getkey มาใช้สร้างเมนูอย่างที่ว่ากันซักที จะขออธิบายเพียงเล็กน้อย โปรแกรมนี้มีขั้นตอนการทำงานดังนี้
- สร้างเมนูตัวเลือก 2 ตัวคือ กดปุ่มเลข 1 คือ "YES" กดปุ่มเลข 2 คือ "NO"
- หลังจากนั้นก็ใช้คำสั่ง GetKey เพื่ออ่านค่าเลขรหัสปุ่มกด
- เปรียบเทียบปุ่มกดเป็น "1" หรือ "2" หรือไม่ ถ้าไม่ใช่กลับไปทำงานข้อ 2
- ถ้าปุ่มกดเป็น "1" แสดงผล "YES", ถ้าเป็น "2" แสดงผล "NO"
เมื่อกดปุ่มเลข 1 หรือเลข 2 จะได้ผลลัพธ์ตามลำดับ
ใครที่ต้องการความแตกต่างในการสร้างเมนูหรือมีไอเดียอื่นๆ ที่น่าสนใจก็ลองนำไปประยุกต์ดูได้ตามความคิดสร้างสรรค์ของแต่ละบุคคล
จบบท
นอกเรื่อง (ไม่ต้องอ่านก็ได้)
บทความนี้เปิดประเดิม E-mail ใหม่ที่เป็นทางการมากขึ้นและขออนุณาตเปลี่ยนสรรพนามแทนตัวเองใหม่จาก "ผู้เขียน" เป็น "ผม" ก็แล้วกันเนื่องจากคำว่า "ผู้เขียน" มันทำให้รู้สึกเกร็งๆ ยังไงก็ไม่รู้ ^ ^
ช่วงหลังนี้ผมไม่ค่อยได้มีเวลามาเขียนบล็อกบ่อยนักเนื่องจากช่วงนี้ใช้เวลาไปกับการเขียนแอปใหม่ซะเป็นส่วนใหญ่ อย่างแอปตัวล่าสุดที่เพิ่งเขียนเสร็จคือ Circular Curve ตัวนี้ตั้งใจเขียนเพื่อขายแต่ยังไม่ได้ตัดสินใจว่าจะขายในช่องทางไหนและตอนนี้อยู่ระหว่างทดสอบแอป เอาไว้โอกาสหน้าจะรีวิวให้ชมกัน
ผมอยากรู้การใช้งานปุ่มแต่ละปุ่มอ่ะครับว่ามันใช้งานยังไง
ตอบลบผมไม่เข้าใจคำถาม คุณอยากรู้การทำงานของปุ่มหรือคำสั่งไหนเหรอครับ ยังไงช่วยระบุอีกที
ลบแต่ถ้าหมายถึงให้อธิบายการทำงานของทุกปุ่มแนะนำว่าให้หาคู่มือมาอ่านดีกว่าครับ ผมอธิบายไปอาจจะไม่กระจ่าง แต่ถ้าคุณอ่านคู่มือแล้วมีข้อสงสัยแล้วถามเป็นเรื่องๆ อย่างนั้นจะดีกว่า ^ ^
ผมจะเขียนโปรแกรมประมาณค่าฟังก์ชันอะครับ แต่ผมไม่รู้ว่าจะทำอย่างไรให้โปรแกรมของผมใส่ค่าซ้ำเข้าไปที่ฟังก์ชันเดิมแล้วคำนวณเิงไปเรื่อยๆอะครับ โดยที่ฟังก์ชันของผมต้องอินพุทเข้าไปเองตอนโปรแกรมรัน
ตอบลบต้องขอโทษด้วยครับที่ตอบช้า ช่วงนี้ผมไม่ค่อยมีเวลาเข้ามาเขียนบล็อก เลยไม่รู้ว่ามีคำถามเข้ามา
ลบผมยังไม่ค่อยเข้าใจคำถาม ลองยกตัวอย่างให้ดูซักหน่อยครับว่าจะป้อนค่าอะไรและให้แสดงค่าอะไรบรรทัดไหนบ้าง ยินดีให้คำแนะนำเท่าที่จะทำได้ครับ
ผมสงสัยการใช้เครื่องหมาย ":" ครับ
ตอบลบเครื่องหมาย ":" (Separator หรือ Colon)
ลบใช้สำหรับคั่นระหว่างชุดคำสั่งเพื่อบอกให้รู้ว่าคำสั่งที่อยู่ทางซ้าย(ของ :)และคำสั่งที่อยู่ทางขวาเป็นคำสั่งคนละชุดกัน
โดยทั่วไปเราจะใช้ประโยชน์จากเครื่องหมายนี้ในการรวมคำสั่งหลายๆ บรรทัดให้อยู่ในบรรทัดเดียวกัน เช่น
"A"?→A↵
"B"?→B↵
A+B◢
เราสามารถเขียนใหม่ให้อยู่ในบรรทัดเดียวกันโดยใช้เครื่องหมาย : คั่นได้ดังนี้
"A"?→A:"B"?→B:A+B◢
ขอบคุณครับ
ลบขอบคุนครับ😊😊😊
ตอบลบ