online kép - Fájl  tubefájl feltöltés file feltöltés - adja hozzá a fájlokat onlinefedezze fel a legújabb online dokumentumokKapcsolat
  
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

Online dokumentumok - kep
  

Mûveletek, kifejezések kiértékelése, precedencia szabaly. Az értékadó utasítas. Standard beviteli és kiviteli eljarasok.

számítógépes



felso sarok

egyéb tételek

jobb felso sarok
 
A videokonferencia mint prezentació
Digitalis rendszerek tervezése a VHDL nyelv segítségével
AZ IRÁNYÍTÓRENDSZEREK FEJLŐDÉSE
Adatbevitel, szűrés, rendezés adatlap nézetben - ACCESS
Szamrendszerek
A HP Usb disk storage format tool v2.1.8 hasznalata
A prezentació készítésének iranyelvei
TCP szerver készítése
A Pascal programok memóriatérképe:
 
bal also sarok   jobb also sarok

Mûveletek, kifejezések kiértékelése, precedencia szabály. Az értékadó utasítás. Standard beviteli és kiviteli eljárások.


Mûveletek, kifejezések, precedencia szabályok:

A programozási nyelvekben a mûveleteket (matematikai, logikai, stringmûvelet, stb.) kifejezésekként írjuk le. A kifejezések operandusokból és operátorokból épülnek fel. Az operandusok határozzák meg a mûveletben szerplõ értékeket, az operátor(ok) pedig azt, hogy milyen mûveletet kell végrehajtani az operandusokon. A kifejezések tartalmazhatnak függvényhívásokat is, amelyek általában operandusként viselkednek, de befolyásolják a mûveletek végrehajtási sorrendjét. A kifejezéseket két tulajdonsággal szokták jellemezni: érték és típus. Minden kifejezésnek van értéke, melyet a kifejezés kiértékelése (kiszámítása) után tudunk megállapítani. A kifejezés típusa határozza meg, hogy a kifejezés értéke milyen típusú adat lesz, ennek meghatározásához a kifejezés értékét nem szükséges meghatározni. A kifejezés típusát a kifejezésben szereplõ operátorok és operandusok együtt határozzák meg.
A kifejezés kiértékelése a kifejezésben szereplõ összes mûvelet elvégzését jelenti.
A Pascal operátorokat két csoportra lehet osztani:
- egyoperandusú operátorok
- kétoperandusú operá 212g63c torok

Az egyoperandusú mûveletek esetén mindig az operátor áll elõl, ezt követi az operandus. A kétoperandusú mûveletek esetén az operátor elõtt és után egyaránt áll egy-egy operandus. Az egyoperandusú operátorokat unary, a két operandusú operátorokat binary operátornak is nevezik.

A legegyszerûbb kifejezések egyetlen operátorból és egy vagy két operandusból épülnek fel (operátortól függõen). Ezen mûveletek kiértékelése során semmilyen probléma nem merül fel, a kifejezés kiértékelése balról jobbra haladva történik. Ezeket a kifejezéseket egyszerû kifejezésnek nevezzük. Az összetett kifejezések azonban több operátort és operandust is tartalmazhatnak, azaz a kifejezés kiértékelése során több mûveletet is végre kell hajtani. A kérdés, hogy a mûveleteket milyen sorrendben hajtsuk végre. A mûveletek végrehajtásának sorrendjét a precedencia szabály határozza meg.

A precedencia szabály tehát az összetett kifejezések kiértékelése során maghatározza a mûveletek elvégzésének sorrendjét.

A Pascal nyelv a kifejezések kiértékelése során a következõ sorrendet követi:
1. zárójelek
2. függvényhívások
3. egyoperandusú operátorok (- + /elõjelek/ @ not ^)
4. multiplikatív operátorok (* / div mod and shl. shr)
5. additív operátorok (+ - or xor)
6. relációk (< <= = < =)
7. balról jobbra haladás szabálya

A fenti szabályok tehát a Pascal nyelv precedencia szabályai.
A precedencia szabályokat csak akkor lehet alkalmazni, ha egy összetett kifejezésben szereplõ mûveletek különbözõ precedenciával rendelkeznek. A precedencia szabályokon kívül fontos még figyelembe venni, hogy a kfejezések kiértékelése - amennyiben azonos precedenciával rendelkezõ mûveletekbõl épül fel - balról jobbra haladva történik. Tehát a precedencia szabályokat három megjegyzéssel kell kiegészíteni:

