โปรแกรมย่อย (Sub Program)
สร้างขึ้นมาเพื่อ อำนวยความสะดวกในการเขียนโปรแกรม เพื่อแบ่งการทำงานของโปรแกรมออกเป็นส่วน ๆ ตามหน้าที่การทำงาน มีอยู่ 2 ประเภท ฟังก์ชั่น (Function) โพรซิเยอร์ (Procedure)
ตำแหน่งของโปรแกรมย่อย อยู่ที่ส่วนของการประกาศ (Declaration Part)
ส่วนประกอบของโปรแกรมย่อย ประกอบด้วย 3 ส่วน เหมือนกับในส่วนของโปรแกรมหลัก ส่วนหัว ของโปรแกรมย่อย (Sub Program Heading) ส่วนประกาศ ของโปรแกรมย่อย (Sub Program Declaration Part) ส่วนคำสั่ง ของโปรแกรมย่อย (Sub Program Statement Part)
ส่วนหัว ของโปรแกรมย่อย (Sub Program Heading) ใช้ในการประกาศ ชื่อของ โปรแกรมย่อย ใช้ในประกาศข้อมูลที่ส่งให้กับโปแกรมย่อย และข้อมูลที่ส่งกลับมาจากโปรแกรมย่อย ส่วนประกาศ ของโปรแกรมย่อย (Sub Program Declaration Part) ใช้ในการประกาศ ชนิดข้อมูล, ค่าคงที่, ตัวแปร ที่ใช้ในโปรแกรมย่อย
ส่วนคำสั่ง ของโปรแกรมย่อย (Sub Program Statement Part) ใช้ในการประกาศ โปรแกรมย่อย ที่ถูกเรียกใช้งาน ในโปรแกรมย่อยนี้ ส่วนคำสั่ง ของโปรแกรมย่อย (Sub Program Statement Part) เป็นส่วนที่เป็นลำดับขั้นตอนการทำงานของโปรแกรมย่อย ขึ้นต้อนด้วยคำว่า begin จบด้วยคำว่า end;
ฟังก์ชั่น (Function) ตัวอย่างของ ฟังก์ชั่นที่มีใช้งานในภาษาปาสคาลเช่น การหารากที่ 2 การหาค่ายกกำลัง 2 การหาค่าของ ex นอกจากนี้ผู้ใช้งาน ยังสามารถเขียนฟังก์ชั่นขึ้นมาใช้งาน เพิ่มเติม ตามความต้องการ
การประกาศส่วนหัวของฟังก์ชั่น Identifier คือส่วนที่ใช้ประกาศชื่อของ ฟังก์ชั่น Parameter list คือส่วนที่ใช้ในการประกาศ ค่าต่าง ๆ ที่ส่งให้กับฟังก์ชั่น Type of return value คือชนิดของข้อมูลที่ฟักช์ชั่นนั้น ส่งค่ากลับคืน
การประกาศในส่วน ของ Parameter list ตัวอย่างฟังก์ชั่น มาตรฐานของภาษาปาสคาล เช่น SQRT(X) : Parameter ที่ส่งให้ฟังก์ชั่นคือ x, ค่าที่ฟังก์ชั่นนี้ ส่งกลับคือ ข้อมูลชนิด Real
ตัวอย่างการประกาศส่วนหัวของ ฟังก์ชั่น Function example1(a : integer) : integer; Function example2(a, b : integer) : Boolean; Function example3(a : integer; b : real) : real; Function example4(var a : integer) : integer; Function example5(a : integer; var b : integer) : integer; Function example6(var a : integer; b,c : integer) : char;
Global variable VS Local Variable คือ ตัวแปรที่ประกาศ ที่ส่วน Declaration part ของ Main program สามารถเรียกใช้งานได้ Main program และโปรแกรมย่อยทุกโปรแกรม Local Variable คือ ตัวแปรที่ประกาศในส่วน Declaration part ของโปรแกรมย่อย สามารถเรียกใช้งานได้จากโปรแกรมย่อยที่เป็นผู้ประกาศเท่านั้น โปรแกรมย่อยอื่น และ Main program จะไม่สามารถเรียกใช้งานได้
Program Ex1(input, output); Var a,b : integer; Function Sub_Program1 (x,y : integer) : integer; Var c : integer; begin c := x + y; Sub_Program1 := c; {การส่งค่ากลับจากฟังก์ชั่น} end; Begin a := 5; b := 10; a := Sub_Program1(a,b); write(a); End.
ชนิดของ Parameter คือ ข้อมูลที่ใช้ในการติดต่อระหว่างโปรแกรมย่อย กับโปรแกรมหลัก มีอยู่ 2 ประเภท คือ Actual Parameter คือ พารามิเตอร์ที่ใช้ในการส่งข้อมูลจากโปรแกรมหลัก ไปยังโปรแกรมย่อย Formal Parameter คือ พารามิเตอร์ที่ใช้ทำการรับข้อมูล เพื่อนำมาใช้งานในโปรแกรมย่อย
จากตัวอย่างโปรแกรม ตัวแปร a และ b คือ Actual Parameter ตัวแปร x และ y คือ Formal Parameter ฟังก์ชั่น Sub_Program1 ส่งค่ากลับเป็นข้อมูลชนิด integer การส่งค่ากลับทำได้โดยใช้คำสั่ง Assignment Statement ดังแสดงในบรรทัดสุดท้ายของฟังก์ชั่น Sub_Program1
ตัวแปรที่ประกาศในโปรแกรมย่อย สามารถตั้งซ้ำกับตัวแปรที่ประกาศในส่วนของ Main program หรือโปรแกรมย่อยอื่นได้ ถ้ามีการเรียกใช้งานตัวแปร ในโปรแกรมย่อย ในกรณีที่มีชื่อซ้ำกับ Main program หรือโปรแกรมย่อยอื่น จะหมายถึงการเรียกใช้ตัวแปรที่ประกาศในโปรแกรมย่อยนั้น
Program Demo1(input, output); Var x,b : integer; Function Sub_demo (b : integer) : integer; begin b := SQR(x) + 10; Sub_demo := b; end; Begin x := 10; b := 5; x := Sub_demo(x); write(b,x); End.
การส่งค่า Parameter มีวิธีการส่งค่าให้กับโปรแกรมย่อยอยู่ 2 แบบ คือ 1. ส่งแบบให้ค่า (Pass by value) 2. ส่งแบบอ้างอิง (Pass by reference) ส่งแบบให้ค่า (Pass by value) การส่งค่าด้วยวิธีนี้ โปรแกรมย่อยจะทำการสร้างตัวแปรขึ้นมารองรับ ถ้าค่าข้อมูลในตัวแปรเปลี่ยนแปลงไปจะไม่มีผลกับค่าข้อมูลที่ Main program ส่งมาให้โปรแกรมย่อย
ส่งแบบอ้างอิง (Pass by reference) โปรแกรมย่อยจะทำการสร้างตัวชี้ (Pointer) เพื่อชี้ไปยังช่องเก็บข้อมูลของโปรแกรมหลัก ที่ใช้ในการเก็บข้อมูลนั้น ถ้าค่าข้อมูลในตัวแปรเปลี่ยนแปลงไปจะส่งผลให้ข้อมูลที่ Main program เปลี่ยนแปลงตามไปด้วย การประกาศเพื่อใช้งานการส่งค่าแบบอ้างอิง จะประกาศโดยใช้คำว่า Var ขึ้นต้น
Program Pass_Parameter(input, output); Var a,b : integer; ans : integer; Function Pass_Para(x : integer ; Var y : integer) : integer; begin x := x + 35; y := y – 15; Pass_Para := x – y; end; Begin a := 10; b := 20; ans := Pass_Para(a, b); write(a, b, ans); End.