ลักษณะหน้าจอของโปรแกรม คือ มีช่องสำหรับกรอกสมการ มีปุ่มสำหรับกด เมื่อต้องการคำนวณคำตอบ และช่องสำหรับแสดงวิธีหาคำตอบ เป็นดังนี้ครับ (สามารถ download ไฟล์โปรแกรมได้จาก link นี้)
กำหนดชื่อของ Textbox ตามตัวอักษรสีแดง
เพิ่ม Array จำนวน 3 ตัว ดังนี้ str_arr , digit_arr และ operator_arr
กำหนดคำสั่งในการประมวลผล โดยกำหนดค่าตัวแปรที่ใช้ในโปรแกรม construct2 ก่อน ดังภาพ
eq_str เก็บข้อความสมการ
eq_txt1 เก็บตัวเลขตัวที่ 1
eq_txt2 เก็บตัวเลขตัวที่ 2
eq_txt3 เก็บตัวเลขตัวที่ 3
operator1 เก็บเครื่องหมายตัวดำเนินการที่ 1
operator2 เก็บเครื่องหมายตัวดำเนินการที่ 2
cstr เก็บตัวอักษรในสมการ
arr_len เก็บความยาวของ array สมการ
bracket_ind เก็บตำแหน่งของ (
สร้าง Array สำหรับรายการตัวเลข และเครื่องหมาย สำหรับใช้เทียบกับสมการ ชื่อ digit_arr และ operator_arr
ผมขออธิบายลักษณะสมการที่จะเป็นไปได้สำหรับโปรแกรมที่สร้างขึ้น มีอยู่ 3 ลักษณะ คือ
1. สมการที่เขียนต่อเนื่อง ไม่มีวงเล็บ เช่น 150+40-30 สมการลักษณะนี้ จะอาศัยการพิจารณาลำดับความสำคัญของเครื่องหมายตัวดำเนินการทางคณิตศาสตร์
2. สมการที่มีวงเล็บเป็นกลุ่มแรก เช่น (150+40)-30 สมการลักษณะนี้ จะทำการคำนวณในวงเล็บเพื่อให้ได้คำตอบก่อนแล้วค่อยนำคำตอบมาคำนวณกับเลขตัวที่ 3
3. สมการที่มีวงเล็บเป็นกลุ่มหลัง เช่น 150+(40-30) สมการลักษณะนี้จะคำนวณกลุ่มหลังก่อน แล้วค่อยเอาคำตอบมาคำนวณกับเลขตัวที่ 1
หลังจากนั้น สร้างเหตุการณ์ เมื่อมีการกดปุ่ม Calculate เพื่อแสดงการคำนวณสมการที่พิมพ์ไว้แล้ว
1. อ่านค่าสมการจาก eq_txt ซึ่งเป็น textbox ที่เราพิมพ์สมการ มาเก็บไว้ที่ตัวแปร eq_str
2. กำหนดขนาดของ Array ชื่อ str_arr ให้เท่ากับความยาวของสมการ
3. เปลี่ยนข้อความสมการ ให้เป็นรูปแบบ Array เก็บไว้ที่ str_arr
โดยจะไม่เก็บค่าช่องว่างในสมการ และเครื่องหมาย () เข้าไปใน Array และเก็บตำแหน่งที่เจอ ( ด้วย เพื่อใช้เทียบลักษณะของสมการ ถ้าไม่เจอ ( ตำแหน่งของ ( จะมีค่าเป็น -1
เก็บความยาวของ array ไว้ที่ตัวแปร arr_len
4. แยกสมการไปเก็บไว้ที่ตัวแปรสำหรับเก็บค่าตัวเลขและเครื่องหมาย
บรรทัดที่ 7 จะวนซ้ำเรื่อยๆ ถ้าค่าใน array str_arr เป็นตัวเลข 0-9 โดยเทียบกับ digit_arr แล้วเก็บเลขแต่ละตัวไว้ที่ nstr แต่ถ้าไม่ใช่ตัวเลข ให้หยุดการวนซ้ำ
บรรทัดที่ 11 จะเก็บค่าเครื่องหมายทางคณิตศาสตร์ตัวที่ 1 ที่อยู่ถัดจากตัวเลขตัวที่ 1
ดำเนินการเช่นเดียวกันสำหรับการเก็บค่าตัวเลขตัวที่ 2 และ 3
5. สร้างฟังก์ชัน สำหรับหาค่าลำดับความสำคัญของเครื่องหมาย ดังนี้
โดย * และ / จะมีความสำคัญมากกว่า + และ -
6. สร้างฟังก์ชันสำหรับใช้คำนวณคำตอบ โดยการส่งค่าเครื่องหมายและตัวเลขมาให้ฟังก์ชัน ชื่อ Calc
7. เปรียบเทียบตำแหน่งของวงเล็บ เพื่อหารูปแบบสมการ
ถ้าตำแหน่งวงเล็บ เท่ากับ -1 แสดงว่าไม่มีวงเล็บในสมการ ต้องคำนวณจากลำดับความสำคัญ
การเรียกใช้ function ในโปรแกรม construct2 จะใช้คำสั่ง Call ชื่อฟังก์ชัน (ค่าพารามิเตอร์)
จากบรรทัดที่ 22 จะเป็นการเรียกฟังก์ชัน priority แล้วส่งค่าเครื่องหมายไปให้ ฟังก์ชันจะคืนค่าลำดับความสำคัญมาเก็บไว้ที่ตัวแปร priority1 และ priority2
บรรทัดที่ 23 เปรียบเทียบถ้า priority2 มากกว่า priority1 ให้คำนวณจากกลุ่มด้านหลังก่อน จึงกำหนดค่าในช่อง Textbox ให้เอาตัวเลขที่ 2 และ 3 มาคำนวณ แล้วจึงไปคำนวณกับตัวเลขที่ 1 โดยการเรียกฟังก์ชัน Calc โดยส่งค่า operator และค่าตัวเลขจาก operand_1.text และ operand_2.txt นำคำตอบที่ได้ไปเก็บไว้ที่ textbox ชื่อ answer_1 และ operand_4 แล้วเรียกฟังก์ชัน Calc เพื่อคำนวณอีกครั้ง
บรรทัดที่ 24 เปรียบเทียบถ้า priority1 น้อยกว่าหรือเท่ากับ priority2 ให้คำนวณจากซ้ายไปขวา จึงกำหนดค่าในช่อง Textbox ให้เอาตัวเลขที่ 1 และ 2 มาคำนวณ แล้วจึงไปคำนวณกับตัวเลขที่ 3 โดยการเรียกฟังก์ชัน Calc โดยส่งค่า operator และค่าตัวเลขจาก operand_1.text และ operand_2.txt นำคำตอบที่ได้ไปเก็บไว้ที่ textbox ชื่อ answer_1 และ operand_3 แล้วเรียกฟังก์ชัน Calc เพื่อคำนวณอีกครั้ง
ถ้าตำแหน่งวงเล็บ อยู่ตำแหน่งแรก ให้คำนวณค่าตามลำดับจากซ้ายไปขวา
ถ้าตำแหน่งวงเล็บ อยู่ในกลุ่มหลัง ให้คำนวณค่าในวงเล็บหลังก่อน ค่อยนำค่าตัวเลขที่ 1 ไปคำนวณกับคำตอบที่ได้
สิ้นสุดขั้นตอนการเขียนคำสั่ง เมื่อเราทดสอบโปรแกรมจะได้คำตอบในแต่ละกรณี ดังภาพ
สมการ 150 - 8 * 5
สมการ (150 - 8) * 5
สมการ 150 - (8 * 5)
บทความนี้อาจจะยาวหน่อย แต่คิดว่าเป็นประโยชน์สำหรับผู้ที่จะนำไปประยุกต์ใช้ในการทำสื่อการสอน หรือเกมต่างๆ ด้วยโปรแกรม Construct2 นะครับ หากเกิดประโยชน์ยังไงก็ช่วยเผยแพร่ต่อไปด้วยนะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น