Programozás

Egy hely, ahol a bitek beszélnek.

Eljárások (alprogramok), függvények

   
  • eljárások (procedure)

  • változók hatásköre

  • függvények (function)

   
     Mielőtt nekiállna a tanfolyamnak, töltse le és telepítse be a számítógépébe a FreePascal Win32 alatt futó verzióját. Ez a következő weboldalról tölthető le: www.freepascal.org.

        
     1.1 Eljárások (procedure)

     A programozás során gyakran előfordulhat, hogy valamilyen programrészt a programunkban többször végrehajtunk. Például a tömböknél kiírattuk a tömböt, változtattunk rajta valamit majd ismét kiírattuk a képernyőre. Ilyenkor egyszerűbb a tömb kiírására egy eljárást (alprogramot) írni és kiírásnál csak ezt az eljárást meghívni. A programunk ebben az esetben így nézhet ki:

program Pelda01;
const n=10;
var i:integer;
    a:array[1..n] of integer;
   
 procedure kiir; 
 begin
  write('A tomb elemei: ');
  for i:=1 to n do write(a[i],' ');
  writeln;
 end;

begin
{ tomb kigeneralasa: }
for i:=1 to n do a[i]:=random(99)+1;
{ tomb kiirasa alprogrammal: }
kiir;
{ tomb megvaltoztatasa, pl. mindegyik elemet megszorozzuk 2-vel: }
for i:=1 to n do a[i]:=2*a[i];
{ tomb kiirasa ismet alprogrammal: }
kiir;
end.

     Az eljárást (alprogramot) mindig a procedure szóval kezdjük írni még a főprogram kezdete előtt, a változók deklarálása után. A procedure szó után megadjuk az eljárás nevét, majd a következő sortól írhatjuk az eljárást begin és end; közé. Az eljárást a főprogramból egyszerűen az eljárás nevével hívhatjuk meg. Egy programba írhatunk több eljárást is, pl. egyet a tömb generalására, egyet a kiírására, stb. 

     Az eljárásunknak átadhatunk a főprogramból valamilyen értékeket is paraméterek segítségével. Például, ha szeretnénk készíteni egy olyan eljárást, amely kiír valamilyen szöveget úgy, hogy minden betűjét a szövegnek megváltoztatja nagy betűre, akkor a kiírandó szöveget átadhatjuk az eljárás paraméterében. Ekkor a programunk így nézhet ki:

program Pelda02a;
var s:string;
   
 procedure nagybetukkel(m:string);
 var i:integer;
 begin
  for i:=1 to length(m) do m[i]:=upcase(m[i]);
  writeln(m);
 end;
  
begin
nagybetukkel('Kerek egy szoveget: ');
readln(s);
nagybetukkel(s);
writeln('S erteke a program vegen: ',s);
end.

     Ez program kiírja nagy betűkkel, hogy "KEREK EGY SZOVEGET: ", majd bekér egy mondatot és ezt kiírja nagy betűkkel. Végül még kiírja az s értékét (eredeti szöveget). Az eljárásban paraméterként szereplő m változót csak az eljáráson belül használhatjuk, máshol nem érhető el. Hasonlóan az eljárásban deklarált i változót is csak az eljáráson belül használhatjuk - ezek úgynevezett lokális (helyi) változók.

     Az eljárás az s változó értékét nem változtatja meg, csak a helyi m változóét. Tehát az eljárás lefutása után az s változóban marad az eredeti, kisbetűs szöveg (ez kiíródik a főprogram végén). Az ilyen m változót nevezzük formális paraméternek.

     Ha valami végett mégis olyan eljárást szeretnénk írni, amely az s változó értékét is megváltoztatja (tehát azt szeretnénk, hogy az eljárás lefutása után az s változóban is a nagybetűs szöveg legyen - ugyanaz mint az eljáráson belül az m változóban), akkor az eljárásunk paraméterének megadásánál az m változó előtt használhatjuk a var utasítást. Az ilyen paramétert nevezzük valódi paraméternek.

