Eljárások és függvények. Modulok és külső egységek.
eljárás(formális_paraméter_lista) függvény(formális_paraméter_lista) : visszatérési_típus formális_paraméter_lista ---> paraméter_csoport_1; ... ; paraméter_csoport_n //érték szerinti paraméterátadási mód paraméter_csoport ---> azonosító_1, ... , azonosító_n : adattípus //hivatkozás szerinti paraméterátadási mód var paraméter_csoport ---> azonosító_1, ... , azonosító_n : adattípus
Megkülönböztetünk globális és lokális láthatóságot.
Forrás: freepascal.org
procedure eljarasnev (parameterek); {deklarációk} begin {eljárástörzs} end;
function fuggvenynev (parameterek) : fuggvény_típusa; {deklarációk} begin {függvénytörzs} fuggvenynev := utasitas; {függvény eredménye} end;
Függvény meghívása kifejezésben
valtozo := fuggvenynev(parameterek);
Az egységek/unitok deklarálásának alapvető formátuma:
unit unit_nev; interface (* a unit publikusan hozzáférhető alprogramjai *) implementation (* az alprogramok megvalósítása, és, ha kell, akkor *) (* csak a unit számára látható deklazációk *) end.
Teljesebb formátuma az egységek/unitok deklarálásának:
unit unit_nev; interface implementation initialization (* az inicializáló kódokat *) (* tartalmazó rész, amik *) (* a unit betöltésekor *) (* futnak le *) finalization (* a program futásának *) (* befejezésekor lefutó *) (* kódok *) end.
Példa
A főprogram
program egysegek; uses progkonyvtar; var a:tomb; begin feltolt(a,n); kiir(a,n); readln; end.
A programkönyvtár megvalósítva unitként.
unit progkonyvtar; interface const n=10; type tomb=array[1..n]of integer; procedure kiir(t:tomb; hossz:byte); procedure feltolt(var t:tomb; hossz:byte); implementation procedure kiir(t:tomb; hossz:byte); var i:integer; begin for i:=1 to hossz do write(t[i]:3); writeln; end; procedure feltolt(var t:tomb; hossz:byte); var i:integer; begin randomize; for i:=1 to hossz do t[i]:=random(89)+10; end; begin end.
Előre definiálni a forvard
paranccsal tudunk.
procedure Később (paraméter lista); forward; procedure Hamarabb (paraméter lista); begin ... Később (paraméter lista); end; ... procedure Később; begin ... Hamarabb (paraméter lista); end;
unit tomb_io; interface type tomb=array [1..20]of integer; procedure beolvas(var t : tomb; var hossz: byte; nev: char ); procedure kiir(t : tomb; hossz: byte; nev: string ); function talal(t:tomb; hossz: byte; elem:integer):boolean; implementation procedure beolvas(var t : tomb; var hossz: byte; nev: char ); var i: integer; begin write('A(z) "', nev, '" tomb hossza: ');readln(hossz); writeln('Kerem a(z) "', nev, '" tomb elemeit: '); for i:=1 to hossz do begin write(nev, '[',i,'] = '); readln(t[i]); end; end; procedure kiir(t : tomb; hossz: byte; nev: string ); var i: integer; begin write(nev+': '); for i:=1 to hossz do write(t[i]:3); writeln; end; function talal(t: tomb; hossz: byte; elem:integer):boolean; var i:integer; begin i:=1; while (i<=hossz) and (t[i] <> elem) do i:=i+1; talal:=i<=hossz; end; begin end.
unit tomb_rend; interface uses tomb_io; procedure minimum_rendezes(var a:tomb; hossz:byte); implementation procedure minimum_rendezes(var a:tomb; hossz:byte); var i,j, index, ertek : integer; begin for i:=1 to hossz-1 do begin index:=i; ertek:=a[i]; for j:=i+1 to hossz do if a[j]<ertek then begin ertek:=a[j]; index:=j; end; a[index]:=a[i]; a[i]:=ertek; end; end; end.