ฟังชันเพื่อคำนวณค่าแฟกตอเรียล
ฟังชันเพื่อคำนวณค่าแฟกตอเรียล (Factorial) ดังนี้
FUNCTION Factorial (N : integer) : integer;
BEGIN IF N = 0 THEN Factorial := 1 ELSE Factorial := N * Factorial(N - 1) END;
BEGIN {Main} P := Factorial (3);
END;
การตรวจสอบอักขระสมดุล (Balancing Symbol) ผู้ที่มีประสบการณ์ในการเขียนโปรแกรมมาแล้ว จะพบว่าสิ่งที่เรามักจะหลงลืมเมื่อเขียนโปรแกรม และทำให้เกิดข้อผิดพลาดอยู่บ่อย ๆ คือ การหลงลืมอักขระสมดุล เช่น { คู่กับ }, [ คู่กับ ], ( คู่กับ ) เป็นต้น ซึ่งในการตรวจสอบอักขระสมดุลนั้น คอมไพเลอร์นำชนิดข้อมูลแบบสแตกมาประยุกต์ใช้ได้ โดยมีวิธีการดังนี้ ให้อ่านอักขระทีละตัว ถ้า อักขระเป็นอักขระเปิด เช่น {, [, (, เป็นต้น
ให้ Push ลงสแตก ถ้า อักขระเป็นอักขระปิด เช่น }, ], ), เป็นต้น ให้ตรวจสอบว่าอักขระบน Top ของสแตกเป็นอักขระเปิดที่คู่กันหรือไม่ ถ้าใช่ ให้ Pop อักขระนั้นออกจากสแตก แต่ถ้าไม่ใช่ แสดงผล error เมื่ออ่านอักขระหมดแล้ว แต่สแตกไม่เป็นสแตกว่างให้แสดงผล error
การคำนวณค่าของนิพจน์เลขคณิต (Arithmetic Expression ) โดยทั่วๆ ไปทางคณิตศาสตร์ เรามักนิยมเขียนนิพจน์เลขคณิตในลักษณะที่เรียกว่า สัญกรณ์เติมกลาง (infix notation) คือตัวดำเนินการ (operator) จะอยู่ตรงกลางของตัวถูกดำเนินการ (operand) ดังรูป operand operator operand ตัวดำเนินการ ก็คือ เครื่องหมายทางคณิตศาสตร์ สำหรับการคำนวณต่างๆ เรียงตามลำดับการดำเนินการก่อน-หลัง (precedence) ได้แก่ ยกกำลัง ^ คูณ หาร * , / บวก ลบ + , - ถ้าเครื่องหมายมีลำดับการดำเนินการเดียวกัน จะเลือกดำเนินงานของเครื่องหมายจากซ้ายไปขวา และถ้ามีวงเล็บจะดำเนินงานสิ่งที่อยู่ในวงเล็บก่อน ในการคำนวณนิพจน์เลขคณิตด้วยคอมพิวเตอร์ คอมพิวเตอร์จะทำการแปลงนิพจน์ที่เขียนแบบสัญกรณ์เติมกลาง ให้เป็นแบบสัญกรณ์เติมหลัง (postfix notation) ก่อน คือ จะอยู่ในรูปแบบที่ตัวดำเนินการ (operator) อยู่หลัง
เช่น A + B - - - - > AB+ A - B - - - - > AB- A * B - - - - > AB* A / B - - - - > AB/ A ^ B - - - - > AB^
ชนิดข้อมูลแบบสแตกได้นำมาใช้ในการเปลี่ยนนิพจน์ในรูปแบบของสัญกรณ์เติมกลาง ให้เป็นสัญกรณ์เติมหลัง และนำมาใช้ในการหาค่าของนิพจน์นั้นๆ ด้วย ดังรายละเอียดในวิธีการ (algorithm) ดังต่อไปนี้ วิธีการเปลี่ยนนิพจน์แบบเติมกลางให้เป็นแบบเติมหลัง อ่านค่าตัวอักขระของนิพจน์ ซึ่งอักขระนี้จะเป็นได้ดังกรณีต่อไปนี้ เป็นตัวถูกดำเนินการ (operand), เป็นวงเล็บเปิด ”(“, เป็นวงเล็บปิด”)”, เป็นตัวดำเนินการ (operator) IF ตัวอักขระเป็น operand THEN ให้แสดงผลลัพธ์ตัวอักขระนั้น ELSE ตัวอักขระอาจจะเป็นวงเล็บหรือ operator IF สแตกว่าง THEN Push ตัวอักขระลงบนสแตก ELSE สแตกไม่ว่าง IF ตัวอักขระเป็น (“ THEN Push ตัวอักขระลงบนสแตก ELSE ตัวอักขระเป็น “) หรือ operator IF ตัวอักขระ เป็น “) THEN PoP สิ่งที่อยู่บนสแตกจนกระทั่งพบ “(“ และ pop ออกมาด้วย ELSE ตัวอักขระเป็น operator (สิ่งที่อยู่บนสแตก “(“ มี priority ต่ำสุด) IF priority (ตัวอักขระ) > priority (สิ่งที่อยู่บนสแตก) THEN Push ตัวอักขระลงบนสแตก ELSE Pop สิ่งที่อยู่บนสแตกออกจนกระทั่ง Priority (ตัวอักขระ) > priority (สิ่งที่อยู่บนสแตก) Push ตัวอักขระลงบนสแตก กลับไปที่ 1 และทำจนกระทั่งหมดข้อมูล Pop สิ่งที่อยู่ในสแตกออกมา
เหมือนเคยเรียนมาบ้างนะ พอเข้าแล้วล่ะ
อยากทราบว่าถ้าเขียน สแตกรับค่าประวิติส่วนตัว
โดนรันเบบรวดเดวหรือทีละบรรทัดทำไงหรองับ