Zurück Vor +Ebene Home Inhalt Index Hilfe

Unterprogramme

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.
 
Prozeduren:

Definition: subroutine Name( Variablenliste)
Aufruf: call Name( Variablenliste)

Name:
der FORTRAN-Konvention entsprechender Name der Prozedur
Variablenliste:
Liste von zu übergebenden bzw. übergebenen Variablen definierten Typs.


 
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

Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik