![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
FORTRAN unterscheidet die Unterprogramm-Typen subroutine ,
function und blockdata .
Im Gegensatz zu C unterscheidet FORTRAN zwischen Funktionen, die einen
Wert zurückliefern ( function ), und sogenannten Prozeduren, die keinen Wert
zurückgeben ( subroutine ).
Alle Unterprogramme werden immer mit der end -Anweisung
abgeschlossen.
Der Rücksprung aus einer Prozedur oder einer Funktion in das aufrufende
Programm wird durch den return -Befehl bewirkt.
return kann überall innerhalb des Unterprogramms stehen.
blockdata Unterprogramme dürfen kein return -Kommando
enthalten.
Definition: subroutine Name( Variablenliste)
Aufruf: call Name( Variablenliste)
Die Typen der übergebenen Variablen müssen innerhalb der Prozedur
festgelegt werden. Inkonsistenzen in Typ und Anzahl der Parameter werden
gemäß ANSI-Standard vom Compiler nicht erkannt und können zu verheerenden
Fehlern führen.
Die meisten Compiler erlauben das Übersetzen mit der Option, solche
Inkonsistenzen zu reklamieren.

subroutine Demo(var1,var2)
integer var1
double precision var2
write(6,*) ``irgendwas``
return
end
Funktionen:
Definition:
Typbezeichnung function Name( Variablenliste)
oder
function Name( Variablenliste)
Typbezeichnung Name
Der Name wird innerhalb der Funktion wie eine Variable behandelt,
der ein Wert zugewiesen werden kann. Dieser Wert dient als Rückgabewert
der Funktion.
Funktions- oder Prozedurnamen können als Parameter einer anderen
Funktion übergeben werden. Innerhalb des aufrufenden Programms muß dieser
Name als external für selbstdefinierte oder als intrinsic
für intrinsische Funktionen deklariert werden.

program demo
intrinsic sin,cos
write (6,*) ableit(sin,0.0),ableit(cos,0.0)
end
function ableit(funk,x)
real x,ableit,h
h = 1.0e-6
ableit = (funk(x+h)-funk(x))/h
return
end
entry -Anweisung, definiert weitere Einsprung-Adressen
innerhalb von Unterprogrammen. Die Parameter des Unterprogramms müssen
mit denen des entry -Befehls identisch sein.
Der Aufruf eines entry erfolgt
analog zum Aufruf des Unterprogrammes selbst.

subroutine demo(var)
real var
![]()
entry einsprung(var)
![]()
end
call demo(1.0)
call einsprung(2.5)
save -Anweisung, bewirkt die Speicherung aller lokalen
Variableninhalte in einem Unterprogramm. Beim nächsten Aufruf
des Unterprogrammes besitzen alle Variablen denselben Wert wie beim
Verlassen der Routine nach dem vorangehenden Aufruf.
Auch ohne save bleiben aufgrund der statischen
Speicherverwaltung
die Variableninhalte erhalten außer, es müssen während
der Programmausführung Teile des Programms aus Speicherplatzgründen
ausgelagert werden. save stellt die Erhaltung der Variableninhalte
sicher.
Die Verwendung von save ist schlechter Programmierstil
und einer Hochsprache unangemessen. Grundsätzlich sollten alle
lokalen Variablen bei jedem Aufruf des Unterprogramms neu definiert werden
(darum werden sie lokal genannt).
blockdata -Unterprogramme, Initialisierung von common -Blöcken.
Wird zu Beginn der Programmausführung genau einmal automatisch
aufgerufen.
Ein expliziter Aufruf des blockdata -Unterprogramms ist nicht
möglich.
In blockdata -Unterprogrammen dürfen keine ausführbaren
Anweisungen stehen. Lediglich data -Anweisungen und Variablen- und
common -Block-Deklarationen sind erlaubt.

real x(10),y(5),z
common /daten/x,y,z
integer i
write(6,*) (x(i),i=1,10),(y(i),i=1,5),z
end
blockdata init
real x(10),y(5),z
common /daten/x,y,z
data x/1,2,3,4,5,6,7,8,9,10/
data y/1,2,3,4,5/, z/42/
end
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |