Ismétlõdõ utasítások végrehajtására ún. ciklusokat alkalmazunk. Ha az Olvasó jártasabb a programozási nyelvek terén, talán hallhatott a for, while vagy until ciklusokról. A Fortran 77 azonban csak egyfajta ciklust használ, a neve a do ciklus. A do ciklus a többi programozási nyelvben elõforduló for ciklushoz hasonló fogalom, a többi ciklustípust az if és goto utasításokkal kell megoldanunk.
integer i, n, sum sum = 0 do 10 i = 1, n sum = sum + i write(*,*) 'i =', i write(*,*) 'sum =', sum 10 continueA 10-es szám az utasítás cimke. Jellemzõen egy programban több ciklus és/vagy utasítás is lehet. A programozón múlik milyen cimkéket használ programjában. Emlékeztetõ: az 1-5 poziciójú oszlopokba kell írni ezen cimkéket. Azon kivül, hogy egész számokat kell használnunk, nincs semmiféle megkötés, tehát a sorrend sem fontos. Elterjedt a 10-es szám ill. egész többszöreseinek használata (10, 20, 30 ...).
Alapértelmezettként a ciklusban a parancsok egymásután, egyesével hajtódnak végre, tehát egyes lépésközben. Ha ettõl eltérõ lépésközt szeretnénk, akkor a step (= lépés) kiegészítést is fel kell tüntetnünk, melynek értéke bármilyen 0-tól különbözõ szám lehet. Ez a program-szegmens (részlet), az 1 és 10 közötti páros számokat írja ki, csökkenõ számsorrendben:
integer i do 20 i = 10, 1, -2 write(*,*) 'i =', i 20 continueAz általános forma tehát az alábbi:
do cimke var = expr1, expr2, expr3 utasítások cimke continuevar a ciklus-változó (gyakran ciklus index a neve) melynek egésznek kell lennie. expr1 a var kezdõértékét, expr2 a var végértékét, és az expr3 a lépésközt (step) jelenti.
Megjegyzés: A do ciklus-változóját sose változtassuk meg utasítással a cikluson belül, mert ez komoly zavart okoz.
Sok Fortran 77 programfordító megengedi a ciklusok enddo paranccsal való lezárását. Ennek elõnye, hogy a ciklus cimkéjét elhagyhatjuk, mivel az enddo lezárja az õt megelõzõ ciklust. A standard Fortran 77-nek azonban ez nem része.
Meg kell jegyezni, hogy a Fortran a ciklus kezdetének, végének és lépésközének egyszeri feltûntetését támogatja, még az utasítások végrehajtása elõtt. Ennek következtében a következõ példában szereplõ ciklus le fog záródni és nem lesz egy végtelen ciklus (ami egy másik programnyelvben elõfordulhat).
integer i,j read (*,*) j do 20 i = 1, j j = j + 1 20 continue write (*,*) j
while (logikai kif) do utasítások enddovagy esetleg,
do while (logikai kif) utasítások enddoA program ellenõrzi a feltételt és végrehajtja a ciklusban szereplõ utasításokat, ameddig a while ciklusban az állítás igaz. Habár ezt a formulizmust sok fordító támogatja, a gyári, eredeti Fortran 77 nem. A helyes alak, az if és goto parancsokat felhasználva ez:
cimke if (logikai kif) then utasítások goto cimke endifAz alábbi példa kiszámolja és megjeleníti 2-nek minden 100-nál kisebb, vagy azzal egyenlõ hatványát.
integer n n = 1 10 if (n .le. 100) then write (*,*) n n = 2*n goto 10 endif
do utasítások until (logikai kif)Azonban (a fent leírtakat figyelembe véve) az eredeti Fortran 77-ben az alábbi alak a helyes, az if és goto használatával:
cimke continue utasítások if (logikai kif) goto cimke
Copyright © 1995-7 by Stanford University. All rights reserved.
Fordították: Seres András Tamás és Szalai Szilvia (ELTE-TTK)