Felhasználói eszközök

Eszközök a webhelyen


inf-prog-fszi:eljarasok_es_fueggvenyek

Eljárások és függvények. Modulok és külső egységek.

Paraméterek / Argumentumok

eljaras.txt
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

Láthatóság

Megkülönböztetünk globális és lokális láthatóságot.

  • Az A, B és C globális változók látszanak mindenünnen
  • Az Alpha eljárásban az A globális deklarációját a lokális deklaráció váltja fel
  • A Beta1 és a Beta2 láthatják a VCR, Betamax és cassette változókat
  • A Beta1 nem látja a FailureToo, továbbá a Beta2 nem látja a Failure deklarációját
  • Az Alpha-n kívül egyik alprogram sem láthatja az F és a G deklarációit
  • A Beta eljárás meghívhatja az Alpha és a Beta eljárásokat
  • A Beta2 függvény az összes alprogramot meghívhatja, beleértve saját magát is (a fő program nem alprogram).

Forrás: freepascal.org

Eljárások

eljaras.txt
procedure eljarasnev (parameterek); 
{deklarációk} 
begin 
    {eljárástörzs} 
end;

Függvények

függveny.txt
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

függvenyhivas.txt
valtozo := fuggvenynev(parameterek);

Egységek / Unitok

Az egységek/unitok deklarálásának alapvető formátuma:

unit_deklaralasa.txt
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_bovitett.txt
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

egysegek.pas
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.

progkonyvtar.pas
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álás

Előre definiálni a forvard paranccsal tudunk.

forvard.txt
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;

A tomb_io.pas könyvtár

tomb_io.pas
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.

A tomb_rend.pas könyvtár

tomb_rend.pas
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.
inf-prog-fszi/eljarasok_es_fueggvenyek.txt · Utolsó módosítás: 2017/06/22 14:21 szerkesztette: beistvan