A zárójelek használatával megváltoztathatjuk a mûveletek kiértékelésének sorrendjét. (Egyes vélemények szerint a zárójelek nem tartoznak a precedencia szabályok közé.)

Ha nem alkalmazunk zárójeleket, akkor elõször a precedencia szabály alapján próbálja meg programunk meghatározni a kifejezés végrehajtási sorrendjét.

Ha a kifejezésben azonos precedenciájú mûveletek szerepelnek, akkor a mûveletek a felírásuk sorrendjében, azaz balról jobbra haladva értékelõdnek ki.

Példákon keresztül:

Zárójelekkel megváltoztatott mûveleti sorrend:


Különbözõ precedenciájú mûveletek kiértékelése:

3+5*9=48 (mivel 5*9=45 és 45+3=48)

A balról jobbra haladás szabálya alapján:


A Pascal nyelv mûveleteit (operátorait) a következõképpen csoportosíthatjuk:

Aritmetikai mûveletek:
    +       pozitív elõjel    +a
    -        negatív elõjel   -a
    +       összeadás       a+b
    -        kivonás           a-b
    *        szorzás           a*b
    /         osztás     a/b
    mod   maradék         a mod b
    div     egészosztás     a div b

Logikai mûveletek:
    not    logikai tagadás        not a
    and    logikai és       a and b
    or      logikai vagy            a or b
    xor    logikai kizáró vagy  a xor b
 
Bitenkénti logikai mûveletek:
    not     tagadás bitenként          not a
    and    bitenkénti és          a and b
    or      bitenkénti vagy      a or b
    xor    bitenkénti kizáró vagy    a xor b
    shl     biteltolás balra       a shl b
    shr    biteltolás jobbra     a shr b

Összehasonlító (relációs) mûveletek:
    =    egyenlõ              a=b
    <    nem egyenlõ             a<b
    <    kisebb                a<b
        nagyobb             ab
    <=    kisebb vagy egyenlõ         a<=b
    =    nagyobb vagy egyenlõ      a=b

Halmazmûveletek:
    *        halmazok metszete
    +        halmazok uniója
    -        halmazok különbsége
    =        halmazok azonossága
    <      halmazok különbözõsége
    <=      részhalmaz (a bal oldali halmaz részhalmaza a jobb oldalinak)
    =      részhalmaz (a jobb oldali halmaz részhalmaza a bal oldalinak)
    in        tartalmazásvizsgálat
 

Az operátorok és operandusok együtt határozzák meg a kifejezés típusát. Az operandusok típusa többféle lehet, de van néhány olyan operátor, amely eleve kizárja (a mûvelet jellege miatt) hogy tetszõleges típusú operandusokat használjunk, ilyen pld. a mod és a div mûvelet, amely csak egész számok esetén van értelmezve.
Az aritmetikai mûveletek többségénél az operandus(ok) típusa határozza meg az eredmény típusát. Kivétel az osztás, ahol minden esetben valós típusú eredményt kapunk. Az egészosztás és a maradékképzés csak egész számok esetén értelmezett, az eredmény is mindig egész típusú lesz.
A logikai mûveletek eredménye minden esetben logikai típusú lesz, mivel az operátorok csak logikai típusúak lehetnek.
A bitenként végzett logikai mûveletek segítségével az egész típusú változók bitjeihez férhetünk hozzá közvetlenül, beállíthatjuk vagy törölhetjük azokat. A mûveletek bármely egész típus esetében végrehajthatóak.
Az összehasonlító mûveletek segítségével két kifejezés vagy változó értékét hasonlíthatjuk össze, az eredmény logikai típusú lesz.
A halmazmûveletek esetén az operátorok minden esetben kétoperandusúak, és egyetlen kivétellel mindig két halmaz áll az operátor két oldalán. Ez a kivétel a tartalmazásvizsgálat, amikor a bal oldalon egy a halmaz alaptípusával egyezõ típusú értéknek (változó vagy konstans) kell szerepelnie.
 

Az értékadó utasítás:

Ahhoz, hogy programunkban késõbb felhasználhassuk a kifejezés kiértékelése után kapott eredményt, a kifejezés értékét meg kell õriznünk egy változóban (típusos konstansban). A kifejezések értékét megõrizhetjük az értékadó utasítás segítségével.
A programban használt változók, típusos konstansok által tárolt értéket az értékadó utasítás segítségével változtathatjuk meg. Az értékadó utasítás minden programozási nyelv alapvetõ eleme. A Pascal nyelvben a második legegyszerûbb utasításként tartják számon - mivel a legegyszerûbb utasítás az üres utasítás.
Az értékadó utasítás egyik oldalán egy változó (típusos konstans) azonosítója, a másik oldalán egy kifejezés vagy változó áll. Az értékadó utasítás végrehajtása után a bal oldalon álló változó felveszi a jobb oldalon álló kifejezés vagy változó értékét. Az értékadó utasítás során gyakran használunk konstans kifejezést. Pld:
A:= 5;
A:= C*B;

Az értékadó utasítás során nagyon fontos, hogy az utasítás két oldalán álló változó és kifejezés típusa azonos, de legalább komaptíbilis legyen. Amennyiben a két oldal típusa eltérõ, a fordítás során hibaüzenetet kapunk. A típuskompatibilitás kicsit enyhébb megkötés a típusazonosságnál. A típuskompatibilitás esetei:

A típusok azonosak (pld: Integer - Integer)

Az egyik típus résztartománya a másiknak (pld: Integer - Byte)

Mindkét típus ugyanannak a típusnak a résztartománya (felhasználó által létrehozott típusok esetén)

Mindkét típus halmaz, kompatibilis alaptípussal

Mindkét típus karaktertömb, elemszámuk azonos (pld String[40] - String[40])

Az egyik típus String, a másik karakter (String - Char)


Standard beviteli és kiviteli eljárások:
 
A standard perifériák a felhasználóval való kapcsolattartás alapvetõ eszközei.
A Pascal nyelv szabványos eszközök által támogatja ezen perifériák kezelését, tehát egy-egy beépített eljárás segítségével tudunk a billentyûzetrõl beolvasni, illetve a képernyõre írni egy vagy több adatot a programunkból. Az alapértemezett perifériákat kezelõ eljárásokat a System unit tartalmazza, tehát minden különösebb elõkészület nélkül használhatjuk õket bármely Pascal programban.

Írás a képernyõre:

A képernyõre íráshoz két eljárást alkalmazhatunk:
Write(paraméterek);
Writeln(paraméterek);

A két eljárás nagyon hasonlóan mûködik, de egy lényeges különbséget megfigyelhetünk:
A Write eljárás miután a paraméterlistában felsorolt adatokat kiírta a képernyõre, a kurzort a kiírás utáni pozícióban hagyja.
A Writeln utasítás ezzel szemben a kiírás után a kurzort a következõ sor elejére állítja, azaz soremelést végez.
Mindkét eljárás a kurzor aktuális pozíciójában írja ki a paraméterként megadott adatokat.

Az eljárások paraméterei sokfélék lehetnek. Mivel standard eljárásokról van szó, úgy alakították ki õket, hogy lehetõség szerint a legtöbb eredményt, kimeneti információt kezelni tudják, tehát ezek az eljárások nemcsak szövegek, hanem számok, változók, kifejezések eredményének kiíratására is alkalmasak (szemben a grafikus felület hasonló nem standard eljárásaival, amelyek csak szövegek megjelenítésére alkalmasak).
A Write és Writeln eljárások paraméterlistájában több paramétert is felsorolhatunk, egymástól vesszõvel elválasztva, a paraméterek típusa különbözõ lehet. A paraméterlistában szerepelhet:
- Aposztrófok között megadott szöveg (szövegkonstans)
- Változók, konstansok azonosítója
- Aritmetikai kifejezések
- Logikai kifejezések
- Függvényhívások

