A Pascal nyelv
A
Turbo Pascal 7.0 egy magas szintű programozási nyelv. A nyelv
használatához a saját gép, C: meghajtó, Tp mappa, Bin mappa, Tpx
futtatható állománya által létrehozható, DOS-os (karakteres képernyő, de egér
van) Integrált Fejlesztői Környezet (IDE) áll rendelkezésre.
A Tpx
betöltése után a File menü Change dir… parancsával be kell állítani a
felhasználó home-könyvtárához rendelt hálózati meghajtót, illetve ezen belül -
a már előzőleg létrehozott - Pascal könyvtárat, amelyben a programlistákat és
egyéb lemezes állományokat tároljuk.
Megírt
programjainkat F2 billentyű segítségével menthetjük lemezre
(home-könyvtárba), előzőleg kimentett állományokat F3 billentyű
segítségével tölthetjük be.
A programlista
szerkesztését a Word szövegszerkesztőben megszokott módon végezhetjük,
válthatunk beszúrásos és felülírásos üzemmódok között az INS billentyű
segítségével, kijelölhetünk szöveget egérrel vagy billentyűzet SHIFT +
nyilak segítségével, CTRL+INS segítségével a kijelölt szöveget
lefényképezhetjük, SHIFT+INS segítségével a kurzor helyére beszúrhatjuk.
A programlistát F9
segítségével fordíthatjuk, CTRL+F9 segítségével futtathatjuk.
Fordításnál
előforduló gyakori hibaüzenetek:
";"
expected (az idézojelbe tett írásjel - ez esetben pontosvessző - hiányzik)
Unknow identifier
(ismeretlen azonosító, valamely kulcsszót helytelenül írtunk, vagy valamely
változót még nem deklaráltunk)
A
Pascal program szerkezete.
(program-fej:)
Program programnev;
Uses Crt, CrtPlus;
(deklarációs rész:)
Label 1;
Const max=100;
Var
i,j: byte; (globális változók)
Type rekord= Record
Mezo1: String;
Mezo2: Integer;
End;
Var
rek1: rekord;
Procedure proc1;
Var
a:byte; (lokális változók)
Procedure alproc1; (lokális eljárás)
Begin
(utasítások)
Edn;
Begin (proc1 végrehajtó része)
(utasítások)
End;
Function func1;
Begin
(utasítások)
func1:=valami;
End;
.
.
.
(főprogram, végrehajtó rész:)
Begin
(utasítások)
End.
A
program írásakor használandó lefoglalt szavak és magyarázatuk.
Program : a programlista első szava, jelzi, hogy a lista
programot tartalmaz.
Begin : kezdet, mely a főprogram, az eljárások vagy
függvények, illetve összetett utasítások kezdetét jelzik.
End. : vége, a főprogram és egyúttal a programlista végét
jelzi, a fordító azokat a jeleket, amelyeket ez után írunk, már nem értelmezi.
End; : vége, eljárások, függvények, összetett utasítások, CASE
szerkezet, RECORD szerkezet végét jelzi.
Uses : használat, a program futtatásához szükséges UNIT-ok
listáját e kulcsszó után kell - vesszővel elválasztva - felsorolni.
Var : változó, a programban használt változókat előre
deklarálni kell, meg kell mondani mi a neve és milyen típusú.
Const : konstans deklarációja, név = érték formában.
String : a szöveges változó típusneve.
Array : a tömb típusú változó típusneve.
Label : címke, a feltétel nélküli utasítás címkéje.
Of : tömbelemek típusa, File elemeinek típusa, Case
szerkezet része.
In : halmazba tartozás művelete.
Mod : egész osztás maradéka.
Div : egész osztás hányadosa.
Absolute : az abszolút memóriacím megadása előtt alkalmazandó
lefoglalt szó.
With : minősítő utasítás, rekord mezőire a rekord neve
kiemelése után, rekordnév nélkül hivatkozhatunk. Szintaktikája: With
(rekordnév) Do Begin (mezonév1:= ...
mezonév2:= ...) End;
Procedure : eljárás, helye a deklarációs részben van,
szerkezete a program szerkezetével megegyezik, a főprogramban, eljárásokban és
függvényekben tetszőleges sokszor hívható (használható).
Function : függvény, gyakorlatilag olyan, mint az eljárás,
csak visszaadott értékkel bír. Hívható eljárásként is, de úgy is, hogy egy értékadó
utasítás jobb oldalában használjuk.
A
program végrehajtási sorrendjét meghatározó struktúrák.
Szekvencia: végrehajtási sorrend, ha a lista értelmezéséből
egyéb végrehajtási sorrend nem következik, akkor az utasításokat a gép a beírás
sorrendjében, azaz balról jobbra, fentről lefelé haladva, kihagyás nélkül
hajtja végre.
Iteráció: ismétlés, azaz a program egy részletét gép nem
egyszer, hanem többször, esetleg egyetlen egyszer sem hajtja végre. A Pascal
nyelvben három féle iteráció áll rendelkezésünkre.
1.
A For
ciklus. Elől tesztelő léptető iteráció. Szintaktikája: For i:=1 To
100 Do +az ismétlendő utasítás. Példánkban az i egy sorszámozott
típusú változó (ez esetben egész szám), neve ciklusváltozó, melynek kezdoértéke
1, végértéke 100, és a végrehajtásban értéke egyesével növekszik. Gyakorlatilag
az a szerepe, hogy számolja a végrehajtások számát. Természetesen az
ismételendő utasításban az i-nek szerepe lehet, értékét viszont átírni
nem szabad. A Do hatásköre egyetlen utasítás. Ha több utasításra szeretnék
ezt kiterjeszteni, akkor azokat egy összetett utasításba (Begin … End;-be)
kell összefogni. A For ciklust akkor kell használni, amikor előre tudjuk
azt, hogy hányszor kell ismételni a ciklus magját (az ismétlendő utasításokat).
Ha a kezdő és végértékek úgy jöttek létre, hogy a végérték a kisebb, akkor a For
ciklus magja egyetlen egyszer sem hajtódik végre. Ha nagyobb kezdő értéktől
kisebb végértékig szeretnénk a ciklusváltozóval haladni (szintén egyesével),
akkor a To helyett DownTo-t kell használni. Az így leírt ciklus
magja akkor nem fog egyetlen egyszer sem végrehajtódni, ha a kezdoérték kisebb,
mint a végérték. A For ciklus az egyik leggyakrabban használt
programszerkezet.
2.
A Repeat
ciklus. Hátul tesztelő ismétlő eljárás. Szintaktikája: Repeat
... (utasítások) ... Until (logikai kifejezés); Az utasítások
mindaddig amig a logikai kifejezés igazzá nem válik, ismétlődik. Mivel a
logikai kifejezés vizsgálata az utasítások után van, ezért az utasítások
legalább egyszer végrehajtódnak. Ezt az ismétlő eljárást tehát akkor
használjuk, ha nem ismert előre, hogy az eljárásokat hányszor kell
végrehajtani, de legalább egyszer igen, és az ismétlés befejezéséről a program,
vagy a felhasználó (valamilyen beavatkozó szervvel: billentyuzet, egér stb.)
gondoskodik.
3.
A While
ciklus. Elől tesztelő ismétlő eljárás. Szintaktikája: While
(logikai kifejezés) Do (utasítás). Az utasítás mindaddig
végrehajtódik, ameddig a logikai kifejezés igaz értékkel bír. Mivel a logikai
kifejezés vizsgálata az utasítás előtt megtörténik, lehet, hogy az utasítás
egyetlen egyszer sem hajtódik végre, mert lehet, hogy a logikai kifejezés már
kezdetben False értékkel bír. Mivel a Do csak egyetlen
utasításra vonatkozik, több ismételendő utasítás esetén, azokat egy összetett
utasításba kell zárni. Ezt az ismétlő eljárást akkor használjuk, ha nem ismert
előre, hogy az eljárásokat hányszor kell végrehajtani, sőt még az is
lehetséges, hogy egyetlen egyszer sem, ugyanakkor az ismétlés befejezéséről a
program, vagy a felhasználó (valamilyen beavatkozó szervvel: billentyűzet, egér
stb.) gondoskodik.
Szelekció: választás vagy elágazás, azaz a program egy
részletét a gép egyszer, vagy egyetlen egyszer sem hajtja végre. A végrehajtás
vagy logikai értéktől, vagy egy sorszámozott típusú (egész vagy karakter) változó
értékétől függ. Lehetőségek:
1.
Az If
utasítás. Egyszerű elágazás. Szintaktikája: If (feltétel) Then
(utasítás) Else (utasítás). Azaz utasítások végrehajtását egy
feltételhez kötjük, vagyis, ha a feltétel igaz, akkor a Then
utáni, ha nem akkor az Else utáni utasítás hajtódik végre. Az Else
előtt pontosvessző nem állhat. Az egyszerű If szerkezetben az Else
hiányzik, így csak egyetlen utásítás végrehajtása függ a feltétel logiakai
értékétől: ha igaz akkor végrehajtódik, ha nem igaz a feltétel, akkor nem. Az
utasítások helyén több utasítás nem, legfeljebb egy összetett utasítás
szerepelhet.
2.
A Case
utasítás. Többszörös elágazás. Szintaktikája: Case (szelektor)
Of érték1: utasítás; érték2: utasítás; ...; Else
utasítás; End;. A szelektor értékétől függően (amely maga
valamilyen sorszámozott típusú változó) a felsorolás azon sora (csak egyetlen)
hajtódik végre, amelyet a szelektor aktuális értéke kijelöl. Az Else
ág használata nem kötelező, ekkor lehet, hogy olyan lesz a szelektor értéke,
amely a felsorolásban nem szerepel, ekkor egyetlen utasítást sem hajt végre a
szerkezet. Az Else előtt a pontosvessző használata szükséges.
Az utasítások helyén több utasítás nem, legfeljebb egy összetett utasítás
szerepelhet.
Feltétel
nélküli ugró utasítás : a gép
feltétel nélkül, egy meghatározott programsorra ugrik, illetve befejezi a
program végrehajtását. Lehetőségek:
1.
A GoTo. A
programlista bármely helyét címkével láthatjuk el. A GoTo + címke neve -
eljáráshívással a program feltétel nélkül a címkével jelölt hely utáni első utasítással
folytatódik. A címke után kettőspontot kell írni. A címke nem állhat olyan
kulcsszavak között, melynek szintaktikája összetett. Azaz pl. egy For
ciklus kulcsszavai között. A GoTo nem illeszkedik a strukturált
programozási környezetbe, ezért használatát kerüljük.
2.
Az Exit.
Eljárásból vagy függvényből feltétel nélküli kiugrást előidéző eljárás. A gép a
program végrehajtását az eljárás vagy függvény hívási helye utáni utasításon
folytatja.
3.
A Halt. A
program feltétel nélküli befejezését előidéző eljárás. A gép vezérlése
visszakerül a programot elindító környezetbe.
Változók
típusai.
A Pascal nyelvben
minden változót a használatba vétel előtt deklarálni kell. Érvényességi kör
szerint kétféle változót ismerünk, globálist és lokálist. A
globális változót a programlista bármely helyén használhatjuk. A lokálist,
melyet eljárásban vagy függvényben deklarálhatunk, csak az adott eljáráson vagy
függvényen belül.
Egész típusú
változók:
Byte: 0-255 egész szám.
Integer: -32768 - +32767 közötti egész szám.
Longint: kb. -2 milliár - +2 milliárd közötti egész szám.
Word: 0-65535 közötti egész szám.
Valós típusú
változók:
Real : valós.
Szöveges
típusú változók:
String: 0-255 hosszúságú szöveg.
Char: tetszőleges karakter (pontosan 1 hosszúságú).
Logikai
változó:
Boolean : logikai típus, értéke vagy True (igaz) vagy False
(hamis).
Strukturált
változók:
Array: tömb, indexes változók. Az indexek száma szerint
nevezhetjük vektornak (ha egy), mátrixnak (ha kettő) vagy többdimenziós tömbnek
(ha kettőnél több az indexek száma). Nagy előnye, hogy egy néven nagyon sok
azonos típusú változót tudunk tárolni.
Record: rekord. Olyan változó, amelyben egy adott dolog több
különböző típusú jellemzőjét tudjuk tárolni. Az egyes jellemzoknek a neve:
mező. A mezők tetszőleges előre deklarált típusok lehetnek. Ha ebből a típusból
sok változónk van, akkor használhatunk rekord-tömböt, amely az egyik
legbonyolultabb változótípus a Pascal nyelvben.
File típusú
változók:
File : háromféle file-típus létezik.
Első a Text,
amely szöveges állományt jelöl. A file-ba writeln-el lehet írni, readln-el
lehet belőle olvasni (azaz teljes sorokat), hiszen sorokra tagolt a #10#13
karakterekkel.
Második a tipizált,
melybe write-al írhatunk és read-al olvashatunk, elemei előre definiált típusú
változók, leggyakrabban rekordok. Mivel minden eleme egyenlő hosszú, így az
írás és olvasás pozicionálható.
Harmadik a típus
nélküli állomány, melynek írása és olvasásakor az értékek értelmezését a
programnak (a program írójának) kell végrehajtani. Az írás és olvasás vagy
byte-onként, vagy blokkonként történik.
Fontosabb
eljárások és függvények.
Write : ir, paraméteres eljárás, a konstans paraméter
értékét változatlanul, a változót aktuális értékével jeleniti meg. Megengedett
több paraméter, melyeket vesszővel kell elválasztani. Ha az első paraméter egy
logikai file-név, akkor a logikai file-hoz hozzárendelt lemezes állományba ír.
WriteLn alakban az írást követően egy soremelést is végrehajt. Szöveges lemezes
állomány irására csak WriteLn használható. Paraméter nélkül soremelést hajt
végre.
Read :olvas, paraméteres eljárás, a változó paraméter
értékét a beolvasott értékkel tölti. Megengedett több paraméter, melyeket
vesszővel kell elválasztani. Ha az első paraméter egy logikai file-név, akkor
az olvasás a logikai file-hoz rendelt lemezes állományból történik. ReadLn
alakban az olvasás a #10#13 jelig történik, azaz egy teljes sort olvas a
szöveges állományból. Mivel a számitógép a billentyűzethez is egy szöveges
állományt rendel, igy a billentyűzetről is csak ReadLn-al olvashatunk.
Paraméter nélkül lényegében a gép arra vár, hogy a billentyűzeten az Enter
billentyűt megnyomjuk.
Readkey : billentyűzet-puffer olvasása, függvény, visszaadott
értéke a megnyomott billentyű kódja.
KeyPressed : függvény, logikai visszaadott értékkel, amely True,
ha meg volt nyomva a billentyű (azaz a billentyűzet-puffer nem üres), és False
egyébként.
ClrScr : képernyőtörlés, eljárás, mely az aktuális képernyőt
az aktuális háttérszínnel törli, és feltölti a képernyot #32-es karakterekkel,
azaz Space-szel.
GoToXY : kurzor pozicionálása a képernyőn, paraméteres
eljárás, két paraméterének a jelentése: X: 1-80 (vízszintes paraméter,
oszlopszám), Y: 1-25 (függőleges paraméter, sorszám). Ha a paraméterek hibásan
vannak megadva, akkor a program nem ad hibajelzést, csak egyszerűen nem hajtja
végre az eljárást.
TextBackGround : szöveg háttérszín, paraméteres eljárás, beállítja a
szöveg háttár színét, csak akkor látjuk hatását, ha a beállítást követően
írunk, vagy képernyőt törlünk. Megengedett paraméter értékek: 0-7.
TextColor : szövegszín, paraméteres eljárás, beállítja a szöveg
színét, csak akkor látjuk hatását, ha a beállítást követően írunk a képernyőre.
Megengedett paraméter értékek: 0-15.
Window : ablak, paraméteres eljárás, az aktuális
ablakméretet állítja a képernyőn. Négy paramétere: bal felső csúcs X
koordinátája, bal felső csúcs Y koordinátája, jobb alsó csúcs X koordinátája és
a jobb alsó csúcs Y koordinátája. Az X koordináták (1. és 3.) értéke 1-80
között, az Y koordináták értéke (2. és 4.) 1-25 között kell lenni, valamint az
első koordinátának kisebb-egyenlőnek kell lennie a harmadiknál, a másodiknak
pedig a negyediknél. Ha a paraméterek hibásan vannak megadva, akkor a program
nem ad hibajelzést, csak egyszerűen nem hajtja végre az eljárást.
Chr : karakter előállítása számból, paraméteres függvény,
a paraméter értéke 0-
Random : véletlen szám előállítása, paraméteres függvény,
egész "n" esetén véletlen számot kapunk a [0, n-1] intervallumból.
Alkalmazása: először megállapítjuk, hány véletlen számból választunk, majd
megállapítjuk, hogy melyik az első szám, amit kapni szeretnénk, és ezt a zárójelen
kívül még hozzáadjuk a kapott véletlen értékhez. Ha például [100, 200]
intervallumból kellenek véletlen számok, akkor ez: random(101)+100.
Randomize : a véletlen-szám generátor inicializálása, annak
érdekében, hogy a véletlen számsor, ne mindig ugyanaz legyen, paraméter nélküli
eljárás.
Delay : várakozás, paraméteres eljárás, a paraméter a
várakozás időtartama ezred másodpercben.
Sound : hang, paraméteres eljárás, a paraméter a
megszólalandó hang frekvenciája.
NoSound : hanggenerátor kikapcsolása, paraméter nélküli
eljárás. Ha a hanggenerátort nem kapcsoljuk ki, akkor az a program befejezése
után is szól.
Str : számnak stringgé történő átalakítása,
kétparaméteres eljárás, első paraméter a szám, második a string, amivé
alakítjuk a számot, a második paraméter csak változó lehet.
Val : string-nek számmá történő átalakítása,
háromparaméteres eljárás, első paraméter az átalakítandó string, a második az
az egész változó, amelybe a szám kerül, harmadik paramétere egy integer tipusú
változó, amelyből kiolvasható, hogy milyen sikeres az átalakítás, ugyanis az
első át nem alakítható karakter helyét jelzi, ha tehát ez nulla, akkor az
átalakítás sikeres.
Lo : alsó byte, paraméteres függvény, a word tipusú
paraméter alsó byte-ja a visszaadott érték.
Hi : felső byte, paraméteres függvény, a word tipusú
paraméter felso byte-ja a visszaadott érték.
Sqrt : négyzetgyök, paraméteres függvény, a visszaadott
érték a paraméter négyzetgyöke.
Sin : sinus, paraméteres függvény, a visszaadott érték a
paraméter sinusa, a paraméter a szögérték radiánban kifejezve.
Cos : cosinus, paraméteres függvény, a visszaadott érték
a paraméter cosinusa, a paraméter a szögérték radiánban kifejezve.
Pi : pi, a nevezetes szám-konstans, 3.141569…
Length : szöveghossz, paraméteres függvény, a paraméternek
mint szövegnek a hossza.
Copy : szövegmásolás, háromparaméteres string-értéku
függvény, az első paraméter a forrás string, a második egy szám, mely a másolt
string első karakterének helye a forrásban, a harmadik paraméter a másolt
karakterek száma.
Ord : sorszám, paraméteres függvény, a paraméter valamely
sorszámozott típusú érték, a visszaadott érték a sorszámozott típusú változó
sorszáma.
Insert : szövegbeszúrás, háromparaméteres eljárás, az elso
paraméter a beszúrandó szöveg, második az a string, amelybe beszúrunk, harmadik
paraméter azt adja meg, hogy hányadik helytől kezdve szúrunk be.
Delete : szövegrész törlése, háromparaméteres eljárás, az
első paraméter a csonkitandó szöveg, második az első törlendő karakter helye,
harmadik a törlendő karakterek száma.
Pos : szövegrész keresése, kétparaméteres függvény, az
első az a string amit keresnünk, a második az a string amiben keresünk. A
visszaadott érték az a hely, ahonnan kezdve az első string megtalálható a
másodikban, ha nem található meg, akkor a visszaadott érték 0.
UpCase : nagybetűs alak, paraméteres függvény, a paraméter
egy karakter, a visszaadott szintén, csak mindenképp nagybetűs alakot ad, ha az
adott karakternek olyan alakja létezik.
FillChar : karakterekkel való feltöltés, háromparaméteres
eljárás, az első egy változó, második egy szám, mely megmutatja, hogy a változó
hány byte-ját töltjük fel a harmadik paraméterként megadott karakterrel. Ez
lényegében közvetlenül a memóriába ír, a paraméterként átadott memóriahelyére.
SizeOf : változó mérete, paraméteres függvény, a paraméter
valamely változó, visszaadott értéke a változó mérete byte-okban.
Inc : növelés, kétparaméteres eljárás, első paraméter az
az egész tipusú változó, amelyet növelni szeretnénk, a második paraméter azt
mutatja, hogy mennyivel. Egy paraméterrel is hivható, ekkor a növelés eggyel
történik.
Dec : csökkentés, kétparaméteres eljárás, első paraméter
az az egész tipusú változó, amelyet csökkenteni szeretnénk, a második paraméter
azt mutatja, hogy mennyivel. Egy paraméterrel is hivható, ekkor a csökkentés
eggyel történik.
Round : kerekítés, paraméteres függvény, paramétere valós,
visszaadott értéke egész típusú, a paraméter egészre való kerekítése.
Unitok
Standard
Unitok. Az IDE által generált
*.EXE állományok nagysága két dologtól függ. Egyrészt attól, hogy milyen hosszú
programlistát írunk, másrészt attól, hogy mennyire szerteágazó témakörökből
tartalmaz eljárásokat, függvényeket (pl.: képernyőkezelés, lemezkezelés,
grafika …). Annak érdekében, hogy a futtatható állomány mérete csak a szükséges
méretű legyen, a különböző részterületekhez kapcsolódó eljárásokat és
függvényeket egy-egy egységbe (UNIT-ba) helyezték el, melyet a program elején
használatba kell venni (Uses kulcsszó). A következő standard unitokat fogjuk
használni:
System: az alapvető eljárásokat és függvényeket tartalmazó
unit, automatikusan használatba kerül, minden futtatható állományba
beszerkesztődik.
Crt: a képernyő és billentyűzet kezelésével kapcsolatos
eljárások és függvények.
Dos: dátummal, idővel, lemezkezeléssel kapcsolatos
eljárások és függvények.
Printer: nyomtató használatához.
Graph: a pascal két alapvetően különböző képernyőkezelést
ismer. Az egyik a karakteres, a másik a grafikus. Alapértelmezésben a képernyő
karakteres. A grafikus megjelenítéshez különböző interfész állományokat
használhatunk, melyek kiterjesztése *.BGI (Borland Grafikus Interfész). Ezek
használata a Graph unit segítségével lehetséges.
A Unit szerkezete:
Unit unitnev;
Interface
Uses unit1,unit2…;
Procedure proc1;
Procedure proc2;
…
Function func1;
...
Const (globális)
Type (globális)
Var (globális)
Implementation
Procedure proc1;
Begin
End;
Procedure proc2;
Begin
End;
…
Function func1;
Begin
End;
…
End.