aktuelle Version

Verwaltung von verketteten Fortran-Strukturen (Cray-compatibel)

Mit diesen Routinen kann man einfach oder zweifach verkettete Ring-Strukturen (1- bzw. 2-Strukturen) aufbauen und wieder abbauen. Bei 1-Strukturen muß der Zeiger (integer*4) auf die nächste 1-Struktur das erste Strukturelement sein; bei 2-Strukturen müssen der Zeiger auf die vorangegangene 2-Struktur das erste, der Zeiger auf die nächste 2-Struktur das zweite Strukturelement sein:

1-Struktur:
structure /a/
integer*4 next
(weitere Felddefinitionen)
endstructure
record /a/ a
pointer (a_,a)
2-Struktur:
structure /a/
integer*4 back,next
(weitere Felddefinitionen)
endstructure
record /a/ a
pointer (a_,a)
Bei
i=inew2a_(ianf,l)
ist ianf der Zeiger auf die aktuelle 2-Struktur; es wird eine neue 2-Struktur der Länge l erzeugt und angekettet. Der Funktionswert ist der Zeiger auf die neue 2-Struktur. Der Fall ianf=0 bedeutet das Erzeugen einer ersten 2-Struktur. Bei
i=inew2b_(ianf,l)
wird analog zu inew2a_ verfahren, jedoch wird die erzeugte 2-Struktur vorgekettet. Bei
i=inew1a_(ianf,l)
ist ianf der Zeiger auf die aktuelle 1-Struktur; es wird ein neue 1-Struktur der Länge l erzeugt und angekettet. Der Funktionswert ist der Zeiger auf die neue 1-Struktur. Der Fall ianf=0 bedeutet das Erzeugen einer ersten 1-Struktur. Bei
i=inew1b_(ianf,l)
wird analog zu inew1a_ verfahren; die erzeugte 1-Struktur wird lediglich vorgekettet. Bei
i=ifree1a_(ianf)
wird die 1-Struktur, auf die ianf zeigt, freigegeben; der Funktionswert ist der Zeiger auf die nächste 1-Struktur bzw. gleich 0, falls keine existiert. Bei
i=ifree1b_(ianf)
wird die 1-Struktur, auf die ianf zeigt, freigegeben; der Funktionswert ist der Zeiger auf die vorangegangene 1-Struktur bzw. gleich 0, falls keine existiert. Bei
i=ifree2a_(ianf)
wird die 2-Struktur, auf die ianf zeigt, freigegeben; der Funktionswert ist der Zeiger auf die nächste 2-Struktur bzw. gleich 0, falls keine existiert. Bei
i=ifree2b_(ianf)
wird die 2-Struktur, auf die ianf zeigt, freigegeben; der Funktionswert ist der Zeiger auf die vorangegangene 2-Struktur bzw. gleich 0, falls keine existiert. Ein Beispiel.
Die folgende Aufgabe sei gestellt: Die Struktur B enthalte eine ganze, eine reelle (doppelt genaue) Zahl und sei vorwärts zu verketten (n Strukturen). Die ganzen und reellen Zahlen sind fortlaufend - mit 1 beginnend - zu belegen, danach in gleicher Folge zu drucken; die verketteten Strukturen sind wieder freizugeben. Das folgende Programm löst diese Aufgabe.
program main
parameter (n=3)
structure /a/
integer*4 next,i
real*8 x
endstructure
record /a/ c
pointer (c_,c)
c_=0
do k=1,n
c_=inew1a_(c_,16)
c.i=k
c.x=k
enddo
c_=c.next
do while (c_.ne.0)
print *, c.i,c.x
c_=ifree1a_(c_)
enddo
end
Versions-Datum: Di., 21. Nov. 2000, 15:00:07