A szövegek kiírása során nincs semmilyen probléma, értelemszerûen a megadott szöveg kiírásra kerül, legyen szó akár szöveges konstansról, akár String vagy Char típusú változóról.
Numerikus értékek esetén az egészek megjelenítése nem okoz problémát. A lebegõpontos (bocs, valós) értékek esetén az alapértelmezés szerinti formátum a lebegõpontos forma (azaz a normál alak). Ez a felhasználó számára elég nehezen emészthetõ, ezért a Pascal lehetõséget biztosít a lebegõpontos számok formázott (tizedes alakban történõ) megjelenítésére. Ebben az esetben a megfelelõ változó, konstans, kifejezés azonosítója után kettõsponttal elválasztva meg kell adni az összes számjegy számát (mezõszélesség, tizedes és egészrész együtt), majd újabb kettõspont után a tizedesjegyek számát. A mezõszélességen belül a numerikus értékek jobbra vannak igazítása.
A logikai kifejezések megjelenítése során a Pascal a logikai kifejezés értékétõl függõen a TRUE vagy FALSE szöveget jeleníti meg a képernyõn.

Egy érdekesség, hogy a mezõszélességet szöveges adatok esetén is alakmazhatjuk. A szöveges adatok a mezõszélességen belül jobbra vannak igazítva.
Egy példa a fentebb leírtakra: Olvassunk be egy szöget fokban, majd írjuk ki táblázatos formában a szög szinuszát, koszniuszát, tangensét és kotangensét.

Var Alfa, Rad: Real;
Begin
   
    Write('Kerek egy szoget: ');
    Readln(Alfa);
 
   
   
    Rad:= Alfa/180*2*Pi;

   
   
    Writeln;
    Writeln;
    Writeln(Alfa:5:2, 'sinusa:':15, sin(Rad):8:2);
    Writeln(Alfa:5:2, 'koszinusza:':15, cos(Rad):8:2);
    Writeln(Alfa:5:2, 'tangense:':15, sin(Rad)/cos(Rad):8:2);
    Writeln(Alfa:5:2, 'kotangense:':15, cos(Rad)/sin(Rad):8:2);
 
    Writeln;
End.

A Write és Writeln eljárások összetett típusú változók, konstansok esetén nem alkalmazhatók!
 

Olvasás a billentyûzetrõl:

A Turbo Pascal-ban a szabványos bemeneti periféria a billentyûzet, innen lehet a változók értékét beolvasni.
A billentyûzetrõl való olvasáshoz szintén két eljárást alkalmazhatunk:
Read(paraméterek);
Readln(paraméterek);

Mindkét eljárás felfüggeszti a program futását, és megvárja, amíg a felhasználó begépeli a kívánt értéket. A Read és Readln eljárások csak numerikus és karakteres adatok beolvasására alkalmasak, az összetett és logikai változók értékét nem lehet billentyûzetrõl beolvasni.
A két eljárás mûködése között ebben az esetben is megfigyelhetõ a különbség. A Pascal programok a változók beolvasását két lépésben végzik el. Elsõ lépésben a billentyûzeten begépelt adatok egy pufferbe kerülnek, majd az adatbevitel végén (amikor a felhasználó leüti az Enter billentyût) a puffer tartalma másolódik át a megadott változókba. A Pascal semmilyen ellenõrzést nem végez arra vonatkozóan, hogy a pufferbe milyen és mennyi adat kerül. (A puffer maximum 127 byte adatot képes tárolni, stringek esetén fontos lehet!)
A Read eljárás a pufferbõl kiolvassa a számára szükséges adatokat, és ezeket törli is a pufferbõl. Ha a felhasználó a szükségesnél több adatot adott meg, a fel nem használt adatok a pufferben maradnak, és a következõ Read utasításnál kerülnek felhasználásra. Amikor tehát a Read eljárást alkalmazzuk, akkor az elõször ellenõrzi a puffer tartalmát, és csak akkor vár a billentyûzeten történõ begépelésre, ha a puffer üres. (Számtalan hiba forrása lehet!)
A Readln eljárás is a pufferbõl olvassa ki a szükséges adatokat, és ezeket törli is. Ha azonban a pufferben felesleges adat is található, az eljárás a saját adatainak kiolvasása után ezeket is kitörli, azaz kiüríti a puffert az olvasás után.

Nagyon fontos, hogy sem a Read, sem a Readln eljárás nem végez semmilyen ellenõrzést a pufferben lévõ adatokon, azokat kritikátlanul elfogadja. Ha a felhasználó hibásan adta meg a szükséges adatokat a program mûködésének zavarát okozhatja (szám helyett szöveg megadása), tehát a program írása során nagyon figyelni kell a beolvasott adatok helyességének ellenõrzésére.
 



Találat: 7706


Felhasználási feltételek