program Pelda02b;
var s:string;
   
 procedure nagybetukkel(var m:string);
 var i:integer;
 begin
  for i:=1 to length(m) do m[i]:=upcase(m[i]);
  writeln(m);
 end;
  
begin
s:='Kerek egy szoveget: ';
nagybetukkel(s);
readln(s);
nagybetukkel(s);
writeln('S erteke a program vegen: ',s);
end.

     Eljárásunkban használhatunk több változót is, melyek közül lehet némelyik formális paraméter, némelyik valódi paraméter. Például egy eljárást megadhatunk ilyen paraméterezéssel is:

procedure szamol(s:string; a,b:integer; var c:integer);

     Ebben az esetben csak a c valódi paraméter, tehát a főprogramban az eljárás lefutása után csak a c helyén megadott változó értéke változik meg.
   

     1.2 Változók hatásköre

     A programozás során használhatunk globális változókat és lokális (helyi) változókat.

     A globális változók azok a változók, melyet a programunkban bárhol elérhetünk, bárhol használhatjuk - a főprogramba is és az eljárásban is. A globális változókat a programunk elején a var szó után soroljuk fel, ahogy eddig is tettük.

     A lokális (helyi) változók azok a változók, melyek a főprogramban nem érhetők el, csak az eljárásban. Tehát ezeket a változókat csak az adott eljárásban használhatjuk, a főprogramban nem. Ezeket szintén a var utasítás segítségével adjuk meg, de nem a programunk elején, hanem abban az eljárásban, melyben ezeket használni szeretnénk.

     Ha ugyanolyan nevű változót deklarálunk globális és lokális változóként is, akkor az eljárásban csak a lokális (helyi) változóval tudunk dolgozni, az eljáráson kívül pedig a globális változóval. Az eljárás nem fogja megváltoztatni a globális változó értékét. Példaként vizsgáljuk meg és próbáljuk ki ezt a programot:

program Pelda03;
var v:integer;
  
 procedure alprg;
 var v:integer;
 begin
 v:=888;
 writeln('Lokalis V nevu valtozo erteke: ',v);
 end;
  
begin
v:=555;
writeln('Globalis V nevu valtozo erteke: ',v);
alprg;
writeln('Globalis V nevu valtozo erteke: ',v);
end.

     A program kiírja először az 555-t, majd a 888-at végül ismét az 555-t.
   

     1.3 Függvények (function)

     A Pascalban vannak előre definiált függvények, ilyen például az abs(), sin(), cos(), upper(), length(), stb. Készíthetünk mi is saját függvényt. Ezt hasonlóan kell megírnunk mint a saját eljárásunkat, a különbség csak abban van, hogy a procedure szó helyett a function-t használjuk, és meg kell adnunk hogy milyen típust adjon vissza az általunk készített függvény. Továbbá a függvényünkön belül (általában a végén) egy ilyen típusú értéket kell adunk a függvénynek (függvény nevének).

     Példaként készítsünk egy függvényt, amely megszámolja, hogy egy megadott szövegben mennyi szóköz van és ezt a számot adja vissza függvényértékként:

program Pelda04;
var s:string;
 
 function helyekszama(x:string):integer;
 var i,h:integer;
 begin
  h:=0;
  for i:=1 to length(x) do
    if x[i]=' ' then h:=h+1;
  helyekszama:=h;
 end;
 
begin
 write('Irj be egy modnatot: ');
 readln(s);
 writeln('A mondatban ',helyekszama(s),' szokoz van.');
end.




Weblap látogatottság számláló:

Mai: 6
Tegnapi: 2
Heti: 6
Havi: 45
Össz.: 5 586

Látogatottság növelés
Oldal: Pascal II
Programozás - © 2008 - 2024 - che-guevara.hupont.hu

A HuPont.hu honlap ingyen regisztrálható, és sosem kell érte fizetni: Honlap Ingyen.

ÁSZF | Adatvédelmi Nyilatkozat

X

A honlap készítés ára 78 500 helyett MOST 0 (nulla) Ft! Tovább »