รูปแบบนิพจน์คำนวน


รูปแบบนิพจน์คำนวน

รูปแบบนิพจน์คำนวน

การคำนวณนิพจน์คณิตศาสตร์  การเขียนนิพจน์คณิตศาสตร์เพื่อการคำนวณจะต้องคำนึงถึงลำดับความสำคัญของเครื่องหมายสำหรับการคำนวณด้วย   โดยทั่วไปนิพจน์คณิตศาสตร์สามารถเขียนได้  3  รูปแบบดังนี้

                         .  นิพจน์อินฟิกซ์ (infix expression)     การเขียนนิพจน์ด้วยรูปแบบนี้    ตัวดำเนินการ (operator)   อยู่ตรงกลางระหว่างตัวถูกดำเนินการ (operand) 2 ตัว 

                         .  นิพจน์โพสฟิกซ์ (postfix  expression)     เป็นการเขียนนิพจน์ที่จะต้องเขียนตัวถูกดำเนินการตัวที่ 1  และตัวถูกดำเนินการตัวที่ 2  ก่อน  ตามด้วยตัวดำเนินการ

                         .  นิพจน์พรีฟิกซ์ (prefix  expression)    เป็นการเขียนนิพจน์ที่จะต้องเขียนตัวดำเนินการก่อนแล้วตามด้วย    ตัวถูกดำเนินการตัวที่  1    และตัวถูกดำเนินการตัวที่  2  ตามลำดับ 

                         ตัวอย่างนิพจน์คณิตศาสตร์  ในรูปแบบต่าง ๆ ดังนี้

  Loading image...

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

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

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

Loading image...

ขั้นตอนวิธีในการเขียนโปรแกรมแปลงนิพจน์อินฟิกซ์ไปเป็นนิพจน์โพสฟิกซ์

                         (1)  อ่านตัวอักขระในนิพจน์อินฟิกซ์เข้ามาทีละตัว

                         (2)   ถ้าเป็นตัวถูกดำเนินการ จะถูกย้ายไปเป็นตัวอักษรในนิพจน์โพสฟิกซ์

                         (3) ถ้าเป็นตัวดำเนินการจะนำค่าลำดับความสำคัญของตัวดำเนินการที่อ่านเข้ามาในขณะนั้นไปเปรียบเทียบกับค่าลำดับความสำคัญของตัวดำเนินการที่อยู่บนสุดใน สแตก   ดังนี้

                                   -  ถ้ามีความสำคัญมากกว่า จะถูกพุชลงในสแตก

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

                         (4)  ตัวดำเนินการที่เป็นวงเล็บปิด “)” จะไม่พุชลงในสแตก    แต่มีผลให้ตัวดำเนินการอื่น ๆ ถูกพ็อปออกจากสแตกนำไปเรียงต่อกันในนิพจน์โพสฟิกซ์ จนกระทั่งเจอตัวดำเนินการวงเล็บเปิด “(”   จะพ็อปวงเล็บเปิดออกจากสแตกแต่ไม่นำไปเรียงต่อ

                         (5) เมื่อทำการอ่านตัวอักษรในนิพจน์อินฟิกซ์หมดแล้วให้ทำการพ็อปตัวดำเนินการทุกตัวในสแตกนำมาเรียงต่อในนิพจน์โพสฟิกซ์ จะได้นิพจน์โพสฟิกซ์ตามที่ต้องการ

ตัวอย่าง  ขั้นตอนแสดงการแปลงนิพจน์อินฟิกซ์  A-B/C+D*E   ไปเป็นนิพจน์โพสฟิกซ์ ดังนี้

Loading image...

ตัวอย่าง  ขั้นตอนแสดงการแปลงนิพจน์อินฟิกซ์  A*(B+C-D)/E ไปเป็นนิพจน์โพสฟิกซ์   ดังนี้

                   Loading image...

                    ในการคำนวณค่านิพจน์โพสฟิกซ์ที่แปลงมาเรียบร้อยแล้ว   ตัวแปลภาษาจะทำการคำนวณโดยใช้โครงสร้างสแตกช่วยอีกเช่นกัน ซึ่งวิธีการคำนวณค่ามีลำดับขั้นตอนดังต่อไปนี้ 

                   (1)  อ่านตัวอักษรในนิพจน์โพสฟิกซ์จากซ้ายไปขวาทีละตัวอักษร แล้วทำข้อ 2  

                   (2)  ถ้าเป็นตัวถูกดำเนินการ ให้ทำการพุชตัวถูกดำเนินการนั้นลงในสแตก   แล้วกลับไปอ่านตัวอักษรใหม่เข้ามา ในข้อ 1

                   (3)  ถ้าเป็นตัวดำเนินการ ให้ทำการพ็อปค่าจากสแตก 2 ค่า   โดยตัวแรกเป็นตัวถูกดำเนินการตัวที่ 2   และตัวต่อมาเป็นตัวถูกดำเนินการตัวที่ 1

                   (4)  ทำการคำนวณ ตัวถูกดำเนินการที่ 1 ด้วย   ตัวถูกดำเนินการที่ 2    โดยใช้ตัวดำเนินการในข้อ 3

                   (5)  ทำการพุชผลลัพธ์ที่ได้จากการคำนวณในข้อ 4 ลงในสแตก

                   (6)  ถ้าตัวอักษรในนิพจน์โพสฟิกซ์ยังอ่านไม่หมดให้กลับไปทำข้อ1 ถ้าหมดแล้วจบการทำงาน

ตัวอย่าง  ขั้นตอนแสดงการคำนวณค่านิพจน์อินฟิกซ์  A * (B+C-D) / E   จากนิพจน์โพสฟิกซ์   ABC+D-*E/ โดยใช้โครงสร้างสแตกช่วยในการคำนวณดังรูปที่ 6.8

Loading image...

หมายเลขบันทึก: 183036เขียนเมื่อ 18 พฤษภาคม 2008 06:21 น. ()แก้ไขเมื่อ 21 มิถุนายน 2012 15:00 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (3)

สวัสดีคะ น้องณัฐพงษ์

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

พี่รบกวนน้องย้ายบล็อกเพื่อส่งการบ้านไปยัง http://learners.in.th คะ ซึ่งใช้งานเช่นเดียวกัน GotoKnow.org

โดย Learners.in.th นั้น เป็นบล็อกเพื่อการเรียนการสอน ดังนั้นน้องๆ นักศึกษาสามารถเขียนบล็อกเพื่อส่งงานที่นี่ได้คะ

สำหรับ GotoKnow.org เป็นบล็อกที่มีวัตถุประสงค์สำหรับการแลกเปลี่ยนประสบการณ์คะ

คือว่าอาจารย์ให้ส่งในเวปของ gotoknow ง่ะแงบรบเด๋วผมจะลองถามอาจารย์อีกรอบวันศุกร์นะแงบสับสนๆ T^T ขอบคุณพี่ๆที่ช่วยแนะนำมานะงับ

ใครเก่งโปรแกรมภาษาจาวาบ้างช่วยเขียนขั้นตอนการแสดงการคำนวณค่านิพจน์อินฟิกซ์ A * (B+E-D) / C จากนิพจน์โพสฟิกซ์ ABE+D-*C/ความยาวประมาณสองร้อยบรรทัดพร้อมทั้งอธิบายการทำงานแต่ละบรรทัดด้วย ส่งมาที่ [email protected]

จะขอบคุณเป็นอย่างสูงครับ

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท