program fo deklarációk real alpha, beta common /coeff/ alfa, beta utasítások stop end subroutine sub1 (néhány argumentum) az argumentumok deklarációi real alfa, beta common /coeff/ alfa, beta utasítások return end subroutine sub2 (néhány argumentum) az argumentumok deklarációi real alfa, beta common /coeff/ alfa, beta utasítások return endItt defináltunk egy coeff nevû közös tömböt, mely két elembõl áll: alfa és beta változókból. Természetesen tetszõleges számú elemet is tehetünk egy ilyen közös tömbbe. Sõt, még az elemek típusainak se kell egyformának lenniük, mivel minden subroutin, amely ezt a tömböt alkalmazza, az egész tömböt deklarálja.
Megjegyzés: Ebben a példákban is könnyen elkerülhettük volna a közös tömb használatát, ha alfa-t és beta-t eleve paraméterként(argumentumként) kezeljük. Amikor csak lehet, kerüljük a közös tömbök használatát. Természetesen azonban vannak olyan problémák is, mikor csak a közös tömbök használata jelenti a megoldást.
common / név / a változók listájaFontos tudnivalók:
subroutine sub3 (néhány argumentum) az argumentumok deklarációi real a, b common /coeff/ a, b utasítások return endEz a deklaráció ekvivalens a korábban látott, alfa-ra és beta-ra vonatkozó deklarációval. Célszerû ugyanazon neveket használni ugyanazon elemekre, mert könnyen összezavarodhatunk. Nézzük erre egy elrettentõ példát:
subroutine sub4 (néhány argumentum) az argumentumok deklarációi real alfa, beta common /coeff/ beta, alfa utasítások return endItt most az alfa egyben beta is. Ha ilyesmit látunk, akkor nagy valószinûséggel hibát fedeztünk fel. De az ilyen típusú hibákat igen nehéz megtalálni.
program main integer nmax parameter (nmax=20) integer n real A(nmax, nmax) common /matrix/ A, nEbben a közös tömbben az A mátrix elemei vannak, illetve egy egész szám, az n. Szeretnénk ezt az A mátrixot néhány subroutinban alkalmazni. Ekkor az alábbi deklarációt kell megejteni minden egyes segédprogramban:
subroutine sub1 (...) integer nmax parameter (nmax=20) integer n real A(nmax, nmax) common /matrix/ A, nKülönbözõ dimenziójú vektorok nem lehetnek egy közös tömbben, ezért az nmax értékének pontosan meg kell egyeznie a fõprogrambeli értékével. Emlékezzünk vissza: a mátrix méretét pontosan kell ismernie a fordítóprogramnak, ezért nmaxot definiálnunk kell egy paraméter utasítással.
Ez a kis példa is rámutatott arra, hogy a nem érdemes vektorokat közös tömbben kezelnünk. Sokkal célszerûbb a vektorokat argumentumként alkalmazni a subroutinokban (persze a fõdimenzió figyelembevételével).
Copyright © 1995-7 by Stanford University. All rights reserved.
Fordították: Seres András Tamás és Szalai Szilvia (ELTE-TTK)