You are on page 1of 74

A Pascal nyelv alapjai

JAG, 2001
Második rész
Utasítások
 Az imperatív nyelvek jellegzetes progra-mozási
eszköze.
 Két csoportba sorolhatóak: a fordítóprog-ramnak
szóló deklarációs utasítások ill. a végrehajtható
utasítások.
 A fordítóprogram szempontjából fontos különbség,
hogy a deklarációs utasítások mögött nincs kód míg
a végrehajtható utasítások mögött mindig ott van a
kód.
Utasításcsoport

 Összefogott és egységként kezelendő utasítások


sorozata.
 Általában utasítás-zárójelek fogják össze az
utasításokat.
 Pascal:
begin

end
Input/Output utasítások

 Ez a leginkább implementációfüggő része a


programozási nyelveknek. A Turbo Pascal a
Unit-okkal oldja meg ezt a problémát.
 Az I/O utasítások minden nyelvben az
állományfogalomhoz kötődnek.
 Minden nyelv ismeri az implicit (vagy standard)
állomány fogalmát, mely esetben az állomány
fogalmát "kiiktatva" egyből a perifériára gondol.
Összerendelés

 Az a folyamat, amikor egy logikai


állománynak megfeleltetünk egy fizikai
állományt.
 Ez történhet programnyelvi eszközökkel
(Pascal) illetve nyelven kívüli eszközökkel
(PL/1).
 A Turbo Pascal programozási nyelvben ez az
assign eljárással történik.
Megnyitás

 Az a tevékenység, amikor a fizikai állományt


ellenőrzi a futtatórendszer, s a megnyitás
után lehet ténylegesen dolgozni az
állománnyal.
 A Turbo Pascalban ez standard eljárásokkal
(reset, rewrite, append) történik.
 Részletesen a konkrét példáknál.
Olvasás

 Az olvasás minden nyelvben úgy történik,


hogy meg kell adni mely file-ból mely
változókat kívánjuk kiolvasni.
 A megadott változók az adott állományban
elhelyezkedő adatok értékét kapják.
 A Turbo Pascalban ez a read, readln
utasításokkal történik.
read

read(változólista) vagy
read(állnév,változólista)
 Jelentése: Beolvassa a változólista
elemeit a standard input egységről
(billentyűzet) avagy az állnév nevű
állományból.
 Példa: read(a,b,c)
readln

readln(a)
 Jelentése: beolvassa a értékét a standard
input egységről (billentyűzet), majd
végrehajt egy „kocsi vissza, soremelés”
műveletet. („A következő sor elejére áll.”)
Írás

 Úgy történik, hogy meg kell adni az


állományt, továbbá azokat az értékeket,
melyeket ki kell írni. (Kifejezéseket kell
felsorolni.)
 A Turbo Pascalban ez a write ill. a
writeln utasításokkal történik.
write

write(kifejezéslista)
 Jelentése: Kiírja a kifejezéslista elemeit
a standard output egységre (képernyő)
avagy az állnév nevű állományba.
write(‘Harom=‘,3)
write(‘a+b értéke’,a+b)
writeln

writeln(állnév,kifejezéslista)
 Jelentése: Kiírja a kifejezéslista elemeit
a standard output egységre (képernyő) majd
végrehajt egy „kocsi vissza, soremelés”
műveletet.
writeln(‘Harom=‘,3)
Lezárás

 Megszünteti a kapcsolatot a logikai és a


fizikai állomány között.
 Az operációs rendszer a változtatásokat csak
a lezáráskor adminisztrálja.
 „Normálisan” véget érő program esetén
általában van automatikus lezárás. A Turbo
Pascalban: close.
Feltételes utasítás Pascalban

IF feltétel THEN utasítás1

Itt TILOS a ; !

ELSE utasítás2
Feltételes utasítás Pascalban
if szam1>=szam2 then nagyobb:=szam1 else
nagyobb:=szam2
***
if tomb[i]>tomb[i+1]then
begin
csere:=tomb[i];
tomb[i]:=tomb[i+1];
tomb[i+1]:=csere;
vancsere:=true
end
Többágú feltételes utasítás

CASE kifejezés OF konstanslista : utasítás END

CSAK a Turbo Pascalban !

ELSE utasítás
Többágú feltételes utasítás

case 2*i of
2: volt:=1;
4: volt:=2;
6: volt:=3
else volt:=0
end
Előfeltételes ciklus Pascalban

WHILE feltétel DO utasítás

fej mag (a véget nem jelzi külön)


Előfeltételes ciklus Pascalban

