FORTRAN

Transcription

FORTRAN
Ausarbeitung
FORTRAN
im Rahmen des Seminars „Programmiersprachen“
Swetlana Konovalov
Themensteller: Prof. Dr. Herbert Kuchen
Betreuer: Susanne Gruttmann
Institut für Wirtschaftsinformatik
Praktische Informatik in der Wirtschaft
Inhaltsverzeichnis
1
Einleitung ................................................................................................................... 3
2
Historische Entwicklung der Sprache Fortran ........................................................... 4
3
Charakteristika der Sprache ....................................................................................... 6
4
3.1
Alphabet und die Grundlage des Syntax ............................................................ 6
3.2
FORTRAN - Programmformular ....................................................................... 7
3.3
Programmstruktur .............................................................................................. 8
FORTRAN - Sprachelemente .................................................................................. 12
4.1
Konstanten, Variablen und Felder.................................................................... 12
4.2
Standardtypen ................................................................................................... 15
4.3
Elementare Anweisungen................................................................................. 17
4.3.1
4.3.2
4.3.3
4.3.4
4.4
IF- Anweisung .......................................................................................... 17
Ein- /Ausgabeanweisungen....................................................................... 18
FORMAT- Anweisung ............................................................................. 19
DO -Schleif ............................................................................................... 21
Unterprogramme .............................................................................................. 22
5
SEND - MORE – MONEY ..................................................................................... 24
6
Zusammenfassung ................................................................................................... 27
A
SEND – MORE – MONEY - Code ......................................................................... 28
Literaturverzeichnis ........................................................................................................ 29
Kapitel 1: Einleitung
1 Einleitung
In dieser Arbeit wird die erste hohe Programmiersprache FORTRAN vorgestellt. Die
imperative Programmiersprache wurde in den 50er Jahren für naturwissenschaftliche
und ingenieurmäßige Anwendungen entwickelt.
Die historische Entwicklung der Sprache, ab den 50er Jahren bis heute, wird in Kapitel
2 beschrieben.
Die Charakteristik der Sprache wird in Kapitel 3 wiedergegeben. Dabei wird die Syntax
FORTRAN beschrieben. Es wird drauf eingegangen wie ein FORTRAN Programm
strukturiert werden kann.
Die Sprachelemente von FORTRAN, welche für die Gestaltung eines Programms
wichtig
sind,
werden
im
Kapitel
4
beschrieben.
Nach
Erklärung
der
Datenobjektdefinition und des Typsystems, wird die Benutzung der grundlegenden
Programmstrukturen FORTRANs dargestellt. Desweiteren wird auf den Aufbau von
Unterprogrammen eingegangen.
In Kapitel 5 wird die Benutzung der vorgestellten Sprachelemente an einem
Praxisbeispiel demonstriert. Es wird gezeigt, wie das berühmte SEND-MORE-MONEY
Rätsel mit FORTRAN gelöst werden kann. Der zugehörige Programmcode ist in
Anhang A zu finden.
Die Ausarbeitung schließt mit einer Zusammenfassung in Kapitel 6.
3
Kapitel 2: Historische Entwicklung der Sprache Fortran
2 Historische Entwicklung der Sprache Fortran
Der Name FORTRAN wurde von FORmula TRANslation abgeleitet und wie der Name
schon verrät, sollte die Sprache der Übersetzung von Formeln bei nummerischen
Anwendungen
dienen.
Daher
kommt
diese
Sprache
oft
in
natur-
oder
ingenieurwissenschaftlichen Bereichen zum Einsatz. [Sc90, S.1ff]
Im Jahr 1953 begann bei der International Business Machines Corporation (IBM) unter
der Leitung von John W. Backus die Entwicklung der Sprache FORTRAN. Bis dahin
erfolgte
die
Programmierung
ausschließlich
in
Assemblersprachen.
Um
naturwissenschaftliche Problemstellungen lösen zu können, galt es nun, diese Sprachen
um Algebra-Ausdrücke zu erweitern. Bereits nach einem Jahr konnte der erste Entwurf
der Sprache FORTRAN vorgestellt werden.
Die Herausgabe der Sprachbeschreibung folgte im Jahr 1956. Ein Jahr später war der
erste
FORTRAN-Compiler
FORTRAN
I,
welcher
auf
Grundlage
dieser
Sprachbeschreibung entwickelt wurde, einsatzbereit. Dieser Compiler bestand aus
25.000 Zeilen Code und wurde mit jedem IBM-704-System ausgeliefert.
Das wirklich neue an Programmiersprache FORTRAN war nun, dass durch sie zum
ersten
Mal
die
Möglichkeit
bestand
Programme
ohne
die
aufwändige
Maschinenprogrammierung zu beschreiben. Dies war für Entwickler deutlich einfacher
und
außerdem
war
die
Sprache
leichter
zu
erlernen,
da
sie
geringere
Programmierfähigkeiten benötigte.
Eine überarbeitete und erweiterte Version FORTRAN II wurde von IBM im Jahr 1958
herausgebracht, die u.a. auch die Unterprogrammtechnik zuließ. Noch im selben Jahr
wurde auch FORTRAN III entwickelt, das Assemblercode im FORTRAN-Code
erlaubte, aber diese Version wurde nie als Produkt veröffentlicht.
FORTRAN IV, das 1962 erschien, führte logische Vergleiche und boolesche Ausdrücke
ein, während maschinenabhängige Teile wie Anweisungen zum Lesen von
Eingabebändern aus FORTRAN II herausgenommen wurden.
Nach ihrer rasanten Ausbreitung entstanden diverse Dialekte der Sprache FORTRAN.
Um den Programmeaustausch zu erleichtern, veröffentlichte im Jahr 1966 das American
National Standard Institute (ANSI) den ersten Standard für eine Programmiersprache 4
Kapitel 2: Historische Entwicklung der Sprache Fortran
FORTRAN 66, das auf FOTRAN IV basierte. Im Laufe der Zeit entsprach aber
FORTRAN 66 nicht mehr den Ansprüchen vieler Benutzer. Es entstanden wieder viele
Dialekte der Sprache, die alle auf FORTRAN 66 basierten aber mit einander nicht
kompatibel waren.
Als Folge davon wurde die Einführung eines neuen Standards
notwendig.
1978 wurde der Standard FORTRAN 66 durch FORTRAN 77 abgelöst. Diese neue
FOTRAN Version, war ein wichtiger Schritt in der Entwicklung der Sprache, wobei
aber keine grundlegenden Änderungen an der Sprache vorgenommen wurden. In der
Normung ANSI X3.9-1978 wurde die Spracherweiterung, die von den Computerfirmen
bzw. Compilerautoren
vorgenommen worden, aufgenommen. Diese sollten das
Programmieren vereinfachen. Der Standard blieb jahrelang unverändert.
Erst im Jahr 1992 wurde ein neuer Standard „FORTRAN 90“ verabschiedet, der fast
vollständig FORTRAN 77 enthält. Im Gegensatz zu FORTRAN 77 sind im Standard
FORTRAN 90 nicht nur die in verschiedenen Realisierungen entstandenen
Erweiterungen aufgenommen worden, sondern es sind auch ganz neue Elemente
aufgetaucht. Im neuen Standard sind Konzepte eingeführt worden, die die Entwicklung
der Programme erleichtern und die Benutzung neuer Technologien der Programmierung
möglich machen. Dabei wurde die Abwärtskompatibilität beibehalten. FORTRAN 90 war
auch der erste Standard, der die parallele Programmierung unterstützt hat.
Im Jahr 1997 entstand ein neuer internationaler Sprachstandard – FORTRAN 95. Im
Vergleich zu FORTRAN 90, sind in FORTRAN 95 verhältnismäßig wenige
Neuerungen dazugekommen. Die Meisten dienten der Optimierung der Parallelität und
sind auf die Nutzung von High Performance FORTRAN (HPF) ausgerichtet.
Der nächste wichtige Schritt in der Entwicklung der Sprache war die Umsetzung des
Standards FORTRAN 2003. Die wesentlichen Neuerungen sind die Unterstützung der
objektorientierten Programmierung und die Interoperabilität mit der Sprache C.
Außerdem wurde die Verarbeitung von Fleißkommazahlen und die Ein-/Ausgabe
verbessert.
Es wurde bis jetzt nicht aufgehört die Sprache zu verbessern. Fortran 2008 ist weiterhin
in Entwicklung und soll bis 2010 fertig sein.
Diese Arbeit konzentriert sich auf Version FORTRAN 77.
5
Kapitel 3: Charakteristika der Sprache
3 Charakteristika der Sprache
3.1 Alphabet und die Grundlage des Syntax
Die
Syntax
bezeichnet
die
nach
bestimmten
Regeln
festgelegten
Verknüpfungsmöglichkeiten von Zeichen und Befehlen aus dem Zeichen- und
Befehlsvorrat einer Programmiersprache. Sie regelt, welche Symbolfolgen des
zugrundegelegten Vokabulars (Alphabets) zulässige „Sätze“ der Sprache bilden und legt
gleichzeitig zu jeder solchen Symbolfolge eine grammatikalische Struktur fest.
Ein Buchstabe oder eine Zahl ist ein alphanumerisches Symbol und wie auch in anderen
Sprachen sind in FORTRAN 77 nicht alle Symbole oder Symbolfolgen erlaubt.
Für die Darstellung einer Anweisung werden folgende Grundsymbole [Sc90, S.17]
benutzt:
1. 26 Buchstaben: A, B … Z (a, b … z)
2. 10 Ziffern: 0, 1 … 9
3. 13 Sonderzeichen: = + - * / ( ) , . $ ‘ : und das Leerzeichen
Dabei sind im FORTRAN 77 Standard nur die Großbuchstaben als gültige
Grundsymbole aufgeführt. Es hat sich aber im Laufe der Zeit durchgesetzt, auch
Kleinbuchstaben zu benutzen, wobei vor der Kompilierung einer Quellcodedatei, alle
Kleinbuchstaben in Großbuchstaben umgewandelt werden. Seit dem darauf folgenden
Standard FORTRAN 90, sind auch Kleinbuchstaben erlaubt, wobei Klein- und
Großbuchstaben dieselbe Bedeutung haben.
In Abhängigkeit davon für welche Anweisungen sie benutzt werden, können die
Symbole für verschiedene Zwecke eingesetzt werden.
Aus den Grundsymbolen der Sprache lassen sich Wortsymbole bilden, die bspw.
Variablennamen oder Funktionen bezeichnen können.
Ein Wortsymbol kann aus Buchstaben und Ziffern bestehen, aber mit der
Einschränkung, dass das erste Zeichen ein Buchstabe sein muss. Die Länge eines
Wortsymbols ist in FORTRAN 77 auf sechs Zeichen begrenzt. Auch die von
FORTRAN 77 reservierten Wortsymbole (wie z. B. die Funktionen SIN oder COS)
dürfen überschrieben werden. In diesem Fall verlieren sie aber die ursprüngliche
6
Kapitel 3: Charakteristika der Sprache
Bedeutung. Um Missverständnisse zu vermeiden, soll diese Möglichkeit aber nur in
zwingenden Ausnahmefällen genutzt werden.[Sc90, S.18]
3.2 FORTRAN - Programmformular
Bis in die 70er Jahre des 20. Jahrhunderts war die Lochkarte das beherrschende
Speichermedium der elektronischen Datenverarbeitung. (Merten, 1988 S. 10) Sowohl
FORTRAN 77 als auch die älteren Versionen von FORTRAN sind an der
Spaltenaufteilung einer Lochkarte orientiert. Zwar erfolgt jetzt die Eingabe unmittelbar
über eine Tastatur, die jeweiligen Eingabezeilen entsprechen dabei in ihrem Aufbau
aber den früher benutzen Lochkarten. Da Programme zu der Zeit einerseits noch recht
überschaubar waren und man sich das Schreiben von Programmen erleichtern wollte,
wurden früher sogenannte FORTRAN- Kodierformular benutzt. [FT73, S.21f]
Abbildung 1: FORTRAN- Kodierformular [FT73, S.22]
Eine Eingabezeile setzt sich aus 80 Positionen bzw. Spalten zusammen und entspricht
im Aufbau der einer Lochkarte. Die ersten 72 Spalten stehen für die Kodierung zur
Verfügung. In den letzten 8 Spalten können Zeichen kodiert werden, die nicht zum
Programm gehören. Beispielsweise kann das Durchnummerieren der Zeilen in diesem
Spalten erfolgen.
Steht in der ersten Spalte einer Zeile ein „C“ oder ein „*“,
wird diese Zeile als
Kommentar interpretiert. Das gleiche gilt für eine leere Zeile. Ansonsten kann in den
Spalten 1-5 einer Programmzeile bei Bedarf eine Anweisungsnummer eingetragen
werden.
Mit
Hilfe der Anweisungsnummer
können
Anweisungen
eindeutig
7
Kapitel 3: Charakteristika der Sprache
gekennzeichnet werden. Als Symbole für die Anweisungsnummer sind ausschließlich
Ziffern zugelassen. Die 6. Spalte beherbergt das Feld für die Folgezeilenkennzeichnung.
Eine Anweisungszeile kann in der nächsten Zeile fortgesetzt werden. Dazu muss in der
Spalte 6 der nächsten Zeile, ein beliebiges Zeichen mit Ausnahme eines Leerzeichens
oder einer „0“ stehen. In FORTRAN 77 sind 19 Fortsetzungszeilen für eine Anweisung
erlaubt. Der wichtigste Bereich einer Zeile liegt zwischen den Spalten 7 und 72. In
diesen Spalten kann die FORTRAN Anweisung stehen. Die Anweisung darf nicht über
Spalte 72 hinausgehen, da alle Zeichen danach abgeschnitten und als Kommentar
gewertet werden. Somit bieten die Spalten 73-80 eine weitere Möglichkeit das
Programm zu kommentieren. Diese Spalten können aber auch frei bleiben oder z.B. zur
Nummerierung der Programmzeilen genutzt werden. [FT73, S.21ff]
Die Arten von Zeilen, die FORTRAN unterscheidet, lassen sich in der folgenden
Tabelle entnehmen. [Sc90, S.20]
Anweisungszeile
Spalte 1 - 5
Spalte 6
Spalte 7 - 72
Leerzeichen oder
Leerzeichen oder eine Null
Anweisung
Leerzeichen oder eine Null
Vereinbarung
Anweisungsnummer
Leerzeichen oder
Vereinbarungszeile
Anweisungsnummer
Formatzeile
Anweisungsnummer
Leerzeichen
Formatanweisung
Fortsetzungszeile
Leerzeichen
Beliebige Zeichen außer
Fortsetzung der
Leerzeichen oder eine Null
Anweisung
Kommentarzeile
In der Spalte 1:
Ab Spalte 2 das gewünschte Kommentar
C oder *
END – Zeile
Leerzeichen
Leerzeichen
END
Tabelle 1: Zeilenarten von Fortran
3.3 Programmstruktur
FORTRAN ist die erste imperative Programmiersprache. Bei dem imperativen
Programmierparadigma wird ein Programm als Abfolge von Anweisungen aufgefasst,
die an einen Rechner
übergeben werden und mit denen ein bestimmter Prozess
durchgeführt werden soll.
8
Kapitel 3: Charakteristika der Sprache
Jedes FORTRAN Programm, wird zunächst in Form von Text in einer algorithmischen
Sprache geschrieben. Danach wird es mit Hilfe eines Programmcompilers in einen
Maschinencode übersetzt und wird so in die Form einer ausführbaren Datei überführt,
mit der das Programm gestartet werden kann. Der Text eines FORTRAN Programms
kann mit Hilfe eines beliebigen Texteditors erstellt werden.
Wenn ein einfaches Programm in FORTRAN geschrieben wird, sollten die
Anweisungen in folgender Reihenfolge geschrieben werden:
1. Die Beschreibungsanweisungen;
2. Bestimmung der Funktionsanweisungen;
3. Ausführbare Anweisungen;
4. Die END- Anweisung.
Desweiteren können mehrere Unterprogramme im Anschluss folgen. Ein FORTRAN
Programm hat dann folgenden Aufbau [Sc90, S.19]:
PROGRAM <Programmname>
<Vereinbarungsteil>
<Anweisungsteil>
END
<Unterprogramm1>
…
<Unterprogramm2>
Tabelle 2: Programmaufbau von Fortran
Das „Program“-Statement ist dafür da, um dem Programm einen Namen zu geben.
Diese Zeile ist optional und kann weggelassen werden. Am Ende eines Programms
muss immer eine „END“-Anweisung stehen.
Im Vereinbarungsteil werden die nicht ausführbaren Anweisungen angegeben und
somit die von der Programmeinheit benutzen Konstanten, Variablen, Felder und
Unterprogramme definiert.
Die ausführbaren Anweisungen, werden in dem Anweisungsteil formuliert. Somit stellt
der
Anweisungsteil
den
eigentlichen
Programmkörper
da,
in
dem
der
Programmalgorithmus realisiert wird.
Ein FORTRAN Programm ist eine Aufzeichnung der Lösung des gestellten Problems
und stellt eine Abfolge von Anweisungen und Kommentaren dar.
9
Kapitel 3: Charakteristika der Sprache
Die Kommentare dienen dabei dem besseren Verständnis des Programms und
gewährleisten die verbale Beschreibung seiner Logik. Gewöhnlich wird der Anfang
eines Programms mit einführenden Kommentaren versehen – sowie jeder Abschnitt, der
die abschließende Logik enthält. In den einführenden Kommentaren werden der Name,
sowie der Zweck des Programms angegeben. Die wichtigsten Variablen und ihre
Funktionen können in den einführenden Kommentaren aufgezählt und erläutert werden.
Die Kommentarzeilen beginnen mit * oder dem Buchstaben C in der ersten Spalte und
sind nur für die menschlichen Leser des Programms gedacht. Für den Compiler sind sie
bedeutungslos. Auch Leerzeichen und leeren Zeilen werden ähnlich wie Kommentare
behandelt. Sie dienen dazu, das Programm für den Menschen lesbarer zu machen und
dürfen überall eingefügt werden. [Ma80, S.29f]
Die Anweisungen sind die Hauptelemente einer Programmiersprache. Sie schreiben die
Ausführung der Vorschriften vor, die für die Realisierung des Algorithmus notwendig
sind, beschreiben die verwendeten Daten und bestimmen die Struktur des Programms.
Alle Anweisungen in FORTRAN werden in ausführbare und nicht ausführbare
Anweisungen unterschieden.
Die nicht ausführbaren Anweisungen dienen dazu, die Eigenschaften der Daten zu
beschreiben. Dazu zählen: Typbeschreibungsanweisungen, Anweisungen, welche die
Dimensionen von Arrays beschreiben, Anweisungen, welche die Anfangsbedeutung der
Daten bestimmen, Anweisungen die die Form der Ein- und Ausgabedaten bestimmen
und einige mehr. Demzufolge gehören zu den nicht ausführbaren Anweisungen die
Formatangaben (FORMAT), die Deklarationen (z.B. INTEGER, REAL, DIMENSION,
DATA) und die Endanweisung (END).
Die ausführbaren Anweisungen bestimmen die Handlungen, die ausgeführt werden
sollen. Beispielsweise die Ausführung mathematischer Operationen oder die Auslösung
einer Ausgabe. Zu den ausführbaren Anweisungen gehören die Rechenbefehle (z.B.
A=B+C),
die
Ein-/Ausgabeanweisungen
(z.B.
READ,
WRITE)
und
die
Steueranweisungen (z.B. GO TO, IF, DO, STOP).
Alle ausführbaren Anweisungen werden in der Reihenfolge im Programm angeordnet,
in der sie entsprechend dem Lösungsalgorithmus der Aufgabe ausgeführt werden sollen.
10
Kapitel 3: Charakteristika der Sprache
Für die Beendigung eines Programms werden die Anweisungen STOP und END
verwendet.
Die END Anweisung kennzeichnet das Ende eines Programms. Diese Anweisung ist
nicht ausführbar und sie löst keine Handlung des Rechners aus. Steht die Anweisung
END irgendwo im Programm, wird die Ausführung des Programms sofort gestoppt.
Deswegen sollte die END Anweisung immer die letzte Anweisung im Programm sein.
Steht die END Anweisung am Ende eines Unterprogramms, so bewirkt sie einen Sprung
zur aufrufenden Programmeinheit.
Eine andere Möglichkeit ein Programm zu beenden ist die STOP Anweisung. Mit ihr
wird das Programm beendet, wenn alle notwendigen Berechnungen durchgeführt
wurden. Sie stellt eine ausführbare Anweisung dar und kann sich an beliebiger Stelle im
Programm befinden. Die Syntax der Anweisung lautet:
STOP <TEXT>
Vor Beendigung des Programms wird die Zeichenkette <TEXT> ausgegeben.
Außerdem kann das Programm mit der Anweisung PAUSE angehalten werden.
PAUSE <TEXT>
Die Ausführung des Programms wird damit unterbrochen. Dabei wird die Nachricht
<TEXT> ausgegeben. Durch eine spezielle Nutzerhandlung wird die Abarbeitung des
Programms mit der Anweisung fortgesetzt, die auf die PAUSE Anweisung folgt.
11
Kapitel 4: FORTRAN - Sprachelemente
4 FORTRAN - Sprachelemente
4.1 Konstanten, Variablen und Felder
In einem FORTRAN Programm werden Daten verarbeitet. Die Daten können in Form
von Konstanten oder Variablen gegeben sein. Die Datenobjekte werden durch einen
Name, Typ und weitere Eigenschaften gekennzeichnet.
Konstanten
Eine Konstante wird vor der Programmausführung definiert, womit auch der nötige
Speicherbedarf festgelegt wird. Während der Programmausführung kann der Wert und
somit auch der Speicherbereich einer Konstante nicht mehr verändert werden. In
FORTRAN gibt es die Möglichkeit einer Konstanten einen Namen zuzuweisen. Dieser
Name wird bei der Konstantendefinition festgelegt und kann innerhalb einer
Programmeinheit nicht mehr verändert werden. Wenn einer Konstanten ein Datentyp
zugewiesen werden soll, muss die Deklaration vor der Konstantendefinition erfolgen.
Konstanten außerdem können zur Beschreibung anderer Konstanten genutzt werden.
Um die Definition von Konstanten zu vereinfachen wurde in FORTRAN 77 die
Anweisung PARAMETER eingeführt. Die Syntax dieser Anweisung lautet:
PARAMETER ( <PAR1>=<WERT1>, <PAR2>=<WERT2>, … )
Wenn Konstanten ohne die Anweisung PARAMETER definiert werden, besteht die
Gefahr, dass sie während der Ausführung des Programms überschrieben werden.
Konstanten, die durch eine PARAMETER Anweisung beschrieben wurden, werden
symbolische Konstanten genannt und dürfen nie auf der linken Seite einer Zuweisung
stehen. Als Folge davon können sie auch nicht überschrieben werden. Der Name einer
so definierten Konstante, ist ein symbolischer Name und darf als Variablenname im
selben Programmteil nicht mehr benutzt werden. Ansonsten können sie aber ohne
weitere Einschränkungen wie normale Konstanten benutzt werden.
Wenn eine symbolische Konstante „A“ mit Hilfe einer anderen symbolischen Konstante
„P“ definiert werden soll, muss die Konstante „P“ vor der Konstanten „A“ mit Hilfe
12
Kapitel 4: FORTRAN - Sprachelemente
einer PARAMETER Anweisung oder vor der Kostanten „A“ in derselben Anweisung
definiert worden sein.
Die PARAMETER Anweisung ist ein wichtiges Hilfsmittel zur Definition von
Konstanten. Mit ihr können Konstanten vor Überschreibungen geschützt und
Programme außerdem sicherer modifiziert werden.
Variablen
Ein Datenobjekt, dessen Wert im Gegensatz zu einer Konstante verändert werden kann,
wird Variable genannt. Im Vereinbarungsteil können Namen als Variablen vereinbart
werden. Die Variablen werden dann über den entsprechenden Namen im Programm
angesprochen.
Wie zuvor bereits erläutert, sollte zur Initialisierung von Konstanten die PARAMETER
Anweisung genutzt werden. Für die Initialisierung von Variablen und Arrays wird die
Anweisung DATA genutzt Mit dem Begriff Initialisierung ist die erstmalige
Wertzuweisung gemeint. Eine DATA Anweisung setzt sich wie folgt zusammen:
DATA <VAR1>, <VAR2>, …, <VARN> / <WERT1>, <WERT2>, …, <WERTN> /
Dabei stehen <VAR1>, <VAR2>, …, <VARN> für die Namen der Variablen und
<WERT1>, <WERT2>, …, <WERTN> für die Werte, die diese Variablen aufnehmen
sollen. Diese Werte werden einmalig zu Beginn der Programmausführung den
Variablen zugewiesen.
Es müssen dabei immer genau so viele <VAR> Elemente
existieren wie <WERT> Elemente.
Es besteht auch die Möglichkeit einen Wiederholungsfaktor einzuführen, um die
Aufzählung von mehrmals auftretenden Werten zu vereinfachen. Eine ebensolche
Anweisung kann folgendermaßen aussehen:
DATA A, B, C, D / 4*5 /
Hierbei nehmen die Variablen A – D alle den Wert 5 an. Die Variablen dürfen je
Programmeinheit nur einmal durch eine DATA Anweisung initialisiert werden. Die
Variablen, bei denen kein Anfangswert verlangt wird, müssen nicht initialisiert werden.
Wenn mehrere Variablennamen für ein denselben Speicherplatz benutzt werden dürfen,
soll die Anweisung EQUIVALENCE benutzt werden. Syntax der Anweisung ist:
13
Kapitel 4: FORTRAN - Sprachelemente
EQUIVALENCE (N1, N2, … )
Dabei sind N1 und N2 die Namen der Variablen, die sich auf denselben Speicherplatz
beziehen sollen. In der Klammer müssen mindestens zwei Namen aufgeführt werden.
Die Variablen N1 und N2 haben zu jedem Zeitpunkt im Programm denselben Wert.
Dies kann zu mehreren Zwecken genutzt werden. Beispielswiese kann diese Anweisung
bei der Fehlerkorrektur von Programmen helfen. So braucht man bei einem
Programmierfehler nicht jede Variable einzeln zu verbessern, wenn sich z.B. mehrere
Variablen auf denselben Speicherplatz beziehen. Außerdem kann speicherplatzsparend
programmiert werden. Wenn zwei Variablen nicht gleichzeitig sondern nacheinander
benutzt werden, können diese Variablen denselben Speicherplatz nutzen und somit
effizienter den Speicher nutzen. Während die Speicherplatzeinsparung bei einfachen
Speicherplätzen noch sehr gering ist, kann sie bei größeren Feldern beachtlich sein. Die
Struktur
einer
auf
Felder
angewandten
EQUIVALENCE
Anweisung
sieht
folgendermaßen aus (gleiche Felddimensionen vorausgesetzt):
EQUIVALENCE (N1(i,j), N2(i,j), … )
Zusätzlich kann die EQUIVALE- Anweisung der Einsparung von Rechenzeit dienen.
Besonders bei mehrdimensionalen Feldern ist die Zeiteinsparung erheblich.
Felder
Während des Programmierens wird oft nicht nur eine Variable benötigt, sondern es soll
eine Menge zusammengehöriger Daten verarbeitet werden. Solche Variablen lassen sich
zu einem Feld (Array) zusammenfassen. Ein FORTRAN Feld ist eine Gruppe von
Variablen gleichen Typs, die im Speicher einen zusammenhängenden Bereich
einnehmen und die in FORTRAN unter einem gemeinsamen Namen ansprechbar sind.
Jedes Element des Feldes wird durch den Namen des Feldes und seine Platznummer
eindeutig bestimmt. Ein Feld lässt sich mit der Anweisung DIMENSION vereinbaren.
Diese Anweisung ist eine nicht ausführbare Anweisung und dient nur dazu, die Größe
der benötigten Felder anzugeben. FORTRAN 77 kennt Felder mit bis zu sieben
Dimensionen. Die Syntax dieser Anweisung lautet:
DIMENSION N1(V11, V12), N2(V21, V22), …
14
Kapitel 4: FORTRAN - Sprachelemente
Dabei stellen N1 und N2 die Namen der Felder dar, die durch diese Anweisung
dimensioniert werden sollen. V11 und V12 sind natürliche Zahlen, welche die Größe
des Feldes angeben. Diese Werte müssen hinter dem Namen des Feldes in Klammern
und durch Kommata getrennt angegeben werden. Der Typ des Feldes kann entweder
explizit oder implizit vereinbart werden. Bei der expliziten Typvereinbarung können
auch direkt die Feldgrenzen angegeben werden.
Beispiel:
Erst wird der Typ der Matrizen M1, M2 und des Vektors M3 bestimmt. Die Größe der
Felder wird ausschließlich mit der DIMENSION Anweisung bestimmt.
DOUBLE PRECISION M1, M2, M3
DIMENSION M1(3, 3), M2(10, 10), M3(6)
Alternativ dazu können die Grenzen der Felder sofort bei der Typvereinbarung mit
angegeben werden.
DOUBLE PRECISION M1(3, 3), M2(10, 10), M3(6)
Die Spezifikationsanweisungen der Felder sind für das ganze Programm gültig und
müssen vor Benutzung der Variablen in der Liste angegeben werden. Sollten Variablen
benutzt werden, deren Indizes größer als vereinbart ausfallen, führt dies zu
Rechenfehlern, die nicht angezeigt werden. [Dr70, S. 28]
4.2 Standardtypen
Um festzulegen wie viel Speicherplatz für ein angegebenes Datenobjekt reserviert
werden muss und um seinen Wertebereich festzulegen, muss schon bei der Deklaration
festgelegt werden, welchen Datentypen diese Datenobjekte angehören sollen. Die
allgemeine Form einer Datenobjektvereinbarung lautet:
<Typ> <Liste von Namen>.
Die Namen in der Liste werden durch Kommata getrennt. Die Reihenfolge ist dabei
beliebig.
Jedes Datenobjekt, ob Konstante oder Variable, sollte mit einem Datentyp deklariert
werden. Die von FORTRAN 77 unterstützten Standardtypen, sind in folgender Tabelle
zu sehen:
15
Kapitel 4: FORTRAN - Sprachelemente
Wortsymbol
INTENGER
REAL
DOUBLE PRECISION
COMPLEX
LOGICAL
CHARACTER
Entspricht
Z, ganze Zahlen
R, reelle Zahlen
R, reelle Zahlen
C, komplexe Zahlen
B, logische Werte
Bel. Zeichen
Beispiel
-4 10 1 +2
1.3 1.23e-1 -1.E-6 -.98
(1.0,2.e-3)
.TRUE. .FALSE.
‚Name‘ „Zahl“ ‚Hälfte‘
Tabelle 3: Datentypen von FORTRAN 77
Es ist vorteilhaft, Datenobjekte vor ihrer Verwendung zu deklarieren. Deswegen sollte
die Variablendeklaration am Anfang des Programms vorgenommen werden. Der Typ
eines Datenobjektes, kann nach Ausführung des Programms nicht mehr verändert
werden. Wird ein Objekt ausdrücklich einem Datentyp zugewiesen, spricht man von
einer expliziten Typvereinbarung.
Wenn einem Datenobjekt kein Datentyp zugewiesen wurde, wird dieses Objekt nach
folgenden Regeln einem von zwei Datentypen (INTEGER oder REAL) zugeordnet:
beginnt der Name dieses Objektes mit dem Buchstaben I, J, K, L, M, N, wird dieses
Datenobjekt dem INTEGER Typ zugewiesen. Steht ein beliebiger anderer Buchstabe
am Namensanfang so wird dieses Objekt dem REAL Typ zugewiesen. Diese
Typbeschreibung wird unter dem Namen implizite Typvereinbarung in der Literatur
beschrieben. [Dr70, S.22f]
Außerdem gibt es die Möglichkeit die implizite Typvereinbarung mittels der Anweisung
IMPLICIT zu erweitern bzw. zu überschreiben. Mit dieser Anweisung können
Buchstaben einem bestimmten Datentyp zugeordnet werden. Die Objekte die mit
diesem Buchstaben beginnen, werden automatisch diesem Typ zugewiesen.
Eine
beispielhafte IMPLICIT Anweisung sieht folgendermaßen aus:
IMPLICIT COMPLEX (K, T)
Das bedeutet, die Variablen deren Name mit K und T beginnen, werden dem Datentyp
COMPLEX zugerodet.
Mit der Anweisung IMPLICIT NONE kann die implizite Typvereinbarung aufgehoben
werden. [La87, S. 35] Damit kann die Fehlersuche nach nicht deklarierten Bezeichnern
vereinfacht werden.
Bei der expliziten und impliziten Deklaration gelten folgende Rangfolgen:
16
Kapitel 4: FORTRAN - Sprachelemente
1. Die explizite Deklaration wird der impliziten vorgezogen. Sie hebt alle anderen
Deklarationen auf.
2. Wenn eine Variable nicht explizit deklariert wurde, greift die IMPLICIT
Anweisung und der Typ wird nach dem Anfangsbuchstaben bestimmt.
3. Falls keine explizite Deklaration und keine IMPLICIT Anweisung gegeben ist,
gelten die Regeln der impliziten Typvereinbarung.
Eine explizite Typvereinbarung ist immer der impliziten vorzuziehen, da die implizite
Vereinbarung oftmals zu Fehlern führt. Bei der expliziten Typvereinbarung sind
desweiteren alle Variablen am Programmanfang aufgelistet wodurch auch eine
Typänderung einfacher vorzunehmen ist.
4.3 Elementare Anweisungen
4.3.1 IF- Anweisung
Seit FORTRAN 77 wurde die Nutzung der bedingten Anweisung in FORTRAN
möglich. Es kam die logische IF Anweisung hinzu. In den früheren Versionen musste
für solche Abfragen mindestens eine GOTO Anweisung verwendet werden. Die IF
Anweisung ist die einzige Anweisung, bei der eine zweite Anweisung in der gleichen
Programmzeile angegeben wird. [Sc90, S.59]
Soll der Programmablauf von einem Wert oder logischen Ausdruck abhängig sein, kann
die IF Anweisung genutzt werden. Die allgemeine Form einer logischen IF- Anweisung
ist:
IF (<LA>) <A>
Ob die Anweisung <A> ausgeführt wird, hängt vom Ergebnis der Auswertung des
logischen Ausdrucks <LA> ab. Wenn der logische Ausdruck wahr ist, wird die
Anweisung ausgeführt.
Es können auch mehrere IF Blöcke in einem IF Block geschachtelt werden. [Sc90,
S.60f] Diese Art von Anweisung wird BLOCK-IF Anweisung genannt und hat folgende
Syntax:
17
Kapitel 4: FORTRAN - Sprachelemente
IF (<LA1>) THEN
<A1>
ELSE IF (<LA2>) THEN
<A2>
…
ELSE (<LA>)
<A>
END IF
Eine spezielle Form eines logischen Ausdrucks ist der Vergleichsausdruck. Eine
allgemeine Form des Vergleichs sieht folgendermaßen aus:
<A1> <VERGELICHSOPERATOR> <A2>
Da die Entwicklung von FORTRAN zu der Zeit stattfand als Programme noch auf
Lochkarten gestanzt wurden, musste mit einem sehr eingeschränkten Zeichenvorrat
gearbeitet werden. Die entsprechenden Eingabegeräte verfügten nur über eine sehr
begrenzte Anzahl an Zeichen, bei denen die Vergleichsoperatoren nicht enthalten
waren. Daher werden die Vergleichsoperatoren durch eine Folge von Buchstaben
dargestellt. Die Schreibweise hat sich in FORTRAN bis heute gehalten. Die sechs
Vergleichsoperatoren, die FORTRAN unterscheidet sind in der folgenden Tabelle zu
entnehmen. [Me88, S.41]
Vergleichsoperator
.EQ.
.NE.
.GT.
.GE.
.LT.
.LE.
Bedeutung
EQual
Not Equal
Greater Than
Greater than or Equal
Less Than
Less than or Equal
Math. Symbol
=
≠
>
≥
<
≤
Tabelle 4: Vergleichsoperatoren in FORTRAN 77
4.3.2 Ein- /Ausgabeanweisungen
Nachdem das FORTRAN Programm eine Berechnung durchgeführt hat, sollen die
Ergebnisse auf einem Medium angezeigt werden. Zur Anzeige auf dem Bildschirm wird
der Ausgabebefehl WRITE verwendet. Zum Einlesen dient die Anweisung READ.
[Sc90, S. 67]
18
Kapitel 4: FORTRAN - Sprachelemente
Die allgemeine Form der READ Anweisung lautet:
READ*, <VAR1>, <VAR2>, …
oder
READ(*,*) <VAR1>, <VAR2>, …
Durch diesen Befehl können beliebig viele Variablen z. B. per Tastatur eingegeben und
von FORTRAN eingelesen werden. Dabei steht (*,*) als Platzhalter für eine
Zeichenkombination. Die erste Stelle gibt die Verbindung zu einer Datei an, die zweite
bestimmt das Ausgabeformat.
Der entsprechende WRITE Befehl sieht folgendermaßen aus: [Sc90, S. 68]
WRITE(*,*) <VAR1>, <VAR2>, …
Für die Wildcard (*,*) muss analog zur READ Anweisung, an erster Stelle die
Zuweisungsnummer für das Medium und an zweiter Stelle die Anweisungsnummer für
das Format angegeben werden. Steht an erster Stelle statt einer Zahl ein „*“ Zeichen,
wird das Standard Eingabemedium des jeweiligen Rechners angesprochen.
Außerdem gibt es bei FORTRAN, als vereinfachte Form der WRITE Anweisung, die
PRINT Anweisung. [Sc90, S. 68f] Durch die PRINT Anweisung wird immer das
Standard Ausgabemedium angesprochen. Die Syntax dazu ist:
PRINT* <VAR1>, <VAR2>, …
Dies entspricht der folgenden WRITE Anweisung:
WRITE (*,f) <VAR1>, <VAR2>, …
Zu beachten ist, dass es hierbei keine Möglichkeit gibt, das Datenausgabeformat
festzulegen.
4.3.3 FORMAT- Anweisung
Um anzugeben in welchem Format eine Information
auf einem Daten-
Aufzeichnungsmedium erscheinen soll, wird die FORMAT- Anweisung benutzt. [La87,
S.38f]
19
Kapitel 4: FORTRAN - Sprachelemente
Mehrere verschiedene Ein- und Ausgabeanweisungen können eine FORMAT- Anweisung
zur Verarbeitung von Variablen verschiedenen Namens, aber gleichen Typs benutzt
werden. Die allgemeine Form der FORMAT- Anweisung lautet:
N FORMAT (<A1>, <A2>,…, <AN>)
N ist dabei die Nummer der FORMAT- Anweisung, die dann auch in den Ein- und
Ausgabeanweisungen an entsprechender Stelle benutzt wird. <A1>, <A2>,…, <AN>
stehen für die Formatbezeichner. Die Form der Formatbezeichner hängt von dem Typ
der Variablen, die zu formatieren sind ab.
Für die Variablen von Typ INTEGER sieht der Formatbezeichner folgendermaßen aus:
I<ANZ> oder I<ANZ>.<STEL>
An der Stelle <ANZ> wird die Anzahl der maximal auszugebenen Stelle angegeben.
<STEL> darf nicht größer als <ANZ> sein, da <STEL> die Anzahl der mindestens
auszugebenden Stellen darstellen soll, wobei fehlende Stellen mit einer Null aufgefüllt
werden.
Wie die Formatbeschreiben für andere Datentypen aussehen, wird in der nachfolgenden
Tabelle veranschaulicht.[Sc90, 103ff]
Beschreiber
Bedeutung
F<ANZ>.<NACH>
Festpunktdarstellung mit <NACH> Nachkommastellen für REAL und
DOUBLE PRECISION- Zahlen
E<ANZ>.<NACH>
Gleitpunktdarstellung mit <NACH> Stellen nach dem Dezimal für
REAL- Zahlen
D<ANZ>.<NACH> Gleitpunktdarstellung mit <NACH> Stellen nach dem Dezimal für
DOUBLE PRECISION- Zahlen
L<ANZ>
Darstellung boolescher Variablen bei Ein- und Ausgabe
Tabelle 5: Bedeutung der Formatbeschreibungen
Sollten Druckpositionen übersprungen werden, kann die Spezifikation X benutzt
werden. Es werden so viele Positionen freigelassen wie vor dem X stehen wird. Z. B.
mit 1X wird eine leere Stelle veranlasst. [Ma80, S.152]
Außerdem kann mit / (Slash) angegeben werden, dass die grade gedruckte Zeile nicht
weiter beschrieben wird und die Ausgabe der nächsten Zeile anfangen kann. Sollten in
einer FORMANT- Anweisungen N hintereinander folgende / - Zeichen stehen, werden N20
Kapitel 4: FORTRAN - Sprachelemente
1 Leerzeilen zwischen zwei aufeinanderfolgenden geduckten Zeilen geschaltet. Dies
gilt nur wenn die N Schrägstriche nicht am Anfang oder Ende der FORMAT- Anweisung
stehen. [DR70, S.106]
Eine FORMAT- Anweisung kann an beliebiger Stelle im Programm geschrieben
werden. Um das Programm übersichtlicher zu gestalten, wird empfohlen alle
FORMAT- Anweisungen am Anfang oder am Ende eines Programms aufzuführen.
4.3.4 DO -Schleif
FORTRAN 77 bietet nur eine Art der direkten Schleifenprogrammierung – die
sogenannte DO Schleife. Die DO Anweisung ist die wichtigste FORTRAN Anweisung.
Mit deren Hilfe kann ein kompletter Programmabschnitt mehrfach wiederholt werden.
Wie oft der Abschnitt wiederholt wird, wird von einer Laufvariablen bestimmt, deren
Erhöhung vom Programm automatisch durchgeführt wird. Der Anfangswert dieser
Variablen wird festgelegt. Der maximale Wert, den die Laufvariable annehmen kann
muss ebenfalls im Voraus bestimmt werden. [Sc90, S.69] Die Form der DO Schleife
lautet:
DO <LABEL> <LV> = <AW>, <EW>, <ST>
Mit <LABEL> wird die letzte auszuführende Zeile des Schleifenbereiches angegeben.
Das <LV> steht für Laufvariable, <AW> für Anfangswert, <EW> für Endwert und
<ST> für Schrittweite.
Um das Ende einer DO Schleife zu bezeichnen wurde die leere Anweisung CONTINUE
eingeführt. Vor der Anweisung muss eine Zahl als LABEL stehen, welche identisch mit
der Zahl sein muss, die direkt hinter der DO Anweisung steht. [Sc90, S. 70] Dies sieht
allgemein folgendermaßen aus:
<LABEL> CONTINUE
Die CONTINUE Anweisung kann aber auch unabhängig davon bei der Strukturierung
von Programmen sehr häufig eingesetzt werden.
21
Kapitel 4: FORTRAN - Sprachelemente
4.4 Unterprogramme
Eine Problemstellung lässt sich meistens in einem Hauptprogramm lösen. Es empfiehlt
sich oft aber die Unterprogrammtechnik zu nutzen. Die Zusammenfassung von
Programmteilen zu Unterprogrammen macht das gesamte Programm übersichtlicher.
Desweiteren lässt sich ein mit Unterprogrammen strukturiertes Programm schneller
testen. Außerdem werden viele Programmteile mehrfach genutzt. Diese Programmteile
lassen sich zu Unterprogrammen zusammenfassen, und können auf diese Weise leichter
wiederverwendet werden. In FORTRAN werden zwei Arten von Unterprogrammen
unterschieden: FUNCTION und SUBROUTINE.
FUNCTION
FUNCTION
bezeichnet
eine
von
einem
Hauptprogramm
unabhängige
Programmeinheit. Die Ausführung eines FUNCTION Unterprogramms, kann entweder
aus einem Haupt- oder aber aus einem anderen Unterprogramm heraus durchgeführt
werden. [Sc90, S.87] Die erste Zeile eines solchen Unterprogramms kann
folgendermaßen aussehen:
FUNCTION NAME (P1, …, PN)
oder
<TYP> FUNCTION NAME * LÄNGE (P1, …, PN).
Da es bei FORTRAN 77 keine globalen Variablen gibt, müssen Variablen stets an
Unterprogramme übergeben werden. P1, …, PN sind die übergebende Argumente. Die
Liste der Argumente darf nicht länger als 15 Werte enthalten, es muss aber mindestens
ein Wert angegeben werden.
In einer FUNCTION dürfen alle in FORTRAN 77 zugelassenen Anweisungen
verwendet werden – mit Ausnahme von FUNCTION, SUBROUTINE und
BLOCKDATA Anweisungen sowie Ein- und Ausgabeanweisungen.
SUBROUTINE
Die FUNCTION Unterprogramme können nur einen Wert, den Funktionswert,
berechnen. Die SUBROUTINE Unterprogramme dagegen können alle Anweisungen
22
Kapitel 4: FORTRAN - Sprachelemente
enthalten, die auch Hauptprogramme enthalten dürfen. [Ma80, S. 60] Ein
SUBROUTINE Unterprogramm wird aufgerufen durch:
CALL SUBROUTINE NAME(P1, …, PN)
Der Rücksprung in das aufrufende Programm erfolgt bei beiden Unterprogrammen mit
der Anweisung RETURN. Das physische Ende wird durch die Anweisung END
festgelegt.
COMMON
Bis jetzt wurden die Parameter, die bei einem Unterprogramm nötig sind, immer in der
Klammer
hinter
dem
Unterprogrammnamen
eingeschlossen
und
so
dem
Unterprogramm übergeben. Eine andere Möglichkeit ist die Definition eines
gemeinsamen Speicherbereichs, auf den sowohl das Hauptprogramm als auch die
Unterprogramme zugreifen können. Dies kann mit der nicht ausführbaren Anweisung
COMMON geschehen [La87, S.89ff], deren Syntax wie folgt aussieht:
COMMON / <NAME> / <VAR1>, <VAR2>, … , <VARN>
Mit <NAME> wird der COMMON Block benannt. Diese Angabe ist optional und kann
weggelassen werden. In diesem Fall kann aber nur ein unbenannter COMMON Block
verwendet werden.
BLOCK DATA
Wurden Variablen in einem COMMON Block aufgeführt, können diese nicht mit einer
DATA Anweisung initialisiert werden. Um die Variablen dennoch initialisieren zu
können, muss eine eigene Programmeinheit - BLOCK DATA - bereitgestellt werden.
[Sc90, S.121f] Die Syntax lautet:
BLOCK DATA <NAME>
…
END
Wobei NAME die Bezeichnung der BLOCK DATA Programmeinheit ist. In der
Programmeinheit können außer den Typvereinbarungen folgende Anweisungen
enthalten sein: PARAMETER, DIMENSION, COMMON, EQUIVALENCE, SAVE,
IMPLICIT, und DATA.
23
Kapitel 5: SEND - MORE – MONEY
5 SEND - MORE – MONEY
Für den praktischen Teil dieser Seminararbeit, stand die Aufgabe, das sogenannte
SEND-MORE-MONEY Rätsel zu lösen. Einer Legende zufolge, ist das erste Rätsel
dieser Art durch ein Telegramm entstanden, welches ein Sohn hat der finanzielle
Schwierigkeiten hatte an seinen Vater geschickt hatte. Um den genau benötigten Betrag
zu errechnen, sollte jedem Buchstaben eine Ziffer zwischen 0 und 9 zugeordnet werden.
Dadurch sollte der Ausdruck korrekt gelöst werden. Dabei durfte den führenden
Buchstaben (also S und M) keine Null zugeordnet werden.
SEND
+ MORE
-----MONEY
FORTRAN ist wahrscheinlich nicht die erste Programmiersprache, die gewählt wurde,
um diese Art von Aufgabe zu lösen. Nichtsdestotrotz ist es aber auch mit FORTRAN
möglich eine Lösung dieser Aufgabenstellung zu finden.
Zunächst wird dem Programm der Name „Rebus“ zugewiesen.
PROGRAM REBUS
Da die Buchstaben A bis Z eine ganze Zahl annehmen können sollen, werden sie mit
dem Datentyp INTEGER initialisiert.
IMPLICIT INTEGER (A-Z)
Die eigentliche Aufgabe, die Zuordnung von Zahlen zu Buchstaben, wird mit
geschachtelten DO Schleifen und IF Anweisungen gelöst. Da in der Aufgabe nur 8
verschiedene Buchstaben enthalten sind, werden im Programm acht DO Schleifen
benötigt.
Die erste DO Schleife sieht folgendermaßen aus:
DO 220 S=1,9
…
220 CONTINUE
Dies bedeutet, dass der Buchstabe S mit dem Anfangswert 1 initialisiert wird und die
Schleife so oft wiederholt werden kann, bis S maximal den Wert 9 angenommen hat.
Nach der zweiten DO Schleife folgt die erste IF- Abfrage:
24
Kapitel 5: SEND - MORE – MONEY
DO 219 E=0,9
IF (E.EQ.S) GOTO 219
…
219 CONTINUE
Da E kein führender Buchstabe in der Aufgabe ist, darf er auch den Wert Null
annehmen. Daher bekommt E als Anfangswert die Zahl 0 zugewiesen. In der IFAnweisung wird überprüft ob E und S den gleichen Wert angenommen haben. Wenn
das der Fall sein sollte, soll die zweite DO Schleife mit der Nummer 219 noch einmal
ausgeführt werden. Dies wird mit der GOTO Anweisung veranlasst. Auch die zweite
DO Schleife kann so oft wiederholt werden, bis der Buchstabe E maximal den Wert 9
angenommen hat.
In dieser Art folgen noch mehrere DO Schleifen und IF Anweisungen. Bis der Wert des
letzten Buchstaben bestimmt werden soll.
DO 213 Y=0,9
IF (Y.EQ.S.OR.Y.EQ.E.OR.Y.EQ.N.OR.Y.EQ.D.OR.Y.EQ.M.OR.Y.EQ.O
& .OR.Y.EQ.R) GOTO 213
…
213 CONTINUE
Die DO Anweisung sieht bei dem letzten Buchstaben Y genauso aus, wie bei dem
Buchstaben E. Nur in der IF Anweisung ist der Wert des Buchstaben Y mit allen
anderen Buchstaben zu überprüfen. Sollte der Wert mit nur einem Wert der anderen
sieben Buchstaben übereinstimmen, muss die DO Schleife 213 wiederholt ausgeführt
werden.
Als nächstes werden die Wörter SEND, MORE und MONEY definiert. Da die Werte
der Buchstaben
nur eine ganze Zahl zwischen 0 und 9 darstellen, müssen einige
Buchstaben mit jeweils 10, 100, 1000 oder 10000 multipliziert werden.
SEND = D+10*N+100*E+1000*S
MORE = E+10*R+100*O+1000*M
MONEY = Y+10*E+100*N+1000*O+10000*M
Anschließend kann überprüft werden ob die Lösung korrekt ist. Wenn nicht, muss in die
letzte DO Schleife gesprungen werden.
IF(SEND+MORE.NE.MONEY) GOTO 213
An dieser Stelle kann die Lösung ausgegeben werden. Dazu wird die WRITE
Anweisung benutzt.
25
Kapitel 5: SEND - MORE – MONEY
WRITE(*,300) S,E,N,D,M,O,R,E,M,O,N,E,Y
Nachdem
alle
DO
Schleifen
mit
den
jeweiligen
CONTINUE-Anweisungen
abgeschlossen wurden, wird das Ausgabeformat mit der Nummer 300 bestimmt.
300 FORMAT(1X,' SEND
&
',4I1,/,1X,'+MORE
',4I1,
/,1X,'----- ',/,1X,'MONEY ',5I1,/)
Wie bei jedem FORTRAN Programm, muss auch hier END die letzte Anweisung des
Programms sein.
Das Programm läuft alle möglichen Alternativen durch bis es eine gültige Lösung
gefunden hat.
Als Fazit lässt sich sagen, dass FORTRAN einen Vorteil bei der Lösung
mathematischer Aufgaben besitzt. Demzufolge ist FORTRAN weniger für die
Entwicklung von System- bzw. Businesscode und objektorientierte Programmierung
geeignet.
26
Kapitel 6: Zusammenfassung
6 Zusammenfassung
Die Programmiersprache FORTRAN wurde für die Lösung mathematischer Probleme
im naturwissenschaftlichen und ingenieurmäßigen Bereich konzipiert. Die Sprache hat
sich in der Zeit sehr entwickelt und kann in verschiedenen Gebieten eingesetzt werden.
Jedoch für die Lösung systemnaher Problemstellung ist FORTRAN nicht vorgesehen.
Die aktuellen Versionen von FORTRAN lassen jedoch die Einbindung von
anderssprachigen Prozeduren, z.B. C, über die Zugriffe aus Systemressourcen möglich
sind.
In der vorliegenden Arbeit wurde ein Einblick in die Programmiersprache FORTRAN
gewährt. Von der historischen Entwicklung, über zugelassene Symbole, bis wichtige
Anweisungen der Sprache wurde in den vorrangehenden Kapiteln behandelt.
Da FORTRAN zu der Zeiten der Lochkarten entwickelt wurde, ist die Länger und
Struktur jeder Zeile am Aufbau einer 80-spaltige Lochkarte orientiert. Die genauere
Aufteilung der Zeilen wurde im Kapitel 3.2 erklärt.
Im Kapitel 5 wurden die vorgestellten Sprachelemente zur Lösung des SEND-MOREMONEY Rätsels genutzt.
Der grundsätzliche Nachteil von FORTRAN ist, dass in dieser Sprache sehr
unübersichtlicher Programme erstellt werden können. Trotzdessen wird die Sprache
immer noch im wissenschaftlichen und kaufmännischen Bereich verwendet.
Es wird weiterhin an der Entwicklung von FORTRAN gearbeitet. Ein weiter Standard
ist geplant und wird, mit weiterer Verbesserung der Sprache, folgen.
27
Anhang A: Titel von Anhang 1
A SEND – MORE – MONEY - Code
PROGRAM REBUS
IMPLICIT INTEGER (A-Z)
* S E N D M O R E M O N E Y
* S E N D M O R Y
* M and S start with 1 because they are leading
DO 220 S=1,9
DO 219 E=0,9
IF (E.EQ.S) GOTO 219
DO 218 N=0,9
IF (N.EQ.S.OR.N.EQ.E) GOTO 218
DO 217 D=0,9
IF (D.EQ.S.OR.D.EQ.E.OR.D.EQ.N) GOTO 217
DO 216 M=1,9
IF (M.EQ.S.OR.M.EQ.E.OR.M.EQ.N.OR.M.EQ.D) GOTO 216
DO 215 O=0,9
IF (O.EQ.S.OR.O.EQ.E.OR.O.EQ.N.OR.O.EQ.D.OR.O.EQ.M) GOTO 215
DO 214 R=0,9
IF (R.EQ.S.OR.R.EQ.E.OR.R.EQ.N.OR.R.EQ.D.OR.R.EQ.M.OR.R.EQ.O)
& GOTO 214
DO 213 Y=0,9
IF (Y.EQ.S.OR.Y.EQ.E.OR.Y.EQ.N.OR.Y.EQ.D.OR.Y.EQ.M.OR.Y.EQ.O
& .OR.Y.EQ.R) GOTO 213
SEND = D+10*N+100*E+1000*S
MORE = E+10*R+100*O+1000*M
MONEY = Y+10*E+100*N+1000*O+10000*M
IF(SEND+MORE.NE.MONEY) GOTO 213
WRITE(*,300) S,E,N,D,M,O,R,E,M,O,N,E,Y
213 CONTINUE
214 CONTINUE
215 CONTINUE
216 CONTINUE
217 CONTINUE
218 CONTINUE
219 CONTINUE
220 CONTINUE
300 FORMAT(1X,' SEND ',4I1,/,1X,'+MORE ',4I1,
&
/,1X,'----- ',/,1X,'MONEY ',5I1,/)
END
28
Literaturverzeichnis
Literaturverzeichnis
[Al95]
Alt, Walter. Programmieren mit FORTRAN 77. Jena : Walter Alt, 1995.
[CS06]
Chivers, Ian D. und Sleightholme, Jane. Introduction to Programming
with Fortran. London : Springer-Verlag, 2006.
[Dr70]
Dreyfus, Michel. Anleitung zum praktischen Gebrauch von FORTRAN
IV. München : R. Oldenbourg, 1970.
[Ge91]
Gehrke, Wilhelm. FORTRAN 90: Referenz-Handbuch. Der neue
FORTRAn-Standard. München, Wien : Carl Hanser, 1991.
[He81]
Herschel, Rudolf. FORTRAN: Systematische Darstellug für den
Anwender, 2. verb. Aufl. München : R. Oldenbourg , 1981.
[KKU80]
Kaucher, Edgar, Klatte, Rudi und Ullrich, Christian.
Programmiersprachen im Griff. Band 1: FORTRAN. Mannheim :
Bibliographisches Institut AG, 1980.
[La87]
Lamprecht, Günther. Einführung in die Programmiersprache
FORTRAN 77. Braunschweig : Friedr. Vieweg Sohn Verlagsgesellschaft,
1987.
[Ma80]
May, Gerd. Strukturiertes Programmieren mit FORTRAN . München,
Wien : Carl Hanser, 1980.
[Me88]
Merten, Klaus. FORTRAN 77. Eine Einführung zum Selbststudium.
3. Aufl. . Stuttgart : Gustav Fischer Verlag , 1988.
[Me85]
Metcalf, Michael. Effective Fortran 77. Oxford : Clarendon Press, 1985.
[Sc90]
Schwinn, Walter. FORTRAN 77: Einführung und praktische Beispiele.
Düsseldorf : VDI-Verlag GmbH, 1990.
[Th73]
Thull, Karl-Heinz. Problemorientiert mit FORTRAN. Köln-Braunsfeld :
Verlangsgesellschaft Rudolf Müller, 1973.
[ÜBM93]
Überhuber, Christoph, Berhuber, Christoph und Meditz, Peter.
Software- Entwicklung in Fortran 90. Wien, New York : Springer, 1993.
29
Hinweis: Die unten angeführte Erklärung wird nur bei Bachelor- oder Diplomarbeiten
benötigt, nicht jedoch bei Seminarausarbeitungen. Bei Bachelorarbeiten ist
darauf zu achten, dass das Wort „Diplomhausarbeit“ durch „BachelorAbschlussarbeit“ ersetzt wird.
Ich versichere hiermit, dass ich meine Diplomhausarbeit <Titel der Arbeit>
selbstständig und ohne fremde Hilfe angefertigt habe, und dass ich alle von anderen
Autoren wörtlich übernommenen Stellen wie auch die sich an die Gedankengänge
anderer Autoren eng anlegenden Ausführungen meiner Arbeit besonders gekennzeichnet und die Quellen zitiert habe.
Münster, __________
_____________________________