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.
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:
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:
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-255, a visszaadott érték a paraméter értéke által meghatározott ASCII kódú karakter.
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.
A Pascal fejlesztői megadták a lehetőséget a felhasználóknak is arra, hogy saját UNIT-okat szerkesszenek. Ennek az a hatalmas előnye, hogy egyszer jól megírt eljárásainkat UNIT-ban tárolva nagyon sokszor és sokáig használhatjuk. Mi a Crt-hez kapcsolódó eljárásainkat és függvényeinket a CrtPlus-ban helyeztük el.
KeyEmpty : eljárás, billentyűzet-puffer ürítő.
Varj : eljárás, vár addig, ameddig meg nem nyomunk egy billentyűt. A billentyűzet puffer üres lesz az eljárás után.
Felre : eljárás, kurzor az aktív képernyő bal alsó sarkába ugrik
Tunj : eljárás, a kurzor eltűnik
Szinek : kétparaméteres eljárás, első paraméter a háttérszín, második a karakterszín
Szinez : ötparaméteres eljárás, a képernyő egy sorában megadható darabszámú képernyőhely színeit állítja be. Paraméterek:
Torol : eljárás, a képernyő egy adott helyétől törli a képernyő memórát
Tolt : eljárás, a képernyő egy adott helyétől adott karakterrel tölti a képernyő memóriát
WriteXY : háromparaméteres eljárás, képernyő adott helyére ír. Paraméterek:
IrXY : eljárás, adott helytől, adott stringet ír a képernyő memóriába
Vvonal : háromparaméteres eljárás, a képernyő adott sorába vízszintes vonalat húz. Paraméterek:
Fvonal : háromparaméteres eljárás, a képernyő adott oszlopába függőleges vonalat húz. Paraméterek:
Keret : négyparaméteres eljárás, a képernyőre egy téglalap alakú keretet rajzol. A négy paraméter a Window standard eljárás paramétereivel teljesen megegyezik. (bfx: bal felső csúcs x koordináta, bfy: bal felső csúcs y koordináta, jax: jobb alsó csúcs x koordináta, jay: jobb alsó csúcs y koordináta)
Racs : hatparaméteres eljárás, a képernyőre egy téglalap elrendezésű rácsot helyez. Paraméterek:
Ablak : nyolcparaméteres eljárás, a képernyőre egy színes, keretes, címkés, árnyékos ablakot rajzol. Paraméterek:
Uzenet : háromparaméteres eljárás, a képernyő közepén egy ablakban egy egysoros üzenetet jelenít meg. Paraméterek:
Kerdezo : háromparaméteres függvény, mely egy eldöntendo kérdést tesz fel, visszatérési értéke logikai. Paraméterek:
Bevitel : ötparaméteres függvény, amely a képernyő egy helyétől kezdve, legfeljebb a képernyősor végéig egy szerkeszthető beviteli területet ad. A visszaadott érték a bevitt szöveg. Paraméterek:
Password : függvény, mely a Bevitel függvénnyel bevitt stringről megállapítja, hogy mint jelszó, helyes-e
Menu : nyolcparaméteres függvény, mely a képernyőn megjelenített menüpontokból a vezérlőbillentyűk segítségével választási lehetőséget biztosít. Visszaadott értéke a kiválasztott menüpont sorszáma. Paraméterek:
ValidSt : egyparaméteres függvény, mely a paraméterként kapott stringbol eltávolítja a fölösleges Space-szeket és így adja vissza.
Listazo : tízenegy-paraméteres függvény, mely a képernyőn egy string-listát jelenít meg, melyből a vezérlőbillentyuk segítségével választhatunk, visszaadott értéke a kiválasztott string indexe. Paraméterek:
Listara : egyparaméteres függvény, nemlátható elem, lényegében egy rendezett string-listát kezel, mely a globális string-tömbben található, visszaadott értéke a string-lista elemszáma, nem enged meg azonos string-eket a listában, a listára helyezés előtt a string-eket validálja (ValidSt).
Listarol : egyparaméteres függvény, nemlátható elem, lényegében egy rendezett string-listát kezel, arról törli a paraméter stringet, mely a globális string-tömbben található, visszaadott értéke a string-lista elemszáma, ha nem volt a listán, akkor 0-t kapunk. (a paraméter stringet validálja (ValidSt)).
FileKereso : függvény, az aktuális könyvtár, adott kiterjesztésű állományait a Listazo függvény segítségével megmutatja, visszaadott értéke a kiválasztott file neve.
Gomb : eljárás, mely egy feliratos, egérrel kezelhető nyomógomb látványát adja.
GombKereso : függvény, mely megadja az adott helyen található egérrel kezelhető látvány Hot-Key kódját.
ImputLine : függvény, mely címkés beviteli sort kezel, visszaadott értéke a bevitt String.
RadioGomb : eljárás, mely egy egérrel választható, rádiógomb kapcsoló látványát állítja elő.
RadioGombKapcs : függvény, mely rádiógomb választását adja vissza.
Destop : eljárás, mely a Turbo Pascal IDE látványát adja, egérrel kezelhető felületek alapja, Alt-X -re kilép.
Binaris : függvény, mely az átvett Word típusú számnak a kettes számrendszerbeli alakját adja vissza String-ként.
Tizes : függvény, mely az átvett String-ből a szám tízes számrendszerbeli alakját adja vissza.
SetBit : függvény, mely az átvett Word típusú számnak a megadott sorszámú bitjét az adott bitre állítja.
ValtBit : függvény, mely az átvett Word típusú számnak a megadott sorszámú bitjét az ellenkezőjére állítja.