A Turbo Pascal forráskódját három fő részre lehet osztani:
-
programfej;
-
deklarációs rész;
-
programtörzs.
A programfej mindössze ennyiből áll:
Ennek az értelmét valójában én sem látom, de mindenesetre arra
jó, hogy adjunk egy nyolc karakternél hosszabb címet a programnak
(Maximum nyolc karakterből állhat a DOS-os fájlok azonosító neve,
plusz egy karakter a pont és három a kiterjesztés, tehát maximum
12 karakterből állhat egy fájl neve.), azaz könnyebben
felismerhetővé lehet tenni az adott programot futtatás nélkül is.
Vigyázat! Majd valószínűleg te is fogod tapasztalni, hogy nem
szeretnél egy akármilyen programot csak úgy futtatni, mert
ugyebár az kárt is tehet az operációs rendszeredben, ha úgy van
megírva.
A "programnev" szót azárt írtam ékezetek nélkül, mert nem
fogadja el a program, ahogy sok más speciális karaktert. Sőt, a
számokat sem, ha a szó elején van.
A deklarációs rész a következő képpen lesz leírva:
uses... type...
const...
var...
label...
procedure...
function...
{Ez így szintaktikailag
teljesen hibás, tehát hiába is próbálod beírni. A
procedure és a funcion mindegy, hogy milyen sorrendben
vannak. Az előtte levő kulcsszavak viszont muszáj a
megadott sorrendben legyenek.} |
A programtörzs a következő két szóval kezdődik és fejeződik be:
Ez egyben a legegyszerűbb program is, ami tulajdonképpen azt
csinálja, hogy elindul, betölt néhány adatot, kiüríti az adatokat
a memóriából és megáll. Még a programfej is és a deklarációs rész
is hiányzik. Ki is próbálhatjátok. Olyan program viszont nincs,
amelynek hiányzik a programtörzse.
Az ez utáni "end" után minden
körülmények között oda kell tenni a pontot!
Fejlesszük tovább a programot, hogy írjon is ki valamit:
{Ez egy klasszikusnak
mondható program, ami kiírja, azt, hogy "Helló
világ". Kapcsos zárójelbe írhatjuk a megjegyzéseket,
tehát a compiler (fordító program nem fogja figyelembe
venni. Ez csak segédszerkesztés, hogy átláthatóbb
legyen.}
begin
write('Helló világ');
readln;
end.
|
Forráskód letöltése
|
Program letöltése
|
A "write()" utasítás szó szerint kiírja amit a zárójelbe idézőjelek
közé írtunk. Ennek az utasításnak egy bővített változata is van:
A "writeln". Ez az utasítás nem csak kiírja az adott
szöveget, hanem a kurzort a következő sor elejére helyezi, azaz
"még leüt egy entert". Látható, hogy én használtam
ékezetes karaktereket, és eddig valószínűleg rájöttél, hogy ez
nem olyan egyszerű. Ezeket később tárgyalom.
writeln('kiírás soremeléssel'); write('kiírás soremeléssel',#13,#10);
{Alapjában véve a két kiíratási
eljárás ugyanazt teszi, csak másképp írtuk le. A ráccsal jelölt számok egy-egy
karaktert jelölnek az ASCII táblán. A 13-as számú a sor
elejére helyezi, a 10-es pedig egy sorral lennebb viszi
a kurzort.}
|
Az ASCII tábla egy kódtábla, amiben egy bájttal le lehet írni
egy karaktert, tehát 256 karaktert tartalmaz. Ezt a táblázatot a
DOS használja és eléggé hiányos (pl.: ő-t nem lehet kiíratni -
ezt általában helyettesíteni szokták egy hozzá hasonlóval).
A "readln"-t a beolvasáshoz használjuk. Minden beolvasás enterrel
végződik. Mivel a Windowsban problémák akadnak az eredeti függvény
("read") használatával, ezért azt ne használjuk!
Fontos, hogy minden utasítás után tegyél pontosvesszőt!
Vannak összetett utasítások is, amelyek csak néhol kérnek
pontosvesszőt, erre majd figyelj!
Most végezzünk el egy egyszerű összeadást!
Szükség lesz számváltozókra, amiben tároljuk azok értékeit. Ezek
a változók előre lefoglalnak a memóriából néhány bájtot.
var elso_szam,masodik_szam,harmadik_szam:integer;
{A "var" szóval deklarálunk változókat.
A változók azok, amik a memóriában tárolják az adatokat.}
{Az "elso_szam", a "masodik_szam"
és a "harmadik_szam" az általunk deklarált változók azonosítói. Tudtom szerint
a változók nevében az angol ábécé betűit, aláhúzás jelet
és számokat lehet tenni. Egyebet nem próbáltam. Nincs is
minek. A számokat pedig semmiképp se tegyünk a szó elejére!}
{Az "integer" a változó típusára
vonatkozik. Ezesetben egész számot deklaráltunk, ami
a -32768 és a 32767 értékek között vehet fel értéket. Ha
ezeknél az értékeknél kisebb, vagy nagyobb értéket adunk
meg, a gép elszámol.}
begin
write('Az első szám: ');
readln(elso_szam);
{Itt a "readln" után zárójelbe
van helyezve az első változónk. Ezt fogja beolvasni a program. Korábban azért nem tettünk semmit a "readln"
után, mert nem akartuk, hogy a beolvasott adat
elmentődjön a memóriában. A beolvasásnak sokszor csak
esztétikai céljai vannak (pl.: "A számítógép nem
érzékelt billentyűzetet és egeret kérjük kattintson az
"ok"-ra, majd nyomjon egy enter billenytyűt!":))}
write('Az második szám: ');
readln(masodik_szam);
{És
most jön az összeadás:}
harmadik_szam:=elso_szam+masodik_szam;
{Ne
felejtsd odatenni azt a kettőspontot az egyenlőségjel
elé!}
write('Az eredmény: ',harmadik_szam);
{Kiíratni
folyamatosan változókat és szövegeket is lehet. Ebben az
esetben a szöveget, mint mindig, zárójelbe, a változót
pedig ahogy máskor is magára kell beírni. Vesszővel
válasszuk el a két kiíratási formát!)}
readln;
end.
|
Forráskód letöltése
|
Program letöltése
|
Ugyanilyen módszerrel lehet kivonni, szorozni és…
hát osztani csak maradékosan, hisz egészszám-változót
deklaráltam. Sose felejtsük el,
hogy két szám hányadosa tizedes érték is lehet! A "div" és a
"mod" kifejezéseket alkalmazhatjuk a tört jel helyett. Ezek maradékos
osztásra képesek, ugyanakkor nagyon hasznosak! A "div"-vel a hányadost,
a "mod"-dal a maradékot kapod meg.
Osszunk egyet akkor, de most
fejlettebb programozási szinten!
program
osztas; {Ezt szóval nem muszáj
kitenni, de nekem szokásom.}
var elso_szam,masodik_szam:integer;
{Most kihagyom a harmadik
változót, mert tulajdonképpen annélkül is meg lehet
oldani.}
begin
write('Osztandó: ');
{Feltűnt már, hogy a begin után mindig eggyel bennebb
kezdem a szöveget? Ez a fajta megszokás, arra jó,
hogy amikor legalább 100-soros programokat írsz, akkor
átláthatóbb lesz, mert több utasításblokkot (mint a
begin-end) is fogsz használni, azaz ha véletlenül hibát
ejtesz akkor ne kelljen sorról sorra újból átnézni.}
readln(elso_szam);
write('Osztó: ');
readln(masodik_szam);
elso_szam:=elso_szam
div masodik_szam;
{He?
Nem mindenki érti meg elsőre. A számítógép elvégzi az
adott műveletet a két számmal, majd visszahelyettesíti
az adott változóba-nem pedig egy másikba, mint az előbb.
Általában érthetőbb, ha kipróbálod.}
write('Maradékos osztással
végzett hányados:',elso_szam);
readln;
end. |
Forráskód letöltése
|
Program letöltése
|
Most egy kicsit még fejlesszük, mert lehet!
program
osztas2; uses crt;
{Hát ez jelzi a fordítónak,
hogy a crt.tpu állományt kell használja, ami egy halom
olyan utasítást tartalmaz, amit másképp nem tudnánk
könnyen elérni. Mindjárt meglátjuk, hogy mihez kell.}
var elso_szam,masodik_szam:integer;
begin
write('Osztandó: '); readln(elso_szam);
{Ugye
nem szeretnéd, ha a programod hossza ilyen egyszavas
utasítások miatt nőne többszázsorosra? Eléggé
kényelmetlen a hosszú forráskódokat kezelni, tehát mivel
minden readln-nak kell legyen normális esetben egy write,
egy sorba írom, hisz kifér a képrnyőre.}
write('Osztó: '); readln(masodik_szam);
write('Maradékos osztással
végzett hányados:',elso_szam div masodik_szam);
{Na ez
már igen! Utasítást is lehet beágyazni a kiíratásba és
ugyanúgy kezeli, mint egy változót, csak előbb még
elvégzi a műveletet. De jó! Még nem is írja felül egyik
változónk értékét sem! (Nem ide kell a "uses crt.")}
readkey;
{Na
ide kell a "uses crt"! Ez az utasítás nem egy sort,
hanem csupán egy karaktert kér be, tehát bármely
billentyű lenyomására befejeződik a program és nem kezd
el fölöslegesen írni a képernyőre a betűk, írásjelek
illetve "esc" lenyomására.}
end. |
Forráskód letöltése
|
Program letöltése
|
|