while (i<=n) and (tomb[i]<>k)do


i:=i+1;
 Tanács: nézd csak meg a lineáris keresés
algoritmusát!
Végfeltételes ciklus
Pascalban

REPEAT UNTIL feltétel

utasítás

fej mag vég


Végfeltételes ciklus
Pascalban

repeat
j:=j-1;
tomb[j+1]:=tomb[j]
until tomb[j-1]<=seged
 Tanács: nézd csak meg a beszúrásos
rendezés algoritmusát!
Előírt lépésszámú ciklus
Pascalban

TO
FOR ciklusváltozó := kezdõérték végérték DO utasítás
DOWNTO

fej mag

A Pascal nem ismeri a lépésköz fogalmát!


Előírt lépésszámú ciklus
Pascalban

for j:=2 to n do
if tomb[j]>maximum then maximum:=
tomb[j];
 Tanács: nézd csak meg a maximális elem
kiválasztásának algoritmusát!
Programegységek

 A program programegységekből áll össze.


 A programegységek olyan programrészek,
amelyek többé-kevésbé önállóak, külön-
külön megírhatóak.
 Minden programozási nyelvben létezik az ún.
főprogram, mint programegység.
A Pascal főprogram

Programfej program név;

{deklarációk}

Programtörzs begin

{vh. utasítások}

Programvég end.
A Pascal főprogram - példa

program hello1;
begin
write('Hello vilag!!!')
end.
A Pascal főprogram - példa II.

program hello2;
begin
writeln('Hello vilag!!!');
readln;
end.
Gyakorlatok

Írjuk meg azt az algoritmust, amely:


 két szám közül kiírja a nagyobbikat;
 összeadja az egész számokat 1-től egy
megadott számig!
 Az utóbbi algoritmust valósítsuk meg
mindhárom ismert ciklusutasítással!
Gyakorlatok - kisebb-nagyobb

program nagyobb;
type szam=integer;
var
a,b,nagyobb:szam;
begin
write('Kerem az elso szamot:');
readln(a);
write('Kerem a masodik szamot:');
readln(b);
Gyakorlatok - kisebb-nagyobb

if a>b then nagyobb:=a else nagyobb:=b;


