8. Ciklusok

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.

A do ciklusok

A do ciklust egyszerû számlálásra használjuk. A következõ egyszerû példa összeadja a számokat 1-tõl n-ig (az összeg (sum) és a n-et persze a ciklus elõtt deklarálni kell):
      integer i, n, sum
 
      sum = 0
      do 10 i = 1, n
         sum = sum + i
         write(*,*) 'i =', i
         write(*,*) 'sum =', sum
  10  continue
A 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  continue
Az általános forma tehát az alábbi:
      do cimke  var =  expr1, expr2, expr3
         utasítások
cimke continue
var 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 ciklusok

Kézenfekvõ, hogy a while ciklus formája az alábbi legyen::
      while (logikai kif) do
         utasítások
      enddo
vagy esetleg,
      do while (logikai kif) 
         utasítások
      enddo
A 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
      endif
Az 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

until ciklusok

Ha a feltételünket a ciklus végére akarjuk írni, akkor until ciklust használunk. Ekkor programunk addig hajtja végig az utasításokat, amig a záró feltétel igaz. Kézenfekvõ, hogy formája ilyen legyen:
      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)


[Tovább] [Tartalomjegyzék]