Skip to: site menu | section menu | main content

Összefoglaló

Informatika alapismeretek

Pascal programozási nyelv

A Pascal programozási nyelv Blaise Pascalról (1623-1692) kapta nevét, aki francia filozófus és matematikus volt. Tehetségéről árulkodik, hogy 19 éves korában egy összeadni és kivonni tudó mechanikus számológépet készített.

N. Wirth 1968-ban definiálta a Pascal nyelvet, melyet főként tudományos műszaki problémák megoldására tervezett. A Turbo Pascal nyelvet a Borland cég fejleszti 1982 óta elsősorban az IBM PC-kre

A program szerkezete

Programfej

A program kulcsszóval kezdődik, melyet a program neve követ. A program logikai neve a program azonosítására szolgál. Ezt a nevet más programelem azonosítására nem használhatjuk. A program nevének megadását követően a USES alapszó után sorolhatjuk fel a programban használni kívánt egységeket. Az egység (unit) nem ebben a programban deklarált konstansok, változók, eljárások, függvények gyűjteménye.

Deklarációs rész

Itt deklaráljuk azokat a változókat, amelyekkel a program dolgozni fog. A var (variable=változó) kulcsszó jelzi, hogy változó deklarálása következik. A változót úgy deklaráljuk, hogy neve után kettősponttal elválasztva megadjuk a típusát. A deklarációt pontosvessző zárja. Az ugyanolyan típusú változók deklarációját összevonhatjuk úgy, hogy azok azonosítóit vesszővel elválasztva felsoroljuk. Két különböző változónak nem adhatjuk ugyanazt a nevet.

Programtörzs

Ez a végrehajtandó rész. Begin kulcsszóval kezdődik és az end szóval zárul. A program végét az end után álló pont jelzi. A program utasításait a begin és az end közé írjuk. Az utasításokat pontosvesszővel választjuk el egymástól.

 

Legfontosabb fogalmak:
programfej, deklarációs rész, programtörzs, deklaráció, unit
Kérdések, feladatok:

Milyen részekből áll egy Pascal nyelvű program?

Mi a szerepe a deklarációs résznek?

Mivel választjuk el az utasításokat egymástól?

vissza

Típusok

Egész számok

 

 Byte  1 byte  0..255
 Shortint  1 byte  -128..127
 Word  2 byte  0..65535
 Integer  2 byte  -32768..32767
 Longint  4 byte  -2 31..2 31-1

Valós számok

 

Single 3+1 byte
Real 5+1 byte
Double 6+2 byte
Extended 7+3 byte

A real típus megkötések nélkül használható. A többi típus csak numerikus társprocesszorral vagy annak emulálásával léptethető működésbe {$N+, $E+}. Egy osztás eredménye mindig valós típusú!

Műveletek

1 operandusú: + -

2 operandusú: + - * /

összehasonlítások: < > =

Karakterek

Char: értékkészlete az ASCII karakterkészlet. Ebben a típusban a [0..255] intervallumban minden egész számhoz egy karaktert rendelünk. A karakterek 1 bájtot foglalnak el a memóriában.

Műveletek: összehasonlítások a karakterek sorszáma alapján

Függvényei

ord: ASCII-kódot ad vissza

chr: karaktert ad vissza

Felsorolt típus

Azokat az adattípusokat tartalmazza, melyeket a felhasználó hoz létre, azok neveinek felsorolásával. Sorszáma a felsorolásbeli sorszám. A sorszámozás a 0-val kezdődik. A felsorolt nevek nem szerepelhetnek beolvasó vagy kiíró utasításban. Használhatjuk az összehasonlító műveleteket.

pl.: nyelv : (magyar, angol, nemet, francia);

Intervallumtípus

Az intervallumtípus esetén egy már definiált, sorszámozott típus részsorozatát határozzuk meg. MEg kell adni az intervallum alsó és felső határát. Az intervallum elemeinek sorszáma az eredeti típusban levő sorszám.

Műveletei: az eredeti típuson végezhető műveletek

Függvényei: a sorszámozott típusok függvényei

pl.: betu: 'a'..'z';

Logikai típus (boolean)

Kétféle értéket vehet fel: igaz vagy hamis értéket. A hamis (false) sorszáma 0, az igaz (true) sorszáma pedig 1. Tárolása 1 byte-on történik. A logikai műveleteknél (AND, OR, NOT, XOR) az operandusok és az eredmény is logikai típusú.

Összetett típusok

a) String: karakterlánc, maximális hossza 255 karakter lehet. A karakterlánc elemeire úgy hivatkozunk, mint a tömb elemeire (pl. s[1] az s string első karakterét jelenti). A string 0. eleme a karakterlánc aktuális hosszát tartalmazza.

