13. Az adatbeolvasás másik módja: a data és data block utasítások

A data utasítás

Az olyan változók, amelyek már a program megírásánál is ismertek, a data (=adat) utasítással is bevihetõk. Formalizmusban nagyon hasonló az elnevezéses utasításokhoz. A metódus a következõ:
      data változók listája/ értékek listája/, ...
ahol a három pont azt jelenti, hogy ezen beírás akárhányszor megismétlehetõ, például:
      data m/10/, n/20/, x/2.5/, y/2.5/
De össze is vonhatók:
      data m,n/10,20/, x,y/2*2.5/
A "hagyományos" elnevezéses utasítással a fenti m,n,x,y változókat így írtuk volna:
      m = 10
      n = 20
      x = 2.5
      y = 2.5
Ez a data utasítás tömörebb, mint a hagyományos, ezért széleskörben elterjedt a használata. Azonban fõleg az összevont esetnél, ügyelnünk kell arra, hogy ugyanazon értékeket nem elég egyszer leírni.

A data utasítást elég egyszer, közvetlenül a végrehajtó utasítások elõtt, a program elején alkalmaznunk. Ezért ezt a data utasítást általában a fõprogramban használják, és nem a subroutinokban.

Természetesen a data utasítással tömböket (vektorokat, mátrixokat) is definiálhatunk. A következõ programrészlet biztosítja, hogy a mátrix elemei mind zérusok, mikor a programfutattás megindul.

      real A(10,20)
      data A/ 200 * 0.0/
Néhány fordító automatikusan alkalmazza ezt a tömbökre, de nem mind, ezért ha ragaszkodunk, hogy az elemek mind nullák legyenek, akkor a fenti szintaktikát kell beírnunk. Természetesen zérustul különbözõ tömb elemeket is megnevezhetünk, akár így:
      data A(1,1)/ 12.5/, A(2,1)/ -33.3/, A(2,2)/ 1.0/
de akár így is, kilistázva egy kis tömbben:
      integer v(5)
      real B(2,2)
      data v/10,20,30,40,50/, B/1.0,-3.7,4.3,0.0/
Többdimenziós esetben oszlopok szerint rendezi és kezeli a tömb elemeit.

A block data utasítás

A data utasítást nem alkalmazhatjuk egy közös tömb/blokk elemeire. Erre egy speciális "subroutine" áll rendelkezésünkre: a block data utasítás. Igazából ez nem egy segédprogram, de hasonló fogalom, mert egy önálló programrészként jelenik meg. Nézzünk rá egy példát is:
      block data
      integer nmax
      parameter (nmax=20)
      real v(nmax), alfa, beta
      common /vector/v,alfa,beta
      data v/20*100.0/, alfa/3.14/, beta/2.71/
      end

A Fortran 77 fordító, a data utasításhoz hasonlóan, a block data-t is program elején hajtja végre, mielõtt még a fõprogram futtatása elindulna. A block data elhelyezése a forráskód szempontjából közömbös, persze csak addig amíg nem beágyazott utasításként szerepel vagy a fõprogramban vagy egy segédprogramban. Ezért célszerû mindig ezek eléjére írnunk.

 

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]