Nulladik lecke

1. lecke: Alapok




Í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á.

Vissza