Műveletei

összefűzés: pl. 'alma'+'fa'='almafa'

összehasonlítás: < > =

Függvényei közül leggyakrabban a length(s) függvénnyel találkozunk, mely az s karakterlánc hosszát adja meg.

b) Array: tömb, azonos típusú elemeket tartalmaz.

Az indextípus a longint kivételével minden sorszámozott típus lehet. Az indextípus gyakran intervallumtípus. Az intervallum első eleme nem lehet nagyobb az utolsó elemnél. Az indexek számát a tömb dimenziójának nevezzük. (Az egydimenziós tömböt vektornak, a kétdimenziós tömböt mátrixnak is nevezzük.) A komponensek a tömb elemei. Az elemtípus a fájltípus kivételével bármilyen típus lehet. Az elemekre indexeikkel hivatkozhatunk. A tömb elemei a memóriában sorfolytonosan foglalnak helyet.

nev: array [indextípus] of elemtípus;

c) Record: rekord, különböző típusú elemek tárolására alkalmas. A rekordon belüli mező-azonosítóknak egyedieknek kell lenniük. Ha azonos nevű változó van a programban, akkor attól megkülönböztethető a rekord ugyanolyan nevű mezője, mert másképp kell rá hivatkozni. A rekord mezőire úgy hivatkozunk, hogy a rekordváltozó neve után ponttal elválasztva írjuk a mező nevét (azonosítóját).

A rekord neve értékadó utasításban is szerepelhet, ha teljesül az értékadás kompatibilitás (a kifejezés bal oldalán álló változóba csak akkor tehetjük a jobb oldal értékét, ha az elfér a változóban).

A mezőlista két részből állhat: fix és változó részből. Ha van változó része a mezőlistának, akkor azt a mezőlista végén helyezzük el.

A változó rekord deklarációjának lényegét a CASE szerkezet adja. Végére ebben az esetben nem kell END, mert a szelektormező minden lehetséges értékét fel kell sorolni.

A WITH utasítás: WITH rekordnev DO utasítás. A DO utáni utasításon belül a program a WITH alapszó után írt rekorddal dolgozik. Így nem kell a rekordnevet ismételgetni a mezőnevek előtt. A WITH utasítás érvényessége a WITH után felsorolt rekordok aktuális értékeire és csak a DO utáni utasításra vonatkozik.

Legfontosabb fogalmak:
operandus, operátor, char, string, boolean, array, tömbdimenzió, komponens, record, értékadás kompatibilitás, szelektormező
Kérdések, feladatok:

Melyik típusoknál szükséges a numerikus társprocesszor?

Milyen egyszerű típusai vannak a Pascal nyelvnek?

Melyek a Pascal-ban használható összetett típusok?

Mi a különbség a char és a string típusok között?

Mi a különbség és a hasonlóság a tömb és a rekord típus között?

vissza

Vezérlési szerkezetek

Szekvencia

Utasítások egymás utáni végrehajtása.

Szelekció

Kiválasztás. Megvalósításai:

  • HA - AKKOR - KÜLÖNBEN:

IF feltétel THEN utasítás1 ELSE utasítás2

Ha a feltétel igaz, akkor az utasítás1 végrehajtódik, ha nem igaz, akkor az utasítás2 fog végrehajtódni.

  • Többágú elágazás:

CASE szelektormező OF

Érték1: utasítás1;

Érték2: utasítás2;

...

END;

Iteráció

Ciklus. Megvalósításai:

  • FOR ciklus (növekményes ciklus)

A ciklusmagot egy előre meghatározott számszor hajtjuk végre.

Pl.: for i := 1 to 10 do writeln('HELLO');

i: ciklusváltozó, csak sorszámozott típusú változó lehet (egész szám, karakter, logikai)

A ciklusváltozó csökkenhet is, ilyenkor a TO helyett a DOWNTO kulcsszót alkalmazzuk.

Az értékhatárokat és a ciklusváltozót a ciklusmagban megváltoztatni tilos!

  • WHILE feltétel DO

A program a ciklusba való belépés előtt megvizsgál egy feltételt - ezt belépési feltételnek nevezzük -, és ha ez teljesül, akkor a ciklusmag végrehajtódik, egyébként nem. A ciklusmag ismételten végrehajtódik, amíg a belépési feltétel teljesül. Ha már nem teljesül, akkor a vezérlés a ciklus utáni utasításra kerül.

