Pascal
Programming Practices
Power Programming with Pascal
Görbe Mihály
2008-2009
Bevezető
Korunk egyik legizgalmasabb
technikai eszköze a számítógép. Széleskörű felhasználása révén mindennapjaink
nélkülözhetetlen segítőjévé vált. Használatát már kisgyermekkorban megkezdjük,
megszokjuk viselkedését. Örülünk, ha segít nekünk, bánkódunk, ha cserben hagy
bennünket. Ez a feladatgyűjtemény arra próbál példát mutatni, hogyan lehet
minél hamarabb egy programozási nyelv rejtelmeibe betekintést nyerni. Készült e
könyv mindazoknak, akik előítélet nélkül, el tudnak fogadni egy koncepciót, és
azt saját tanulásuk közben merik alkalmazni. De azok is haszonnal forgathatják,
akik csak algoritmusokat, gépi megoldásokat keresnek egy-egy problémára. A
könyv nem programozási kézikönyv. Nem tartalmazza a Pascal nyelv valamennyi
részletét. A fő cél: a gép legfontosabb perifériáinak a kezelése programban.
Ezek a következők: billentyűzet, képernyő, egér és a lemezes egységek. Nagy
hangsúlyt kapnak még a különböző adatszerkezetek is: úgymint a tömb, a rekord,
a fájl valamint a különböző listák.
A
programkészítés lépései:
1.
Tervezés
2.
A programnyelv
kiválasztása
3.
Kódolás
4.
A program
tesztelése
5.
Dokumentálás.
Programnyelvek
generációi:
1. Gépi kódú programozási nyelvek, csak egy géptípusra
(processzorra) alkalmazhatók, azaz gépfüggő nyelvek.
2. Assembly nyelv, amely lényegében szintén gépi kódú
programnyelv, csak az utasításkódok helyett emlékeztető (angol) rövidítéseket
használ, valamint címkéket és változókat is tud kezelni
3. Magas szintű programozási nyelvek, algoritmikus
nyelvek, (Algol, Cobol, Fortran, PL1, Logo, C, C++,
Basic, Java, Pascal) amelyben valamely beszélt nyelvhez (angol) közeli formában
írhatók le a programok utasításai, nagymértékben gépfüggetlen formában.
4. 4. Generációs nyelvek, grafikus felületű
programfejlesztői rendszerek (4GL, pl.: DELPHI, mely a Pascal nyelv vizuális
bővítése).
Turbo Pascal
7.0
A Turbo Pascal 7.0 egy magas
szintű programozási nyelv, mely támogatja az objektum orientált programozást,
DOS-os (karakteres), valamint Windows-s felületen is használható.
Lényegében minden programkészítési lépés elvégezhető a
nyelv Integrált Fejlesztői Környezetével (Integrated Development Environment: azaz az IDE-vel), amely a Turbo, a Tpx, a Bp vagy a Bpw programmal
indítható attól függően, hogy a nyelv milyen interpretációjával rendelkezünk illetve akarunk használni. Az utóbbi a
Windows-s változatát futtatja. Ez a könyv csak a DOS-os verzióval és
programozásával foglalkozik. A könyv programjai a Bp környezetében készültek.
Hálózati
beállítások:
Ha a számítógépünk hálózatban van, és egy hálózati
meghajtón van a Home könyvtárunk, akkor következő tevékenységeket
kell végrehajtani:
1. Pascal könyvtár létrehozása a Serveren a Home könyvtárban.
2. A Home könyvtárhoz hálózati meghajtót kell rendelni,
esetleg parancsikonok létrehozása az asztalon (Home könyvtárra, illetve az IDE-re). Ha a következő bejelentkezéskor ez a meghajtó nem
létezik, akkor újra létre kell hozni.
3. Futtatás után az IDE-ben: Change Dir …, majd a Home
könyvtárban lévő Pascal könyvtár beállítása. Ha az IDE indítását az operációs
rendszerre szeretnénk bízni, akkor a pas
kiterjesztésű állományokat a Turbo Pascal IDE-jével kell társítani. Ekkor az aktuális könyvtár az
indítási hely lesz, a kimentés automatikusan ide történik.
Az IDE
menürendszere:
1.
File (file műveletek: új file létrehozása, betöltés,
mentés, mentés másként, könyvtárváltás, nyomtatás)
2.
Edit (programlista szerkesztése, másolás, kivágás,
beillesztés, visszavonás, vágólap megtekintése)
3.
Search (keresés a programlistában, szövegrész cseréje)
4.
Run (futtatás, lépésenkénti futtatás, futtatás a kurzor
helyéig)
5.
Compile (fordítás, információ a fordítás eredményéről)
6.
Debug (programbelövés, nyomkövetés)
7.
Tools (eszközök)
8.
Options (beállítások, környezeti beállítások)
9.
Window (programlisták képernyőn való megjelenítésének
beállítása)
10. Help
(segítség)
Menüválasztás: egérrel vagy Alt+HotKey vagy F10, majd
pl. cursor vezérlő billentyűk, újra HotKey vagy újra egér.
Programablak: kék téglalap, fehér
kettősvonalú kerettel. Részei: felső sora a címke sor, bal szélén zöld téglalap
alakú bezáró ikonnal, középen a program DOS nevével, ha noname00.pas, akkor még
nem volt kimentve lemezre. A programlisták DOS neve *.pas kiterjesztésűek, a
korábbi állapotú neve *.bak, melyből átnevezéssel visszaállítható a *.pas
állomány. A futtatáskor, vagy külön kérésre a lemezen létrejön egy, az IDE-től
teljesen független *.exe futtatható állomány is. A címke sor jobb szélén van
egy ablaksorszám, amely segítségével az ablakra át lehet váltani: Alt+Sorszám (max. 9). Egy program
több ablakban is meg lehet nyitni. Ekkor a kereten a neve után kettőspont és a
megnyitási sorszám jelenik meg. Általában nincs szükség arra, hogy egy lista
két ablakban is megjelenjen, talán csak akkor, ha egy hosszú lista egymástól
távoli részeit egyszerre szeretnénk látni a képernyőn. Ekkor a megjelenítő
ablakokat csökkentett méretre kell beállítani, és úgy elhelyezni, hogy a
számunkra fontos részek egymást ne takarják. Az IDE minden programablaknak két
állapotát jegyzi meg, egyik a maximális méret, a másik egy kisebbített. A két
állapot között az ablak jobb felső részén lévő felfelé, vagy le-fel nyíl alakú
ikonnal, vagy F5 segítségével válthatunk. Ha a programablakot egérrel a címke
soránál megfogjuk, akkor mozgathatjuk. Az ablak jobb alsó sarkát megfogva, az
ablakot méretezhetjük. Az ablak alsó sorában, bal oldalt a kereten, ha csillag
látható, akkor a lista az utolsó mentés óta már változott. Kicsit beljebb két
szám van, mely az író cursor helyét mutatja a programlistában, első a sor,
második az oszlop. A keret jobb oldalán, illetve alul görgető sávok találhatók,
arra az esetre, ha a programlista nem látható teljesen a képernyőn.
Alapok
1.)
Írjunk programot, amely az üres kék színű képernyő közepén egy sárga színnel
írt szöveget villogtat.
Minden
Pascal program legalább három sorból áll:
Program
Elso;
End.
A lista kövéren
írt szavai lefoglalt szavak a Pascalban, a képernyőn fehéren jelennek meg. A
lefoglalt szavakat csak a nyelv által meghatározott szerepben használhatjuk. A Program szó azt jelzi, hogy a
következőkben egy program listáját írjuk le. A Program szó után következik a program DOS neve kiterjesztés nélkül.
A sort pontosvessző zárja. A pontosvesszőt nagyon sok esetben használni kell.
Szerepe: utasítás elválasztó, valamint üres utasítás. Csak néhány sor végére
nem tesszük ki. Van olyan eset, amikor megjelenése nem befolyásolja a listát,
van olyan, amikor megváltozik a program jelentése, van olyan eset is, amikor
szintaktikai hibát jelent egy fölöslegesen írt pontosvessző. Tehát ez a jel
külön figyelmet érdemel. A programunk listájának kétféle helyességnek kell
eleget tenni: szintaktikai és szemantikai. Az első: helyesírási vagy
nyelvhelyességi, míg a második tartalmi helyességet jelent. Az IDE minden szintaktikai
hibát felfedez, a tartalmi helyesség megvalósítása a programozó feladata. A Begin a programlista kezdetét jelzi,
míg az End. a lista végét. A program
utasításait, eljárásait, függvényeit a Begin
és End. közé kell írni. Jó tanács:
programírás közben ügyelni kell arra, hogy a lista állapota a lehető
legközelebb legyen a futtatható állapothoz. Így, ha leírunk egy Begin-t, akkor azonnal írjunk End-et is. Az End. a Begin strukturált
párja. A Pascal ugyanis egy strukturált programozási nyelv, melyet a lista
megjelenése is tükröz. A strukturált kulcsszó-párokat úgy kell a listában
elhelyezni, hogy azok azonos oszlopban kezdődjenek és az első két betűjük közzé,
ne írjunk semmit, bekezdésesen írjuk a lista azon részét, mely a két kulcsszó
között van. Gyakorlatilag a programot mindig beszúrással a belsejében bővítjük.
Azaz pl. kinyitjuk a Begin-End-et és két Space után, írjuk a program utasításait.
Program
Elso;
Write(’Ez az első programunk’);
End.
Ez a program már egy utasítást (vagy eljárást) is tartalmaz,
amely talán az egyik legfontosabb, ez pedig: a Write. Ebben a programban a képernyőn
való megjelenítésre használjuk. A kiírandó szöveget az eljárásnév és zárójel
után idézőjelben kell megadni. Az idézőjelet és zárójelet is be kell zárni és a
sor végére ;-t kell tenni. Ezt a programot már érdemes futtatni, hiszen van
benne végrehajtható utasítás. A futtatást, abban az esetben, ha még az adott
állapotban még nem volt lefuttatva a program, fordítási művelet előzi meg.
Akkor, ha csak azt szeretnénk tudni, hogy helyes-e a programlista, kérhetjük az
IDE-től, hogy csak fordítást végezzen. Erre szolgál az F9 billentyű. A fordítás
eredményeként egy ablakot látunk, mely a lefordított sorok számát tartalmazza.
Bármely billentyűre eltűnik. Ha a listában a fordító hibát talál, azt egy
pirosan írt sorban jelzi. Az Error szó mellett a hiba kódját látjuk, majd angolul
leírva a hiba jellege. Az egyik leggyakoribb hiba: Expected - valami hiányzik,
mégpedig az, amit az idézőjelek közé írt. A másik: Unknown Identifier -
ismeretlen azonosító a cursor helyén. A programot futtathatjuk a Ctrl+F9
billentyű kombinációval. Ha ezt az Elso
programmal megtettük, egy villanáson kívül semmit nem látunk az eredményből. Az
IDE futása alatt a képernyőt megkettőzve kell elképzelni. Az egyiket teljesen
uralja az IDE, a másik a kimenti képernyő, melyre futás közben, a futás
idejére, a gép átvált. Programunk oly gyorsan végrehajtódik, hogy a kimeneti
képernyőt nem láthatjuk. A kimeneti képernyő megtekintése: Alt+F5 –el
lehetséges. Bármely billentyűre visszajutunk az IDE-be. A kimeneti képernyőn
látható a programfutás eredménye, valamely sorban látható a szöveg: Ez az első
programunk. Ahányszor lefuttatjuk a kis programunkat, annyiszor jelenik meg a
szöveg, mindig ott folytatva az írást, ahol előzőleg abbahagyta. Ha a kimeneti
képernyőt a program futása közben szeretnénk látni, azaz hogy ne kelljen mindig
átváltani Alt+F5-el, az End elé
írjuk be a ReadLn; utasítást:
Program
Elso;
Write(’Ez az első programunk’);
ReadLn;
End.
A ReadLn; eljárás ebben a szerepben arra való, hogy
mindaddig olvas a billentyűzetről, ameddig Enter-t nem nyomunk. Így a kimenti
képernyőt, tetszőleges ideig nézegethetjük. Az IDE-be tehát csak Enter
billentyűvel juthatunk vissza.
Jó dolog lenne, ha csak a program által kért szöveg
jelenne meg a képernyőn, más nem. Ehhez a kiírás előtt le kell törölni a képernyőt.
A listába tehát nem mindegy, hová írjuk a képernyőtörlő utasítást. A program utasításait
ugyanis a gép olvasási sorrendben hajtja végre, azaz
balról jobbra, fentről lefelé, ez a szekvencia.
Program
Elso;
ClrScr;
Write(’Ez az első programunk’);
ReadLn;
End.
Az új eljárás tehát a ClrScr; azaz a Clear Screen, vagyis
képernyőtörlés. Ha futtatni szeretnénk a programot, akkor ezt az eljárásnevet a
fordító nem érti. Ez azért van így, mert a Pascal nyelv egy nagyon összetett,
univerzális programnyelv. Így a részfeladatok mindegyikének végrehajtására
alapértelmezésben nem képes. A részterületek eljárásait külön, un. Unit-okban (Egység-ekben) találhatjuk, melyet a programnak, ha
szükséges, használatba kell venni. Erre való a Uses lefoglalt szó. A képernyőkezelés
és egyéb fontos eljárások a Crt Unitban találhatók. Használata a következő:
Program
Elso;
Uses
Crt;
ClrScr;
Write(’Ez az első programunk’);
ReadLn;
End.
Most már lassú gépeken lefut a program. Ha gépünk
órajele nagyobb 233 MHz-nél, akkor még egy teendőnk
van. Használatba kell venni a Crt javító Unit-ját, a NewDelayt
is, mégpedig a Crt előtt. Ha számítógépünk a karakteres kimeneti képernyője
megjelenítésekor 50 sort használ, akkor első utasításként a 25 soros
beállításra kell utasítani a gépet a TextMode
eljárással, mely szintén a Crt Unit-ban van
deklarálva.
A ClrScr törli a képernyőt, a kurzort a bal felső
sarokba állítja. Oldjuk meg azt, hogy a szöveg a képernyő közepén jelenjen meg.
Ehhez nem a bal felső sarokban kellene a kurzornak lenni, hanem a képernyő
közepe táján. A kurzor áthelyezésére szolgál a GoToXY eljárás (szintén a Crt
Unit eljárása). Ennek két paramétere van, melyet a neve után, zárójelbe,
vesszővel elválasztva kell beírni. Az első paraméter a cursor X koordinátája,
mely 1-80 intervallumban változhat (balról jobbra), a második az Y koordináta,
mely 1-25 intervallumból való (fentről lefelé). A kiírandó szöveg hosszának a
felét kivonjuk 40-ből, itt kezdődik a szöveg, és válasszuk a 12. Sort. Ekkor a
lista így néz ki:
Program
Elso;
Uses
NewDelay, Crt;
TextMode(CO80);
ClrScr;
GoToXY(29,12);
Write(’Ez az első programunk’);
ReadLn;
End.
Állítsuk be a képernyő, azaz a háttér és az írás szint
is. Erre való a TextBackGround és a TextColor (Crt)
eljárások, amelyeket a CrlScr illetve a Write eljárás előtt kell a listában
elhelyezni.
Program
Elso;
Uses
NewDelay, Crt;
TextMode(CO80);
TextBackGround(Blue);
TextColor(Yellow);
ClrScr;
GoToXY(29,12);
Write(’Ez az első programunk’);
GoToXY(1,25);
ReadLn;
End.
A programot futtatva, a kék képernyő közepén sárga
színnel jelenik meg a szöveg. A Write utáni GoToXY(1,25) a kurzort a képernyő
bal alsó sarkába, kevésbé látható helyre helyezi. Utolsó lépésként változtassuk
meg úgy a programot, hogy a kiírt szöveg villogjon. Ennek a feladatnak a
kapcsán nézzük meg, hogyan kaphatunk segítséget a munkánkhoz az IDE-től. Ha F1
billentyűt nyomunk, Help képernyőt kapunk. Igaz angol nyelvű, de az eljárások és függvények alkalmazását bemutatja,
mintaprogramokat is tartalmaz, valamint az egymással rokon részeket együtt
láthatjuk, így könnyen bővíthetjük egy adott program lehetőségeit. Ha valamely
eljárás vagy függvény nevét ismerjük, vagy valamilyen rögzített szót ismerünk,
könnyen kérhetünk olyan Helpet, amely közvetlen a
keresett szóhoz kapcsolódik. Ez a helyzet érzékeny Help. Ehhez álljunk a
programlistán a kérdéses szóra, pl.: Blue-ra és
nyomjuk meg a Ctrl+F1-et. Ekkor a képernyő és írás színek lehetséges értékeit
olvashatjuk le a zöldes színű ablakból. Ha azt szeretnénk, hogy maximális
legyen a mérete, nyomjunk F5-öt. A háttér színeket és írás színeket
kétféleképpen adhatjuk meg, vagy a szín angol nevével, vagy kódokkal. Az angol
név és a kód a Helpből kiolvasható. A kódok értéke
háttérszínnél: 0-7, karakterszínnél: 0-15. Különböző értékeket írva az
eljárásokba, a hatását a színek vonatkozásában, a képernyőn megfigyelhetjük.
Arra kell vigyázni, hogy a háttér színe és az írás színe ne egyezzen meg, mert
akkor nem látszik a szöveg. Visszatérve utolsó részfeladatunkhoz: ha az
írásszínhez hozzáadunk egy Blink-et, azaz 128-at,
akkor a szöveg, a megadott színnel villogni fog. Kész programunk tehát így fog
kinézni:
Program
Elso;
Uses
NewDelay, Crt;
TextMode(CO80);
TextBackGround(Blue);
TextColor(Yellow+Blink);
ClrScr;
GoToXY(29,12);
Write(’Ez az első programunk’);
GoToXY(1,25);
ReadLn;
End.
Az első programunk végére értünk. A programok beírását
mindig a fejlesztési lépések figyelembe vételével kell, a bemutatott lépéseknek
megfelelően végrehajtani. Arra kell törekednünk, hogy a program szinte minden
újabb utasítás beírása után futtatható legyen, egyre jobban megközelítve a
végső állapotot. Ez azt eredményezi, hogy mindig a változtatást tesztelhetjük,
kialakíthatjuk a legjobb megoldást, s eközben megfelelően megismerhetjük a
kérdéses eljárást vagy függvényt.
Ha azt szeretnénk, hogy az IDE-ből
való kilépés után a program listáját újra megtaláljuk, akkor azt ki kell
menteni egy háttértárolóra. Erre figyelmeztet a bal alsó kereten lévő * is.
Kimentést F2-vel kezdeményezhetünk. Ha már ki volt mentve a lista, akkor a
folyamat nagyon rövid idő alatt lejátszódik, semmit nem kell közben tenni, a
csillag is eltűnik a keretről. Ha még nem volt kimentve, nem volt általunk
adott neve, akkor egy párbeszédablak jelenik meg, a Save
As. Itt beírjuk a program nevét: Elso, majd Enter-t nyomunk, vagy OK-ra kattintunk. A keret közepén
megjelenik az Elso.pas
ami a program DOS neve. Az IDE-t legkönnyebben Alt+x-el hagyhatjuk el. Ha újra indítjuk az IDE-t, és szeretnénk megtekinteni az Elso.pas, vagy valamely más
program listáját, akkor azt F3-al kezdeményezhetjük, ez az Open
azaz megnyitás. A megnyitandó file nevére egérrel kétszer kattintva, az
betöltődik, majd javíthatjuk, fordíthatjuk, futtathatjuk.
Az első program kapcsán nagyon sok fontos, gyakran
végrehajtandó dolgot kellett megtanulni. A további programoknál ezekről már nem
lesz szó (programlistába való beszúrás, lista kimentése, betöltése, javítása,
Help kérése, fordítás, futtatás).