Eddig tanultainkból látjuk, hogy a Pascal program a végrehajtandó utasításokat a program törzsében tartalmazza. Ám sokszor szükséges, hogy adott műveleteket többször végrehajtsunk a program különböző helyein. Például ugyanazon adatokat többször szükséges beolvasni, eredményeket kiírni, részfeladatokat leíró utasítássorozatokat többször kell végrehajtani, stb. Az utasításcsoportok többszöri felesleges ismétlését helyettesíti az alprogram.

Az alprogram egyszerűen az utasításoknak egy blokkja, amely azért készül, hogy a programozó kívánalmainak megfelelően többször legyen végrehajtva. Az alprogramnak szintén van neve, és a főprogramon vagy más alprogramon belül lehet meghívni, hogy végrehajtsa utasításait.

Az alprogramok egyik nagy előnye, hogy a Pascal program szerkezete áttekinthetőbb, rövidebb és strukturáltabb, ha a logikailag összetartozó utasításokat egy csoportba foglaljuk. Másik nagy előnye, hogy a programban többször, különféle paraméterekkel aktiválhatjuk, ezáltal sok munkát takarítunk meg.

A Pascalban kétféle alprogram van: az eljárás és a függvény. A két alprogram közötti fő különbség a hívás módjában jelentkezik. A függvény általában értékadó utasításokban használatos, mert meghívása után visszaad egy értéket. Pl.: negyzet:=Sqr(a);. Ezzel szemben az eljárás a nevén keresztül nem ad vissza értéket, meghívása után megadott utasításokat hajt végre. Pl.: WriteLn('Próba');.

Az alprogram utasításainak végrehajtásához szükséges bemenő adatokat, valamint azt, hogy az eredmény hol keletkezzen, pontosan meg kell adni. Ezeket az információkat az úgynevezett paraméterlistán adjuk meg. A paraméterlistán keresztül küldünk és kapunk adatokat, tehát a paramétereken keresztül bonyolódik le az adatcsere. Az alprogram definíciójában a paramétereket formális, az alprogramot hívó utasításban szereplő paramétereket aktuális paramétereknek nevezzük. A paraméterek átadásának kétféle módja van:

  • Érték szerint (értékparaméter): A formális paraméterek számára a Pascal mindig foglal helyet a memóriában. Tehát amikor meghívjuk az alprogramot, akkor az érték szerint átadott paraméterek értéke átmásolódik a megfelelő formális paraméterbe. Az alprogram ezekkel az átmásolt értékekkel számol, mintegy védelmet biztosít a felhasználónak arra nézve, hogy az ilyen módon megadott aktuális paramétereinek tartalma ne íródjon felül. Szokás az érték szerinti paramétereket az alprogram bemenő paramétereinek is nevezni, hiszen ezekben adjuk meg azokat az értékeket amelyekkel az alprogramnak számolnia kell. Az alprogram ezekből az adatokból új értéket képezhet, ezek fogják alkotni az alprogram "eredményeit". Ha egy alprogramnak csak bemenő paraméterei vannak, akkor semmilyen eredmény nem kerül ki az alprogramból. Az ilyen értékeket nevezzük az alprogram kimenő paramétereinek.


  • A paraméterlista megadásánál a következő szabályokat kell figyelembe venni:
    • a paramétereket kerek zárójelbe kell tenni,
    • az azonos típusú paramétereket felsorolva vesszővel lehet elválasztani, az utolsó paraméter után kettőspontot téve a paraméterek típusát kell megadni. A típus csak egyszerű vagy felhasználói (Type) típus lehet.

    • a különböző típusú paramétereket pontosvesszővel elválasztva kell felsorolni.

    • Pl.: (a, b, c: Real; i: Integer; b: Boolean; c: Char; sz: String).
  • Cím szerint (változóparaméter): Az aktuális és a formális paraméterek a memóriában ugyanazon a címen helyezkednek el. Ilyen esetben az alprogram a paraméter címét veszi át. Az alprogram törzsben ezek a paraméterek alkotják a kimenő paramétereket, hiszen az értékadó utasítás bal oldalán valójában felveszik a jobb oldali kifejezés értékét.

    • A paraméterlistán a változóparamétereket az értékparaméterektől a paraméterek felsorolása előtt megadott var kulcsszó különbözteti meg. A cím szerinti aktuális paraméter csak változó lehet, és nem lehet sem konstans, sem kifejezés. Ha különböző típusú kimenő paraméterei vannak az alprogramnak, akkor mindegyik típus elé ki kell tenni a var kulcsszót.
      Pl.: (c, b, d: Real; k: Integer; var x, y: Real; var n: Integer).

A paraméterek után most nézzük a két alprogram részletesebb áttekintését. Az alprogramokat a program deklarációs részében kell megadni.

Függvény

Nézzük a függvény általános leírását:

function függvény_neve(paraméterlista): függvény_típusa;
lokális deklarációk
begin   a függvény törzse (végrehajtandó utasítások)   függvény_neve:=.....;end;
A függvény fejléce:

A fejléc a function kulcsszóval kezdődik, ezután következik a függvény azonosítója, a formális paraméterlistája és a függvény típusa.

A függvény azonosítója:

A függvény azonosítóját a Pascal azonosítóképzés szabályai szerint kell kialakítani. Az azonosító által tudjuk meghívni a függvényt. A függvény nevére vonatkozik a függvény típusának a magadása, hiszen a típusának megfelelő érték kerül bele.

A függvény típusa:

A fejlécben meg kell adni a függvény típusát is. A függvény általában egyetlen értéket állít elő, és ezt a függvény nevével adja vissza a definiált típusnak megfelelően.

A paraméterlista:

A függvény paraméterlistája tartalmazza azokat a paramétereket, amelyeket át kell vennie a hívó programtól.

A függvény lokális deklarációi:

A függvény számára szükséges változók deklarációinak helye.

A függvény törzse:

Tartalmazza azokat a műveleteket, amelyeket a függvénynek végre kell hajtania. Ezeket az utasításokat a begin és az end kulcsszavak közé kell tenni, és pontosvesszővel lezárni.

Eljárás

Az eljárás felépítésének általános formája:

procedure eljárásnév(paraméterlista);
lokális deklarációk
begin   az eljárás törzse (végrehajtandó utasítások) end;

Az eljárás fejléce:

Az eljárás kulcsszava a procedure, ezzel kell kezdeni az alprogramot. Az eljárásnak is kell nevet adni az azonosítóképzés szabályai szerint.

Lokális deklaráció:

Az eljárás fejléce után következik az eljárás törzsben használt, tehát az eljárásra nézve lokális konstansok, változók deklarációja. A lokális változók az eljárás aktiválásakor kapnak értéket, de értékük kívülről hozzáférhetetlen, amire nincs is szükség. Ezek a változók az algoritmus beprogramozásához szükséges munkatárakat jelentik.

Ennyit mára, remélem nem volt túl bonyolult. Lemezmellékletünkön található néhány példaprogram. Ha bármilyen kérdésetek van a cikkel vagy a programmal kapcsolatban, írjatok. 

Folytatjuk ...