A WHILE-ciklusnak a végrehajtás feltételét meg kell tudni változtatnia. Ha a feltétel sosem válik hamissá, akkor a ciklusból való kilépés reménytelen. Ilyenkor végtelen ciklusról beszélünk. A feltétel megváltoztatása általában a ciklusmag dolga. Meg kell adnia a lehetőséget, hogy a feltétel hamis is lehessen.

A WHILE-ciklus olyan problémák megoldására való, ahol az induló feltételek határozzák meg a ciklusmag végrehajtásának szükségességét.

  • REPEAT ciklus

Hátultesztelő ciklus esetén a ciklus magja egyszer mindenképpen végrehajtódik, majd a ciklus végén történik egy feltételvizsgálat, ami eldönti, kiléphetünk-e a ciklusból. Ebben az esetben a feltételt kilépési feltételnek nevezzük.

REPEAT

Utasítások

UNTIL feltétel;

A REPEAT és UNTIL kulcsszavak több utasítást is közrefoghatnak, így nem kell azokat utasítás-zárójelbe tenni. Ha a feltétel igazzá (!) válik, kilép a ciklusból.

 

Legfontosabb fogalmak:

szekvencia, szelekció, iteráció

Kérdések, feladatok:

Mit jelent a szekvencia?

Milyen megvalósításai vannak a szelekciónak?

Hol találkozunk belépési feltétellel?

Milyen problémák esetén alkalmazzuk a while-ciklust?

Melyik az a vezérlési szerkezet, ahol a ciklusmag egyszer mindenképpen lefut?

vissza

Kiíró és beolvasó utasítások

Kiíró utasítások

write, writeln: kiíró utasítások. A writeln a kiírás végén sort emel. A write és writeln utasításoknak bármennyi paramétere lehet, a paramétereket vesszővel választjuk el egymástól. A paraméterek kifejezések is lehetnek. A paraméter nélküli writeln eljárással sort emelhetünk. Minden paraméter után megadhatjuk, hogy milyen hosszon történjen a kiírás. Ha a megadott hossz nagyobb, mint a kiírandó karakterek száma, akkor jobbra ütköztetés történik. Ha kisebb, akkor a hossz felülbírálódik és kiírja az összes karaktert. Számok esetén egy második hossz is megadható, ez a tizedesjegyek száma.

Beolvasó utasítások

read, readln: segítségükkel adatokat olvashatunk be a memóriába. Amikor a program vezérlése ehhez az utasításhoz ér, akkor a billentyűzeten leütött karakterek megjelennek a képernyőn, s azokat az Enter leütéséig szerkeszthetjük. Az Enter leütésekor a begépelt karakterek bekerülnek a paraméterként megadott változóba. A begépelt karaktersorozat átmenetileg egy billentyűzet-pufferbe kerül. Itt maximálisan 127 karakter fér el. A readln eljárás a feladat végrehajtása után a pufferben maradt szemetet kitakarítja. A paraméter nélküli readln eljárás vár egy bevitelt, majd üríti a puffert.

Legfontosabb fogalmak:

billentyűzet-puffer

Kérdések, feladatok:

Milyen kiíró utasítások vannak Pascal-ban?

Mi a különbség a write és a writeln között?

Mi történik, ha a writeln után megadott hossz nagyobb, mint a kiírandó karakterek száma?

Hány karakter fér el a billentyűzet-pufferben?

Mi a szerepe a billentyűzet-puffernek?

vissza

Eljárások, függvények

Alprogramok

Az alprogram egy olyan névvel ellátott utasításblokk, amelyet valamilyen konkrét feladat elvégzésére készítünk. Az alprogramot a program különböző helyeiről a neve segítségével aktivizáljuk, hívjuk. Az alprogram a hívás hatására a benne rögzített feladatot végrehajtja, majd visszaadja a vezérlést a hívó programnak. Alprogramokat akkor célszerű írni, ha

  • bizonyos tevékenység többször előfordul a programban;
  • a program tevékenységét és kódolását felosztottuk önálló részfeladatokra;
  • a túl nagy programot tagolni, olvashatóságát növelni szeretnénk.

Az alprogramok önmagukban nem használhatók. Egy alprogramot aktivizáló programot meghajtóprogramnak, keretprogramnak vagy hívóprogramnak nevezünk. Azok a programok, amelyek másik programon belül nem használhatók, csak önállóan, főprogramok. Nemcsak főprogram hívhat alprogramokat, hanem alprogram is, sőt alprogram is hívhatja saját magát.

A meghajtóprogram a hívással egy időben információt is átadhat az alprogramnak, amit az alprogram feldolgoz, majd visszatéréskor visszaadhatja a hívóprogramnak. Az információátadást paraméterekkel valósítjuk meg.

