kategória | ||||||||||
|
||||||||||
|
||
Értékadás, kifejezések, standard input/output
Értékadás
Egy változónak értékadással adhatunk értéket. Az értékadásban szereplő kifejezés lehet érték, azonosító vagy függvényhívás. Az értékadás operátora a := jel, aminek a jelentése: legyen egyenlő. Az értékadó operátor bal oldalán egy változó áll, jobb oldalán pedig egy kifejezés. Nézzünk néhány példát:
x:=50;Kifejezések
Az egyes adattípusokkal - azon kívül, hogy változókat deklarálunk és azoknak értéket adunk - aritmetikai, relációs és logikai mûveleteket is végezhetünk. Az ilyen mûveletek végrehajtására a Pascal nyelv különbözõ kifejezéseket használ, melyek operandusok és operátorok sorozatából állnak. Operátornak azt a mûveleti jelet nevezzük, mely össze-kapcsolja a kifejezésben szereplõ változókat, konstansokat és függvényhívásokat, tehát az operandusokat:
operandus1 operátor operandus2
Numerikus operátorok
A numerikus adattípusokon aritmetikai és relációs mûveleteket
végezhetünk.
|
Aritmetikai mûveletek |
Relációs mûveletek |
Egész
számok |
+,
-, *, /, div, mod |
<, <=, =, >=, >, <> |
A kivonás jel (-) nem csak a kivonás mûveletét jelöli, hanem a negációt
is (pl. -12). Az egész számokkal történõ osztás
eredménye természetesen valós típusú lesz.
Az
egész számokkal végzett mûveletek sorában két speciális operátort is
találunk. Ezek a div (egészosztás) és mod (maradékképzés)
operátorok. Az egészosztás mûveletének elvégzése után az eredmény csak a
törtszám egész részét
fogja tartalmazni. A maradékképzés során az eredmény az osztás maradéka lesz.
Nézzünk erre is példát:
10/3
10 div 3
0 mod 3
Az egészosztás és maradékképzés mûveletére igaz a következõ azonosság:
a = b*(a div b)+(a mod b)
Láthatjuk, hogy nincs minden matematikai mûveletre megfelelõ operátor a Pascal nyelvben. Természetesen egy négyzetre emelést elvégezhetünk többszöri szorzással is, de ez a megoldás nem igazán elegáns. És akkor még nem szóltunk a gyök- vonás, az abszolút érték képzés vagy a szögfüggvények alkalmazásáról. A Pascal ezeknek a megoldására egy sor függvényt kínál:
Abs(x) Az x abszolút értékét adja vissza.
Sqr(x)
Az x négyzetét adja vissza.
Sqrt(x) Az x
négyzetgyökét adja vissza.
Sin(x)
Az x szinuszát adja vissza.
Cos(x)
Az x koszinuszát adja vissza.
A numerikus adattípusokkal végzett relációs mûveletek eredménye egy logikai érték lesz.
not
k A k szám ábrázolásában
minden bit az ellenkezõjére változik.
Pl. ha k=00000001, akkor not k=11111110.
k and j A mûvelet eredményében csak
azok a bitek lesznek 1-es értékûek, amelyek mindkét számban 1-esek
voltak.
Pl. ha k=01001110 és j=11100111, akkor k and j =01000110.
k or
j A mûvelet eredményében
ott lesznek 1-es bitek, ahol legalább az egyik számban 1-es bit volt.
Az elõzõ értékekkel: k or j =11101111.
k xor j A mûvelet eredményében
ott lesznek 1-es bitek, ahol k-ban és j-ben különbözõ bitek voltak.
Az elõzõ értékekkel: k xor j =10101001.
k shl
n A k szám bitjeit n értékkel balra
toljuk.
Pl. Ha k=00011001, akkor k shl 2 =01100100.
k shr n A k szám bitjeit n értékkel
jobbra toljuk.
Pl. Ha k=00011001, akkor k shr 2 =00000110.
A sorszámozott típusokra, így az egész számokra is értelmezettek az alábbi függvények:
Succ(i) A függvény eredménye az
i egész számot követõ egész szám.
Pl. Ha i=3, akkor Succ(i)=4.
Pred(i) A függvény eredménye az
i egész számot megelõzõ egész szám.
Pl. Ha i=3, akkor Pred(i)=2.
Odd(i) A függvény
eredménye egy logikai érték.
Ha i egész szám páratlan, akkor igaz, különben hamis.
Ord(i) A függvény
eredménye az i egész számhoz tartozó sorszám.
Pl. Ha i=1999, akkor Ord(i)=1999.
Chr(i) A
függvény eredménye az i egész számhoz tartozó karakter.
Pl. Ha i=97, akkor Chr(i)='a'.
Szöveges
operátorok
A szöveges adattípusokon végezhetõ mûveletek nagy részét
függvények írják le. Mindössze a string típuson értelmezett
összekapcsolás (+) operátor létezik önállóan. Az + operátorral kettõ
vagy több szöveges változót kapcsolhatunk össze.
Például:
program osszekot;
var s1,s2,szoveg: string;
begin
s1:='Repül';
s2:=' a nehéz kõ.';
szoveg:=s1+s2+' (Arany János)';
end.
A szoveg változó tartalma a következõ lesz:
'Repül a nehéz kõ. (Arany János)'
Az
összekapcsolt stringek együttes hossza nem lehet több 255 karakternél. A
szöveges változókat érintõ függvények
használatával ennél többet is elérhetünk.
Concat(s1,s2.)
Összekapcsolja s1,s2. stb. szöveges változókat.
Copy(s,i,n) Az s karakterlánc i-edik karakterétõl számítva n darab karaktert ad vissza.
Delete(s,i,n) Az s karakterlánc i-edik karakterétõl számítva n darab karaktert töröl.
Insert(s1,s2,i) Az s1 karakterláncot beszúrja s2-be, az s2 i-edik karakterétõl kezdve.
Length(s) Az s karakterlánc hosszát adja meg.
Pos(s1,s2) Az s1 karakterláncot keresi s2-ben, és annak kezdõ pozíciójával tér vissza.
Str(x,s) Az x egész típusú kifejezés értékét konvertálja az s stringbe.
Val(s,x,i)
Az s karakterláncot konvertálja az x numerikus típusba. Ha s-ben nem
konvertálható
karakter van, akkor az i értéke annak pozíciója lesz, különben i értéke nulla.
UpCase(ch)
A ch kisbetû karaktert nagybetûvé alakítja.
A sorszámozott típusokra, így a karakter típusra is értelmezettek az alábbi
függvények:
Succ(ch)
A függvény eredménye az ch karaktert követõ karakter.
Pl. Ha ch='b', akkor Succ(ch)='c'.
Pred(ch)
A függvény eredménye az ch karaktert megelõzõ karakter.
Pl. Ha ch='b', akkor Pred(ch)='a'.
Ord(ch)
A függvény eredménye a ch karakterhez tartozó sorszám.
Pl. Ha ch='a', akkor Ord(ch)=97.
Chr(i)
A függvény eredménye az i egész számhoz tartozó karakter.
Pl. Ha i=97, akkor Chr(i)='a'.
Logikai operátorok
A logikai operátorok (not, and, or, xor) logikai adattípusok (boolean) közötti
mûveletek elvégzésére alkalmasak, a
mûvelet eredménye is logikai érték lesz.
not A Logikai negálás: az A változó tartalma, ha igaz volt hamisra változik, ha hamis, akkor igazra.
A and B Logikai szorzás
(ÉS mûvelet): az eredmény akkor lesz igaz, ha mindkét változó tartalma
igaz.
Hamis az eredmény, ha bármelyik változó tartalma hamis.
A or B
Logikai összeadás (VAGY mûvelet): az eredmény akkor lesz igaz, ha
bármelyik változó tartalma igaz.
Hamis az eredmény, ha mindkét változó tartalma hamis.
A xor B Logikai kizáró
vagy: az eredmény akkor lesz igaz, ha a két változó tartalma különbözõ.
Hamis az eredmény, ha a két változó tartalma megegyezik.
A sorszámozott típusokra, így a logikai adattípusra is értelmezettek az alábbi függvények:
Succ(false) A függvény eredménye true logikai érték..
Pred(true) A függvény eredménye false logikai érték.
Ord(b) A függvény eredménye a b logikai értékhez tartozó egész szám.Alapvető
I/O műveletek
A Pascal programozásban meghatározott a szabványos input és output periféria. A
szabványos kimeneti egység a képernyõ, míg a bemeneti egység a
billentyûzet.
Írás a képernyõre:
Write(paraméterek);
Writeln(paraméterek);
Mindkét eljárás a kurzor aktuális pozíciójától kezdve ír a képernyõre. A két eljárás között annyi különbség van, hogy amíg a Write eljárás után a kurzor a kiírt paraméterek mögött marad, addig a Writeln eljárás után a következõ sor elsõ elejére ugrik. Az üres Writeln; eljárás minden kiírás nélkül a következõ sor elsõ elejére ugrik. A két eljárás végrehajtásának paraméterei lehetnek:
szöveg '' aposztrófok között,
változónevek,
konstansok,
aritmetikai kifejezések,
logikai kifejezések,
függvényhívások.
Writeln(34.75:8:3);
A tizedesjegyek számát (3) a teljes mezõszélességbõl (8) vonja le a Pascal, így a tizedespont elõtt maximum négyjegyû szám szerepelhet. Ha a szükségesnél kisebb mezõszélességet adunk meg, akkor hibajelzés nélkül egy tizedessel írja ki az értéket.
A billentyûzetrõl két eljárással olvashatunk be adatokat egy változóba:
Read(paraméterek);
Readln(paraméterek);
Mindkét eljárás a kurzor aktuális pozíciójától kezdve olvas a billentyûzetrõl. A Read és Readln eljárások felfüggesztik a program futását és az ENTER billentyû leütéséig olvassák az adatokat. A paraméterek csak változók lehetnek, kivéve a logikai változókat. A két eljárás közti különbség ugyanaz, mint a képernyõre író eljárásoknál. A numerikus adatokat egy szóköz vagy az ENTER választja el egymástól.
Amíg
nem ütünk ENTER-t az értékek
megadásánál, addig nem hajtódik végre a program következõ parancssora.
Persze
nem csak numerikus értékeket, hanem string vagy char típusú adatokat is
beolvashatunk mindkét eljárással. Azonban egyetlen karakter beolvasására
létezik egy külön függvény, mellyel egy char típusú változónak adhatunk értéket
úgy, hogy a beolvasás során nem jelenik meg a képernyõn a leütött
billentyûhöz tartozó karakter. A Readkey függvény a Crt unitban található.
Pozícionálás a
képernyõn
A Pascal
alapértelmezés szerint szöveges üzemmódban használja a képernyõt. A
kiíratás és beolvasás során az eljárások az aktuális kurzorpozíciótól kezdve
hajtódnak végre. Ha a kurzor nem a megfelelõ pozícióban áll a
képernyõn, akkor nekünk kell a kívánt helyre irányítanunk a Crt unit következõ
parancsával:
GotoXY(x,y);
A GotoXY parancs kiadása után a kurzor aktuális helyzete a képernyõ x-edik oszlopa és y-adik sora lesz. Tudni kell, hogy a képernyõ 80 oszlopból és 25 sorból áll:
A
képernyõ bal felsõ sarkának koordinátái (1,1), a jobb alsó sarok
koordinátái pedig (80,25). Ha a képernyõre írtak a
80. oszlop után folytatódnának, akkor a további karakterek a következõ
sorba kerülnek. Ha a képernyõ utolsó sorából is ki- lépünk, akkor a
képernyõ tartalma felfelé gördül és megjelenik egy üres sor a kép alján.
A képernyõre ablakot definiálhatunk a Crt unit egy utasításával:
Window(x1,y1,x2,y2);
Az elsõ két paraméter (x1,y1) az ablak bal felsõ sarkának abszolút koordinátái, a hátsó két paraméter (x2,y2) az ablak jobb alsó sarkának abszolút koordinátái. Innentõl az ablak területét használhatjuk csak mindaddig, amíg a maximális képméretet vissza nem állítjuk. Az ablak bal felsõ sarkának koordinátája (1,1) lesz.
TextColor(szín);
TextBackground(szín);
A Pascal a színek megadására konstansokat használ. A paraméter megadásánál a meg-nevezést, vagy a kódszámot is használhatjuk. A színekbõl a szöveg kiírására 0-15-ig, a háttér festésére viszont csak 0-7-ig használhatjuk a konstansokat.
Találat: 1637