Írjuk meg gyorsan első programunkat. Íme a kód:
Program Hello; { Programunk neve. }
Uses crt; { Crt unit csatolása. }
BEGIN { Főprogram kezdete. }
ClrScr; { Képernyő törlése. }
Write('Helló Világ!'); { '' között lévő szöveg kiírása. }
ReadKey; { Vár egy billentyű leütésére }
END. { Főprogram vége. }
Amennyiben ezt begépeljük és kiadjuk a run->run parancsot, vagy legyomjuk a Crtl+F9 billentyűzet
kombinációt a következő kimenetet kapjuk:
Helló Világ!
Hogyan lesz ebből a szövegből program? Miért pont ezt a szöveget kell begépelni? Ez már programozás?
A kérdések jogosak. Kezdjük az utolsóval. Röviden: igen. Hosszaban: a Pascal programozási nyelv egy
magas szintű programozási nyelv. Ezek a nyelvek (C, Basic, Pascal) sokkal egyszerűbbek elődjeiknél
az alacsony szintű nyelvektől. Itt már egyszerű angol szavak, illetve rövidítések segítségével kell
elkészítenünk egy szöveges állományt. Tehát amikor begépeltük a fenti szöveget nem tettünk mást, mint
megírtunk Pascal nyelven egy programot. Nyílván a nyelv elemei kötöttek. Nem írhatunk egyik szó helyére
sem annak egy szinonímáját. Vagyis meg kell tanulni ezeket a szavakat. Ezzel remélem megválaszoltam a
második kérdést is. Nem véletlenül hagytam az elsőt a végére. Ez jóval öszetettebb mint amennyire most
magyarázni fogom. Érjük be most annyival, hogy szövegünket odaadjuk egy eszköznek (amit most fordítónak
fogok hívni) ami értelmezi a benne lévő szavakat és elkészíti a futattható állományt. Mindez akkor
történt amikor kiadtuk a run parancsot. A fordítás lépéseiről még lesz szó egy későbbi leckében, most nem
szeretném húzni vele az időt.
Nézzük meg kicsit közelebbről ezt a szöveget. Amit { } zárójelek közé írsz nem veszi figyelembe a
fordító. Ezt, ahogy én is tettem, kommentek készítéséhez használják fel. Egy 5-6 soros programnál még
nincs túl sok értelme, de egy 5-600 sorosnál már annál inkább. Aki nem hiszi, az tanuljon a saját kárán.
Az első sorban megadjuk programunk nevét (nem kell megegyezzen a fájl nevével). Ennek a névnek meg kell
felelnie egy szabálynak. Íme: Pascalban az azonosító az angol abc egy betűjével illetve _ jellel kezdődik
és folytatódHAT betűvel _ jellel illetve számmal. Remélem érzed a mondat összetettségét. Részletezve a
következőt jelenti:
1. A Pascal csak az angol abc-t ismeri. Vagyis nem ismeri a magyar (öüóőúűá) és egyéb speciális
karakterek nagy részét.
2. A Pascalban az _ jelet is lehet betűként használni.
3. A Pascalban az azonosítókban szerepelhetnek számok is, de nem kezdődhet egy azonosító sem számmal.
4. Ez ugyan nem következik az előbbi szabályból, de fontos megemlíteni. A Pascal nem tesz különbséget kis
és nagy betű között.
5. Nem adhatunk meg foglalt szavakat, mint pl.: begin, end stb...
Természetesen most az azonosítókról beszéltem. ''-ok közé írt szöveg nem azonosító. Oda lehet írni bármit.
Második sorban csatoltuk a crt unitot (egységet). A crt tartalmaz számos fontos eszközt (pl.: ClrScr,
ReadKey) amiket használtam. Ezért kellett csatolni. Idáig eléggé sablonosak lesznek a programjaink. Ezt a
két sort mindíg be fogjuk gépelni.
A lényeg, ahova az érdemi rész kerül még csak most jön. BEGIN és END. (a pont is fontos!!) között írhatod
le mit is csináljon a program. Most első lépésben töröljük a képernyőt. Ezt a ClrScr-el teheted meg. Majd
kiírjuk rá a szöveget a Write segítségével, végül várunk egy billentyű leütésére. Ez utóbbira miért van
szükség? Tedd { } zárójelek közé (így nem veszi figyelembe a fordtó) és meglátod.
Ha ki tudunk írni egy sort akkor ki tudunk írni többet is? Tegyünk egy kísérletet:
Program ket_sor; { Programunk neve. }
Uses crt; { Crt unit csatolása. }
BEGIN { Főprogram kezdete. }
ClrScr; { Képernyő törlése. }
Write('Első sor!'); { '' között lévő szöveg kiírása. }
Write('Második sor!'); { '' között lévő szöveg kiírása. }
ReadKey; { Vár egy billentyű leütésére }
END. { Főprogram vége. }
Íme a kimenet:
Első sor!Második sor!
A hiba oka egszerű. A Write nem tesz újsor karakter (magyarul entert) a sor végére. Ha ezt szeretnénk
használjuk a WriteLn-t.
WriteLn('Első sor!');
Write('Második sor!');
Így máris jobb:
Első sor!
Második sor!
Létezik egy másik megoldása is a problémának. Ez ugyan öszetettebb, de cserébe több mindenre jó. Lehetőség
van pozicionálni a szöveget oda ahova szeretnénk. Erre való a GoToXY(X_koordináta, Y_koordináta). A
képernyő bal felső sarka az (1;1) koordinátájú pont. Balra növekszik az X lefelé pedig az Y. Ez eltér egy
kicsit attól amit az iskolában tanítottak de némi gyakorlás után megszokja az ember. Lássuk a kódot:
Program sz_pozic;
Uses crt;
BEGIN
ClrScr;
GoToXY(1,1); { Szöveg pozicionálása. }
Write('Első sor!');
GoToXY(1,2);
Write('Második sor!');
GoToXY(10,5);
Write('5. sor 10. oszlop!');
ReadKey;
END.
Egy kis matek. Adjunk össze, osszunk el két számot! Pontosabban ne mi. Csináltassuk meg a géppel. Most már
nem fogom az egész programot leírni csak a lényeget. A többit úgy is mindenki hozzá tudja képzelni.
WriteLn('5+5=',5+5);
WriteLn(10/5);
Amint látható is, nem csak ''-ok közé lehet írni. Amit pedig nem oda írunk azt kiértékeli és az értékét
írja ki. A ''-os részt a nem ''-ostól ,-vel kell elválasztani. Amint az látható az ''-os rész nem is
kötelező, sőt (bár ez nem látszik) egyik sem az. A WriteLn; ebben a formában ugrik egy sort és nem ír ki
semmit. De mi lesz a kimenet? Íme:
5+5=10
2.0000000000E+00
Na ez meg mi a fene? Az osztás eredménye lehetett volna tört szám is. A törteket pedig így jeleníti meg a
Pascal. Ez első tag (egészen az E betűig) mindíg egy 0 vagy attól nagyobb, de 10-től kisebb szám. A E
után pedig azt jelzi mennyivel kell jobbra vinni a tizedes pontot, magyarul 10 a hanyadikonnak kell
szorozni a számot ahhoz, hogy megkapjuk a végeredményt. Remélem mindenkinek ismerős ez az alak az iskolából.
De mi van, ha mi nem szeretnénk ezzel riogatni az embereket. Van megoldás, íme:
WriteLn(10/5:0:2);
Habár tanultam mire való hivatalosan az első érték ami a : után áll, de már nem emlékszem. Ugyanis a
gyakorlatban nem ez történik. Igazából nem is csinál semmit. Én akármit írok oda nem változik a kimenet. A
második viszont fontos, ez adja meg ugyanis, hogy hány tizedesjegyig írja ki az eredményt a képernyőre.
Szükség esetén kerekít, a jól megszokott módon 5-től felfelé.
5+5=10
2.00
Ugye máris jobb?
Módosítsuk úgy programunkat, hogy futás közben, a billentyűzetről kérjen be számokat és azokat adja össze!
Ehhez valahol el kell tárolni ezeket a számokat. De hol és hogyan? Az első kérdésre a válasz: a memóriában.
Hogyan? Változók segítségével. Ahhoz, hogy a memóriába adatokat tudjunk tenni ki kell választanunk egy
részét, lehetőleg olyat amit még nem használunk. A kiválasztás terhe szerencsére le van véve a vállunkról.
Mindössze meg kell kérni rá a Pascal-t, hogy tegye meg. A kiválasztás során nyílván adni kell neki nevet
is, hogy később hivatkozni tudjunk rá. Valamint az sem mindegy, hogy a kiválasztás során mire szeretnénk
felhasználni, mit szeretnénk tenni oda. Összegzésképp a változónak van:
1. címe (hol van a memóriában)
2. típusa (mit tárolunk benne)
3. értéke (a benne tárolt adat)
Hogyan lehet létrehozni változót, értéket adni neki, felhasználni?
Program valtozo; { Programunk neve. }
Uses crt; { Crt unit csatolása. }
var a,b,c : Integer; { 3 db (a,b,c nevű) változó létrehozása. }
BEGIN
ClrScr;
a := 5; { a nevű változónak értékül adunk 5-öt }
b := 3; { b nevű változónak értékül adunk 3-at }
c := a+b; { c nevű változónak értékül adjuk a+b -t }
write(c);
ReadKey;
END.
A változókat mindíg a főprogram előtt hozhatjuk létre a var kulcsszó után. A változó név is azonosító,
tehát érvényesek rá a fent leírtak. Miután létrehoztuk használhatjuk őket a főprogramban. Ha értéket
szeretnénk adni neki a := jelet használjuk. Ha ki szeretnénk iratni ''-ok nélkült tegyük. Miért?? Próbáld
ki ''-okal és meglátod! Valószínűleg kíváncsiak vagytok mi az az Integer. Az a típusa a változónak. Az
integer egy egész számokat tartalmazó típus, lehet negatív is. Később még szó lesz a típusokról, most
legyen elég ennyi.
A feladat megoldásához valahogyan be kell olvasni számokat a billentyűzetről. Ezt a ReadLn-el teheted meg.
Íme a kód:
Program valtozo; { Programunk neve. }
Uses crt; { Crt unit csatolása. }
var a,b,c : Integer; { 3 db (a,b,c nevű) változó létrehozása. }
BEGIN
ClrScr;
Write('Add meg az első számot: ');
ReadLn(a); { Beolvasás a billentyűzetről. }
Write('Add meg a második számot: ');
ReadLn(b); { Beolvasás a billentyűzetről. }
c := a+b;
write(c);
ReadKey;
END.
A beolvasást az enter fejezi be. Ha nem számot adunk meg, akkor leáll hibával a programunk. Miután beírtuk
a számot a ReadLn-ben megadott változó értéke ez a szám lesz. A változókal műveleteket lehet végezni
(+-*/), ki lehet iratni azokat.
Végezetül szeretném felhíni a figyelmedet egy fontos dologra. Amikor programot írsz, törekedj mindíg arra,
hogy a kód olvasható legyen. Gondolom észrevetted, hogy a sorok nem mindíg ugyanott kezdődnek. Nagy betűket
sem lenne kötelező használni. Törekedj mindíg a szép külalkra, és használd ezeket az egyszerű eszközöket!
Ennyi volt az első lecke. A másodikban megnézzük majd az elágazásokat és ciklusokat. Ha valamit nem értettél
volna írd meg a fórumban, ott válaszolok majd rá.