Kétféle alprogramot használhatunk a Pascal programnyelvben: eljárásokat és függvényeket.

Eljárások

Az eljárások feladata egy meghatározott, önmagában is értelmes tevékenység elvégzése. Az alprogramot a hívóprogram blokkjában, a deklarációs részben definiáljuk.

A definíció az eljárásfejjel kezdődik. Az eljárásfejet a procedure alapszó vezeti be, majd az eljárás neve, utána - ha vannak - zárójelben a paraméterek leírása következik, melyek az eljárás és a hívóprogram információs kapcsolatát határozzák meg. A definícióban szereplő paramétereket formális paramétereknek nevezzük. A formális paraméterek megadásával jelezzük, hogy az eljárásnak milyen információkat kell kapnia a hívóprogramtól a híváskor, és milyen értékeket juttat vissza a főprogramnak, ha elvégezte feladatát.

Procedure név ( formális paraméterek ) ;

Az eljárásfej után az eljárásblokk következik, amely tartalmazhat deklarációkat. A formális paramétereket nem kell deklarálni. Begin és End között a tevékenység leírása, az eljárástörzs következik.

Az eljárás hívásakor az eljárás nevét adjuk meg, és a formális paraméterek helyébe a hívóprogram-egység objektumait, az aktuális paramétereket helyettesítjük. Az aktuális paraméterek számának, sorrendjének és típusának meg kell egyeznie a formális paraméterekével.

Léteznek paraméter nélküli, érték szerint, illetve cím szerint hívott paraméteres eljárás. A paraméter nélküli eljárások mindig ugyanazt a műveletet végzik. Ha egy paraméter nélküli eljárás működését kívülről szeretnénk vezérelni, akkor globális változókat használhatunk az eljárással való kommunikációra. (Az ilyen eljárások használata kerülendő!)

Az értékszerinti paraméterátadás csak egyirányú kommunikációt tesz lehetővé a hívó program és a hívott eljárás között. Eljáráshíváskor minden egyes aktuális paraméter értéke a paraméterlista azonos helyén álló formális paraméterbe másolódik. A fordítóprogram az eljárás hívásakor ellenőrzi, hogy az aktuális és a formális paraméterek szám, típusa megegyezik-e.

Abban az esetben, ha az eljárásnak nem küldeni akarunk értéket, hanem azt szeretnénk, hogy egy új értéket adjon, akkor változó-paramétereket kell használnunk. Ilyen például a readln(x) eljárás is. Az is előfordulhat, hogy egy változó értékét meg akarjuk változtatni az eljárással - erre az inc(i) a példa. Ilyenkor nem értéket adunk át az eljárásnak, hanem a változó 4 bájtos címét. Példa a cím szerinti paraméterátadásra:

Procedure szoroz(var mit:integer; szorzo:integer);

Begin

Mit:=mit*szorzo;

End;

Függvények

A függvény nagyon sok dologban hasonlít az eljáráshoz. Szerkezete:

Function nev (paraméterlista) : típusazonosító; (függvény feje)

Var ... (deklarációs rész)

Begin

...

Nev : = kifejezés; (végrehajtó rész)

End;

Amikor egy függvényt meghívunk, ugyanúgy végrehajtódik a függvény blokkja, mint az eljárásnál. A paraméterekre és a lokális változókra ugyanazok a szabályok érvényesek.

Különbség: a függvény mindig visszaad egy értéket. A függvényhivatkozás maga jelenti az értéket, azokat általában kifejezésekben használjuk.

Szabályok:

  • a függvény mindig visszaad egy értéket
  • a függvény csak egy értéket adhat vissza
  • a visszaadott értékre a függvény nevével hivatkozunk
  • a visszaadott érték típusa csak sorszámozott, valós, karakterlánc vagy mutató lehet

A függvény blokkjában legalább egyszer mindenképpen szerepelnie kell egy értékadó utasításnak, melynek bal oldalán a függvény neve áll, jobboldalon pedig egy kifejezés. Ekkor kap a függvény értéket.

Legfontosabb fogalmak:

alprogram, hívó program, eljárás, függvény, formális paraméter, aktuális paraméter, érték szerinti paraméterátadás, cím szerinti paraméterátadás

Kérdések, feladatok:

Mi az alprogramok szerepe?

Mi jellemző az alprogramokra?

Mi a különbség az eljárások és a függvények között?

Milyen összefüggés van a formális és az aktuális paraméterek között?

Mikor kell egy paramétert cím szerint átadni? Hogyan történik ez?

Hogyan kap egy függvény értéket?

Mennyi értéket ad vissza egy függvény?

Milyen típusú lehet a visszaadott érték?

vissza