writeln('A nagyobbb szam:',nagyobb);
readln;
end.
Gyakorlatok - összegzés I.
program osszeg1;
type szam=integer;
var
i,n:integer;
osszeg:szam;
begin
write('Meddig tartson az osszegzes?');
readln(n);
osszeg:=0;
for i:=1 to n do osszeg:=osszeg+i;
write('A szamok osszege ',n,’
-ig:',osszeg);
readln;
end.
Gyakorlatok - összegzés II.

program osszeg2;
type szam=integer;
var
i,n:integer;
osszeg:szam;
begin
write('Meddig tartson az osszegzes?');
readln(n);
Gyakorlatok - összegzés II.
osszeg:=0; i:=1;
while i<=n do
begin
osszeg:=osszeg+i;
i:=i+1;
end;
write('A szamok osszege ',n,
’-ig:',osszeg);
readln;
end.
Gyakorlatok - összegzés III.
program osszeg3;
type szam=integer;
var
i,n:integer;
osszeg:szam;
begin
write('Meddig tartson az osszegzes?');
readln(n);
osszeg:=0;
i:=0;
Gyakorlatok - összegzés III.
repeat
osszeg:=osszeg+i;
i:=i+1;
until i>n;
write('A szamok osszege ',n,
'-ig:',osszeg);
readln;
end.
Gyakorlatok - összegzések

A példaprogramok rendre
 osszeg1.pas
 osszeg2.pas
 osszeg3.pas
Összefoglalva
 Összegzés.doc
A csomag programegység

 A csomag olyan programegység , amely


bizonyos szolgáltatásokat nyújt más
programegységek számára.
 A Turbo Pascal programozási nyelvben a
csomag neve Unit, mely az Uses
utasítással vehető használatba.
A csomag - Pascal példa
program osszeg1;
uses crt;
CRT csomag használatba vétele!
type szam=integer;
var
i,n:integer;
Egy eljárás a CRT csomagból:
osszeg:szam;
begin
a szöveges képernyő törlése.
clrscr;
write('Meddig tartson az osszegzes?');
readln(n);…
Alprogram programegység

 Ejárás-orientált nyelvekben létezik az


alprogram, mint programegység.
 Cél: az újrafelhasználhatóság biztosítása.
 Két fajta alprogram van:
 eljárás
 függvény
Az alprogram felépítése

Alprogram neve
Fej
Formális paraméterek
Dekalarációs rész
Törzs
Végrehajtható rész

Vég
Lokális és globális nevek

 Azokat a neveket, amelyeket a törzs


deklarációs részében deklarálunk az adott
alprogram lokális neveinek mondjuk.
 Azokat a neveket, amelyeket nem az adott
alprogramban deklaráltunk, de az adott
alprogramban felhasználhatjuk őket, az adott
alprogram globális neveinek hívjuk.
Az eljárás

 Olyan alprogram amely valamilyen


tevékenységet hajt végre.
 Mindig utasításszerűen kerül meghívásra.
 Az eljárások akkor fejeződnek be, ha a
végrehajtás az eljárás végére ér.
A Pascal eljárás

PROCEDURE név ;

formális
( )
paraméterlista
A Pascal eljárás - példa
procedure beolvas(n:integer);
var j:integer;
begin
for j:=1 to n do
begin
write('Kerem a(z)',j,
'. elemet! ');
readln(tomb[j]);
end;
end;
A függvény

 Egy olyan alprogram, amely egy értéket


állít elő.
 Az érték típusát a fejben kell megadni.
 A függvény által meghatározott értéket
mindig a név hordozza.
 Csak kifejezésben hívható meg a kifejezés
operandusaként.
A Pascal függvény

FUNCTION név : típus ;

formális
( )
paraméterlista
A Pascal függvény - példa

function hatvany(a,k:real):real;
begin
hatvany:=exp(k*ln(a));
end;

szam:=2*hatvany(3,2);{ami 18}
writeln(hatvany(2,3));
Gyakorlat - alprogramok

 Írjuk meg a két szám közül a nagyobbat kiíró


programot Pascalban úgy, hogy a
számításhoz függvényt használunk!
 Írjunk programot, amely kiszámítja egy adott
(nemnegatív egész) szám faktoriálisát!
 Írjuk meg a maximális elem kiválasztását
illetve a lineáris keresés feladatát megoldó
programokat!
Gyakorlat - alprogramok

A példaprogramok rendre
 nagyobb.pas
 faktor.pas
 maxi.pas
 linkeres.pas
Összefoglava
 Alprogramok_I.doc
 Keresés.doc
A formális paraméterek

 Arra szolgálnak, hogy az adott alprogramon


belül egy adott szerepkört lehessen definiálni
velük.
 A formális paraméterek mindig azonosítók,
melyek a törzsben bizonyos objektumok
neveként használhatóak, s ezen objektumok
bizonyos szerepkört írnak le.
Paraméter-kiértékelés

 Az a folyamat, amikor egy alprogram


meghívásakor egymáshoz rendelődnek az
aktuális és formális paraméterek, és
meghatározódnak azok az információk,
amelyek alapján a meghívott alprogram majd
működni fog.
A paraméter-kiértékelés
szempontjai

 A formális paraméterek sorrendje, vagyis az,


hogy melyik formális paraméterhez melyik
aktuális paraméter fog hozzárendelődni.
 A számbeli egyezés kérdése.
 A típus kérdése, azaz hogyan viszonyul a
formális paraméterek típusa az aktuális
paraméterek típusához.
Sorrendi kötés

 Abban az esetben, ha ezt a hozzárendelést a


sorrend határozza meg, sorrendi kötésről
beszélünk.
 Ilyen elvet követ például a Pascal
programozási nyelv.
Név szerinti kötés

 Abban az esetben, ha az aktuális


paraméterlistán a formális paraméter nevét
adjuk meg (tetszőleges a sorrend), s ehhez a
névhez explicit módon rendeljük az aktuális
paramétert.
 Ilyen lehetőséget ad pl. az Ada programozási
nyelv.
A paraméterek száma

 Kötött paraméterszámú alprogram esetén a


formális paraméterek száma és az aktuális
paraméterek száma kötelezően megegyezik.
 A formális paraméterek száma ismert, és az
aktuális paraméterek száma ennél kisebb
egyenlő.
 A paraméterek száma tetszőleges.
Pascal példák

 A Pascal programozási nyelvben a


programozó csak kötött argomentumszámú
alprogramot írhat.
 A standard eljárásoknál és függvényeknél a
számbeli egyezés három lehetősége közül
mindegyikre van példa.
Pascal példák

 A karakteres képernyő törlését elvégző


ClrScr eljárás paraméterszáma nulla.
 A fájlkezelésnél előforduló Eof (End of File),
egy paraméterű eljárás, de paraméter nélkül
is hívható.
 A már ismert Write eljárás akárhány
paraméterrel hívható.
A típus kérdése

 A szigorúan típusos nyelvek egyezést írnak


elő, ilyen pl. a Pascal.
 Bizonyos nyelvek, ilyen pl. a C programozási
nyelv, azt mondja, hogy az aktuális
paraméterek típusának a formális
paraméterek típusára konvertálhatónak kell
lennie.
A hívási lánc

 Az egymást hívó alprogramok a hívási láncot


alkotják.
 A hívási lánc minden egyes alprogramja
aktív, akkor is, ha a vezérlés nem az adott
alprogramon van.
A rekurzió

 A nyelvek egy része megengedi, hogy egy


aktív alprogram is hívható legyen.
 Ez a rekurzió, melyet pl. a Pascal nyelv
támogat, a Fortran nyelv nem.
Gyakorlat - a rekurzió

 Írjuk meg a (nemnegatív egész) szám


faktoriálisát kiszámító programot rekurzív
függvény alkalmazásával!
 Írjunk rekurziót alkalmazó programot, amely
kiszámítja egy egész szám egész kitevőjű
hatványát!
 Írjuk meg egy tömb maximális elemét
kiválasztó programot rekurziós függvénnyel!
Gyakorlat - a rekurzió

A példaprogramok rendre
 faktor2.pas
 rekhatv.pas
 rekmax.pas
Összefoglalva
 Rekurzió.doc
Paraméterek átadása

 Érték szerinti paraméter-átadás


 Cím szerinti paraméter-átadás
 Eredmény szerinti paraméter-átadás
 Érték-eredmény szerinti paraméter-átadás
 Név szerinti paraméter-átadás
Érték szerinti paraméter-
átadás

 Az aktuális paraméter értéke a megfelelő


formális paraméter tárbéli címére töltődik.
 Az információ-áramlás egyirányú, az érték
mindig átmásolódik.
 Az aktuális paraméter egy kifejezés lehet.
Cím szerinti paraméter-átadás

 A formális paramétereknek nincs


címkomponensük, híváskor a cím kerül
átadásra.
 Az információ-áramlás kétirányú („a hívott”
alprogram mászkálhat a „hívó” tárbéli
területén).
 Ez esetben az aktuális paraméter változó.
Eredmény szerinti paraméter-
átadás

 Az aktuális paraméter címkomponense kerül


átadásra, de a „hívott” alprogram a „saját
tárterületén dolgozik”
 Az alprogram befejezésekor a formális
paraméterek értéke átmásolódik az átadott
aktuális paraméter címére.
 Az aktuális paraméter változó.
Érték-eredmény szerinti
paraméter-átadás

 Híváskor átkerül az érték és a címkomponens


is, de a „hívott” alprogram az értékkel
dolgozik.
 Befejezéskor a formális paraméterérték
visszamásolódik a kapott címre. az
információáramlás kétirányú, de "nincs
átnyúlás".
 Az aktuális paraméter változó.
Név szerinti paraméter-átadás

 Név szerinti paraméterátadás esetén az


aktuális paraméter mint szimbólumsorozat
érdekes.
 Az alprogram hívásakor az aktuális
paramétersorozat a hívás pillanatában
„fölülírja” a formális paraméter nevét.
Pascal példa

 A Pascal nyelv az érték és a cím szerinti


paraméterátadást ismeri.
 Amennyiben a formális paraméterlistán
szerepel a var kulcsszó, akkor cím szerinti,
egyébként érték szerinti paraméterátadásról
van szó.
Más nyelvek

 A C programozási nyelvben csak érték


szerinti paraméterátadás van.
 Az Ada nyelvben érték, eredmény és érték-
eredmény szerinti paraméterátadás ismert
Gyakorlat - rendezések

 Írjuk meg a bináris (felezéses) keresés


feladatát megoldó programot!
 Írjuk a meg a buborékos és a beszúrásos
rendezés feladatát megoldó programot!
Gyakorlat - rendezések

A példaprogramok rendre
 binkeres.pas
 beszur.pas
 buborek.pas
Összefoglava
 Rendezés.doc
 Keresés.doc
Gyakorlat - halmazok

A példaprogramok rendre
 halmaz1.pas (Betűk)
 halmaz2.pas (Eratoszthenész szitája)
Összefoglava
 Halmazok.doc
Gyakorlat - rekordok és
filekezelés

A példaprogramok rendre
 rekord1.pas
 rekord2.pas
Összefoglava
 Rekordfile.doc

You might also like