3. Kifejezések és értékadás
- Kifejezések
- Értékadás
- Beépített numerikus műveletek
- Relációt kifejező operátorok
- Logikai műveletek
- Karakteres műveletek
c)
Beépített numerikus műveletek
A
következő
műveleti jelek értelmezhetők a numerikus kifejezésekre,
- ** hatványozás, egy
diadikus („két operandusú”)
műveleti jel, például 10**2 (jobbról
balra
értékelve)
- *
és / (szorzás
és osztás), diadikus műveleti jelek, például 10*7/4
- + és – (plusz és
mínusz vagy
összeadás és kivonás), páratlan („egy operandusú”) és diadikus műveleti
jelek, mint
például -4 vagy
7+8-3 ;
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 |
** |
|
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.f90program 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.)
Oldal tetejére | Vissza a főoldalra