Fortran 90 oktatóanyag >> Kifejezések és értékadás

3. Kifejezések és értékadás

  1. Kifejezések
  2. Értékadás
  3. Beépített numerikus műveletek
  4. Relációt kifejező operátorok
  5. Logikai műveletek
  6. Karakteres műveletek

c) Beépített numerikus műveletek

A következő műveleti jelek értelmezhetők a numerikus kifejezésekre,
A fentieken túl az operátorokat betűvel kifejezett számok, konstansok, skaláris mennyiségek és sorba rendezett objektumokkal is használhatjuk, azzal az egyetlen korlátozással, hogy a hatványozás műveleti jelének jobb oldalán skaláris mennyiség kell hogy legyen (azaz a kivetőben csak skalár állhat, pl. tömb nem).
Például:
    a = b - c
    f = -3*6/5
Vegyük figyelembe, hogy bizonyos műveleti jeleknek elsőbbsége van, meghatározva a műveletek végrehajtásának sorrendjét. A következő táblázat megadja a műveleti jelek végrehajtási sorrendjét:
Operátor Fontosság Példa
felhasználó által definiált "monadikus" legfontosabb .INVERSE.A
** lefele csokken a prioritas
10**4
* vagy / 65*24
monadikus + vagy - -5
diadikus + vagy - 4+7
// string//string2
.GT., >, .LE., <=, stb. A > B
.NOT. .NOT.Bool
.AND. A.AND.B
.OR. A.OR.B
.EQV. vagy .NEQV. A.EQV.B
felhasználó által definiált diadikus legkevésbé fontos X.DOT.Y

Példaprogram: kiszámítja a potenciális hőmérsékletet: kifejezesek-pothom.f90
program pothom
 implicit none
 real :: teta, p, p0, R, cp, t

 R=8.314  ! J/molK
 cp=1004. ! J/kgK
 p0=1000. ! hPa
 p=500.   ! hPa
 t=263.   ! K

 teta=t*(p0/p)**(R/cp)

 write(*,*) teta, 'K (potencialis homerseklet)'

end program pothom
Fordítása és futtatása:
gfortran kifejezesek-pothom.f90 -o kifejezesek-pothom.exe
./kifejezesek-pothom.exe
Az eredmény:
   264.513916     K (potencialis homerseklet)

A zárójel nélküli kifejezésekben, a legmagasabb rendű műveleti jel, annak az első operandusával van párosítva. Az azonos elsőbbséget élvező kifejezések (pl. szorzás, osztás) esetében balról jobbra haladva kerülnek kiértékelésre, kivéve a hatványozást.
Lényeges, hogy az előre definiált utasítások prioritását nem lehet megváltoztatni, ami azt jelenti, hogy a felhasználó által definiált operátoroknak is rögzített prioritása van. A legmagasabb rendű operátor van tehát „legszorosabban rögzítve”; ez pedig a táblázatban a felhasználó által definiált monadikus operátor.
Az operátorok rendszere intuitív és hasonló más nyelvek rendszeréhez. A műveletek végrehajtási sorrendje megváltozhat a zárójelek használatával; a zárójelben levő kifejezések kerülnek először végrehajtásra. Egyenlő prioritású operátorok esetében a balról jobbra történő értékelés van érvényben, kivéve a hatványozást, ahol a kifejezés jobbról balra értékelődik ki. Ez akkor fontos, amikor a gépi számábrázolás határaihoz közel mozgunk. Gondoljunk például a A-B+C és a A+C-B összefüggésekre, ha az „A a legnagyobb ábrázolható szám, C pozitív és kisebb, mint a B; akkor az első kifejezés végrehajtódik, de a második művelet túlcsordulási hibát fog jelezni.
A leggyakoribb csapda az osztás műveletének alkalmazásakor fordul elő. A helyes gyakorlat a számlálót és a nevezőt zárójelben megadni. Például az
(A+B)/C
az nem ugyanaz, mint
A+B/C
viszont az
(A*B)/C
ugyanaz, mint az
A*B/C
 
Ez azért van, mert a szorzás operátor magasabb prioritású, mint a összeadás operátora. Viszont az
A/B*C 
nem ugyanaz (a program végrehajtási sorrendjét tekintve!), mint az
A/(B*C)
a balról jobbra történő kiértékelés miatt.
A szintaxis miatt két operátor nem lehet közvetlenül egymás mellett; az egyet szorozva mínusz eggyel így kell írni:
1*(-1)
és nem így:
1*-1.
(Ez a legtöbb programozási nyelvben így van.)


<< Előző | Következő >>

Oldal tetejére | Vissza a főoldalra