1
Seminar Programmiersprachen
FORTRAN
Robert Moeck
Seminar Programmiersprachen
FORTRAN 2
Gliederung
1 Einführung
2 Historische Entwicklung
3 Ausgewählte Features von Fortran
4 Anwendungsgebiete
5 Quick Sort
6 Zusammenfassung und Ausblick
2
Seminar Programmiersprachen
FORTRAN 3
1 Einführung
• FORmula TRANslation
• Entwicklung in den 1950er Jahren→ Erster Hochsprachen-Standard
• Viele Standardisierungen
• Numerische Rechenoperationen
• Hauptanwendung in Naturwissenschaften und Ingenieurwesen
Seminar Programmiersprachen
FORTRAN 4
Gliederung
1 Einführung
2 Historische Entwicklung
3 Ausgewählte Features von Fortran
4 Anwendungsgebiete
5 Quick Sort
6 Zusammenfassung und Ausblick
3
Seminar Programmiersprachen
FORTRAN 5
2 Historische Entwicklung
2.1 FORTRAN I
2.2 FORTRAN II, III, IV
2.3 FORTRAN 66
2.4 FORTRAN 77
2.5 Fortran 90
2.6 Fortran 95
Seminar Programmiersprachen
FORTRAN 6
2.1 FORTRAN I
• 1957 – Entwicklung des
FORTRAN I-Compilers
auf einem IBM 704
• IBM-Team unter
John W. Backus (Foto)
• Schnelle Verbreitung in Wissenschaft und Militär
4
Seminar Programmiersprachen
FORTRAN 7
2.1 FORTRAN I
• Vorteile
– Enorme Effizienzsteigerung der Programmentwicklung
– Geringere Anforderungen an Programmierer
– Portabilität !
Seminar Programmiersprachen
FORTRAN 8
2.2 FORTRAN II, III, IV
• 1958 – FORTRAN II– Separate Compilation einzelner Module
• 1958 – FORTRAN III– Nicht veröffentlicht
– Integration von Assembler-Code in
Fortran-Code
• Assembler-Code: oft effizienter
• Aber: Verlust der Hochsprachen-Vorteile
• 1961 – FORTRAN IV– Aufarbeitung von FORTRAN II
5
Seminar Programmiersprachen
FORTRAN 9
2.3 FORTRAN 66
• Seit 1962 – ASA (American Standards Association) beschäftigt sich mit Fortran
• 1966 – erster Hochsprachen-Standard: FORTRAN 66
• Computer-Hersteller statten neue Rechner mit Fortran-Compilern aus
Seminar Programmiersprachen
FORTRAN 10
2.4 FORTRAN 77
• 1977 – ISO-Standard: FORTRAN 77
→ somit weltweit
• Wichtigste Neuerungen– Block-IF -Strukturen
– Pre-Test von DO-Schleifen
– Rückwärts laufende DO-Schleifen
– Datentyp CHARACTER
6
Seminar Programmiersprachen
FORTRAN 11
2.4 FORTRAN 77
• Bis einschl. FORTRAN 77: Spaltengerechte Codierung → Lochkarten-Layout
– 1 Zeile = 80 Spalten– Spalten 1 – 6: Spezielle Angaben
• Anweisungsmarken• Einleitung von Kommentarzeilen• Einleitung von Fortsetzungszeilen
– Spalten 7 – 72: Anweisungsteil– Spalten 73 – 80: Identifikationsfeld („Kennlochungen“der Karten)
Seminar Programmiersprachen
FORTRAN 12
2.4 FORTRAN 77
• Beispiel
7
Seminar Programmiersprachen
FORTRAN 13
2.5 Fortran 90
• Viele neue, mächtige Features
– Spaltenunabhängige Codierung– Kontrollstrukturen CASEund DO WHILE
– Abstrakte Datentypen
– Operator-Überladung
– Dynamische Speicherverwaltung
– Modularisierung
Seminar Programmiersprachen
FORTRAN 14
2.5 Fortran 90
• Enthält alle zentralen Bestandteile einer „modernen“ Programmiersprache
• Vollständig abwärtskompatibel zu FORTRAN 77 !
8
Seminar Programmiersprachen
FORTRAN 15
2.6 Fortran 95
• Wenige Neuerungen
• Mehr Korrekturen von Fortran 90
• Unterstützung paralleler Programmierung– forall
– PURE
Seminar Programmiersprachen
FORTRAN 16
Gliederung
1 Einführung
2 Historische Entwicklung
3 Ausgewählte Features von Fortran
4 Anwendungsgebiete
5 Quick Sort
6 Zusammenfassung und Ausblick
9
Seminar Programmiersprachen
FORTRAN 17
3 Ausgewählte Features
3.1 Grundlegende Programmstruktur
3.2 Typkonzept
3.3 Selbstdefinierte Ausdrücke
3.4 Zeiger
3.5 Felder
3.6 Ein- und Ausgabe
Seminar Programmiersprachen
FORTRAN 18
3.1 Grundlegende Programmstruktur
• Programmeinheiten sind– Hauptprogramm
– Subroutinen (extern ↔ intern)
– Funktionen (extern ↔ intern)
– Module– blockdata -Programmeinheiten
• In jeder Programmeinheit müssen Spezifikationsanweisungen vor ausführbaren Anweisungen stehen
10
Seminar Programmiersprachen
FORTRAN 19
3.1 Grundlegende Programmstruktur
• Hauptprogramm– Startet die Ausführung eines Programms
PROGRAMhallo_welt
CHARACTER (LEN=6) :: H, W
H = 'Hallo '
W = 'Welt !'
PRINT * , H, W
END PROGRAMhallo_welt
Einleitung
Spezifikations-Anweisungen
AusführbareAnweisungen
Ende
Seminar Programmiersprachen
FORTRAN 20
3.1 Grundlegende Programmstruktur
• Subroutinen
SUBROUTINEsub_name[ ( [ par ][, par ]...] ) ] [Spezifikationsteil]
[Ausführungsteil]
END SUBROUTINEsub_name
– Extern als eigenständige Programmeinheit
– Intern als Unterprogramm• Einbindung mittels CONTAINS
11
Seminar Programmiersprachen
FORTRAN 21
3.1 Grundlegende Programmstruktur
• Beispiel: Interne Subroutine
PROGRAM hallo_welt
PUBLIC :: hallo
CONTAINS
SUBROUTINE hallo
PRINT * , 'Hallo Welt!'
END SUBROUTINE hallo
CALL hallo
END PROGRAM hallo_welt
Seminar Programmiersprachen
FORTRAN 22
3.1 Grundlegende Programmstruktur
• Funktionen
FUNCTION func_name( [ par ][, par ].. )
[Eingabepar.-Deklaration intent( in ) ][Ausgabepar.-Deklaration]
[sonstiger Spezifikationsteil] [Ausführungsteil]
END FUNCTION func_name
– Extern als eigenständige Einheiten– Intern in anderen Programmeinheiten (CONTAINS)
12
Seminar Programmiersprachen
FORTRAN 23
3.1 Grundlegende Programmstruktur
• Beispiel: Interne Funktion
PROGRAM funktioniert
PUBLIC :: hochdrei
CONTAINS
FUNCTION hochdrei( zahl )
REAL, INTENT( IN ) :: zahl
REAL :: ergebnis
ergebnis = zahl * zahl * zahl
END FUNCTION hochdrei
END PROGRAM funktioniert
Seminar Programmiersprachen
FORTRAN 24
3.1 Grundlegende Programmstruktur
• Module
MODULE mod_name
[Spezifikationsteil]
CONTAINS
[beliebige Typvereinbarungen,
Spezifikationen, Unterprogramme ]
END MODULE mod_name
– Immer extern, nicht ausführbar– Einbindung in anderen Programmeinheiten mittels USE
13
Seminar Programmiersprachen
FORTRAN 25
3.1 Grundlegende Programmstruktur
• Beispiel: Modul (1)
MODULE qsort_modul
PUBLIC :: qsort_sub , zufall
PRIVATE :: partition
CONTAINS
RECURSIVE SUBROUTINE qsort_sub ( array )
[…] END SUBROUTINE qsort_sub
SUBROUTINE partition ( array , i )
[…] END SUBROUTINE partition
SUBROUTINE zufall ( ein_array , laenge )
[…] END SUBROUTINE zufall
END MODULE qsort_modul
Seminar Programmiersprachen
FORTRAN 26
3.1 Grundlegende Programmstruktur
• Beispiel: Modul (2)
PROGRAMQuick_Sort
USE qsort_modul ! Einbindung des Moduls
[…] ! Spezifikationsteil
CALL zufall ( ein_array , laenge )
[…] ! Weitere Anweisungen
CALL qsort_sub ( ein_array )
END PROGRAMQuick_Sort
14
Seminar Programmiersprachen
FORTRAN 27
3.1 Grundlegende Programmstruktur
• blockdata -Programmeinheit
– Nicht ausführbar
– Initialisierung von Variablen gemeinsamer Speicherbereiche
BLOCKDATA[ name]
[…] ! Beliebige Deklarationen
END BLOCKDATA[ name]
Seminar Programmiersprachen
FORTRAN 28
3.1 Grundlegende Programmstruktur
• Modularisierung – Vorteile– Komplexe Probleme lassen sich aufteilen
– Leichter überschaubar
– Compiler können kleine Einheiten besser optimieren
– Wiederverwendbarkeit von Code
– Besseres Debuggen
• Es gibt umfangreiche vordefinierte Bibliotheken, die genutzt werden können
15
Seminar Programmiersprachen
FORTRAN 29
3.2 Typkonzept
• Fortran verwendet statische Typbindung
– Der Quellcode legt die Typen fest
– Typprüfung zur Compilezeit
Seminar Programmiersprachen
FORTRAN 30
3.2 Typkonzept
• streng typisiert bedeutet– Typ von Programmgegenständen ist festgelegt und kann zur Compilezeit bestimmt werden
– Typprüfung kann durchgeführt werden
– Keine Typfehler bleiben unentdeckt
• Fortran ist schwach typisiert– Mischung mit Eigenschaften typloser Sprachen
– Typen nicht disjunkt
16
Seminar Programmiersprachen
FORTRAN 31
3.2 Typkonzept
• Implizite Deklaration von Variablen
– Nicht alle Variablen müssen explizit deklariert werden
– Grundsätzliche Typkonvention
• Integer bei Anfangsbuchstaben i – n
• Real sonst
Seminar Programmiersprachen
FORTRAN 32
3.2 Typkonzept
• Implizite Deklaration von Variablen
– Mit IMPLICIT lassen sich Buchstabenbereiche festlegen, die die grundsätzliche Typkonvention ändern / erweitern
– BeispielIMPLICIT TYPE( student ) ( s), TYPE( dozent ) ( d)
! Alle Variablen mit s… sind vom Typ student,
! Alle Variablenmit d… sind vom Typ dozent.
17
Seminar Programmiersprachen
FORTRAN 33
3.2 Typkonzept
• Implizite Deklaration von Variablen
– Nachteile
• Fehleranfälligkeit
• Schlechtere Nachvollziehbarkeit
– Explizite Typdeklaration kann mit der Anweisung IMPLICIT NONE im Spezifikationsteil einer Programmeinheit erzwungen werden
Seminar Programmiersprachen
FORTRAN 34
3.2 Typkonzept
• Selbstdefinierte Datentypen
– Aus existierenden Typen können neue, komplexere Datentypen abgeleitet werden
– BeispielTYPE student
CHARACTER (LEN=20) :: name
INTEGER :: matr_nr
TYPE ( wohnort ) :: adresse
END TYPE student
18
Seminar Programmiersprachen
FORTRAN 35
3.2 Typkonzept
• Selbstdefinierte Datentypen
– Beispiel (Forts.)TYPE student , DIMENSION( 150) :: studenten
! Feld mit 150 Studenten
PRINT * , studenten ( 42)%matr_nr
! Gibt Matr.-Nr. von Student Nr. 42 aus
– Können PUBLIC und PRIVATE sein
– Die Reihenfolge der Strukturkomponenten legt i.d.R. keine Speicherfolge fest
Seminar Programmiersprachen
FORTRAN 36
3.3 Selbstdefinierte Ausdrücke
• Bestehen aus– Operanden selbstdefinierten und/oder vordefinierten Typs und
– selbstdefinierten und/oder erweiterten vordefinierten Operatoren
• Selbstdefinierte Operatoren müssen in einem Schnittstellenblock beschrieben werden
19
Seminar Programmiersprachen
FORTRAN 37
3.3 Selbstdefinierte Ausdrücke
• Beispiel: zweiwertiger Operator .abst.
INTERFACE OPERATOR (.abst.)
FUNCTION abstand ( a, e)
REAL, DIMENSION( 2), INTENT( IN ) :: a, e
END FUNCTION abstand
END INTERFACE
[…]
FUNCTION abstand ( a, e)
REAL, DIMENSION( 2), INTENT( IN ) :: a, e
abstand = SQRT(ABS( a( 1)– e( 1))**2 – ( a( 2)– e( 2))**2))
END FUNCTION abstand
Seminar Programmiersprachen
FORTRAN 38
3.3 Selbstdefinierte Ausdrücke
• Überladung
– Die Funktionalität eines vor- oder selbstdefiniertenOperators kann geändert bzw. erweitert werden
– Es liegen mind. 2 Operatorfunktionen vor
– Eigenschaften der Operanden bestimmen, welche Operatorfunktion (implizit) ausgeführt wird
20
Seminar Programmiersprachen
FORTRAN 39
3.4 Zeiger
• „Zeiger“ ist in Fortran kein eigenständiger Datentyp !
– Attribut POINTERkennzeichnet eine Variable als Zeiger
– Belegt unspezifische Speichereinheit– Ziele müssen ein TARGET-Attribut haben oder werden dynamisch erzeugt (ALLOCATE)
– Ist eine Zeiger-Variable einem Ziel zugeordnet, entspricht der Zugriff auf den Zeiger einem Zugriff auf das Ziel
Seminar Programmiersprachen
FORTRAN 40
3.4 Zeiger
• Zeigerzustände
– „undefiniert“• Nach Initialisierung des Zeigers(z.B. REAL, POINTER :: ein_zeiger )
– „zugeordnet“• Nach Zuordnung zu einem (anderen) Ziel(ALLOCATE oder =>)
– „nicht zugeordnet“• Nach Aufhebung der Zuordnung(NULLIFY oder DEALLOCATE)
21
Seminar Programmiersprachen
FORTRAN 41
3.4 Zeiger
• BeispieleCHARACTER (LEN=75), POINTER :: p1, p2ALLOCATE ( p1, p2)
[…]
DEALLOCATE(p1); NULLIFY( p2)
!------------------------------------------
REAL, DIMENSION( 1000 , 1000 ), TARGET :: A, BREAL, DIMENSION(:, :), POINTER :: Alt , Neu
Alt => A
Neu => B
DO
[…] ! Aus "Alt" berechne "Neu"END DO
Seminar Programmiersprachen
FORTRAN 42
3.4 Zeiger
• Der Zuordnungsstatus darf in Unterprogrammen geändert werden und bleibt beim Rücksprung bestehen
• Nicht möglich…– Zeiger auf Konstanten
– NIL-Zeiger(ein_zeiger => null() erst in Fortran 95)
– Zeigerfeld, dessen Elemente Zeiger sind
– Adressarithmetik
22
Seminar Programmiersprachen
FORTRAN 43
3.5 Felder
• Regelmäßige Anordnung von skalarenDatenelementen gleichen Typs
• Max. 7 Dimensionen → Zeilen, Spalten, Ebenen…
• Jede Dimension mit beliebig vielen Elementen
• Jedes Feldelement wird durch ein Index-Tripel identifiziert
Seminar Programmiersprachen
FORTRAN 44
3.5 Felder
• Indizierung der Feldelemente– Index-Tripel: (Zeile, Spalte, Ebene)
23
Seminar Programmiersprachen
FORTRAN 45
3.5 Felder
• Reihenfolge der Feldelemente
– Erst werden die Indizes der 1. Dimension durchlaufen
– Danach wird der Index der 2. Dimension um 1 erhöht, und wieder werden die Indizes der 1. Dimension durchlaufen
– Ist die 2. Dimension abgearbeitet, wird der Index der 3. Dimension um 1 erhöht
– …
– Meistens erfolgt so auch die Speicherung der Werte
Seminar Programmiersprachen
FORTRAN 46
3.5 Felder
• Feld mit expliziter Gestalt– Index-Grenzen genau festgelegt durch Konstanten, aber auch Variablen (→ automatisches Feld)
• Feld mit übernommener Gestalt– Übernimmt Gestalt vom übergebenen Parameterfeld
– Elemente-Anzahl je Dimension dadurch bestimmt
• Feld mit offener Gestalt (ALLOCATABLE)– Keine Index-Grenzen festgelegt
– Nicht initialisierbar– Speicherplatz-Zuweisung erst bei ALLOCATE
24
Seminar Programmiersprachen
FORTRAN 47
3.5 Felder
• Feld mit expliziter GestaltDIMENSION ( 55, 14: 22) :: exp_gest
DIMENSION ( -5 : n, 10, n) :: auto_feld
• Feld mit übernommener GestaltDIMENSION ( 1950 : 1989 , 2: 4) :: ein_feldCALL sub ( ein_feld )
SUBROUTINE sub ( par_feld )
REAL, DIMENSION ( 0:, :) :: par_feld
END SUBROUTINE sub
! par_feld übernimmt die Gestalt von ein_feld, ! die 1. Dimension hat Größe 40 (von 0 bis 39),
! die 2. Dimension hat Größe 3 (von 1 bis 3)
Seminar Programmiersprachen
FORTRAN 48
3.5 Felder
• Feld mit offener Gestalt (ALLOCATABLE)
REAL, ALLOCATABLE, DIMENSION(:) :: a
REAL, ALLOCATABLE, DIMENSION(:, :) :: b
REAL, ALLOCATABLE, DIMENSION(:, :, :) :: c
ALLOCATE(a( -n : n)) ! Erst jetzt wird
ALLOCATE(b( n, 0: 2*n )) ! Speicherplatz
ALLOCATE(c( n, n: 2*n , n)) ! angefordert
25
Seminar Programmiersprachen
FORTRAN 49
3.5 Felder
• Arten von Feldern / Speicherverwaltung
– Automatisches Feld• Wird beim Aufruf eines Unterprogramms erzeugt
• Beim Rücksprung in das aufrufende Programm wird es wieder gelöscht und der Speicherplatz freigegeben
– Beispiel für Verwendung• Benötigt wird ein temporäres Feld, dessen Größe von anderen Variablen abhängt
Seminar Programmiersprachen
FORTRAN 50
3.5 Felder
• Arten von Feldern / Speicherverwaltung
– Dynamisches Feld• Wird im Spezifikationsteil einer Programmeinheit deklariert (ALLOCATABLE), zunächst ohne Index-Grenzen
• Existiert physisch nicht, bis es initialisiert, d.h. Speicher angefordert, wird
• „Überlebt“ den Rücksprung, der Zustand ist dann aber „undefiniert“ (Abhilfe: SAVE)
• Explizites Löschen mittels DEALLOCATE
26
Seminar Programmiersprachen
FORTRAN 51
3.5 Felder
• Arten von Feldern / Speicherverwaltung
– Feldzeiger• Wird im Spezifikationsteil einer Programmeinheit deklariert (POINTER), zunächst ohne Index-Grenzen
• Existiert physisch nicht, bis es initialisiert, d.h. Speicher angefordert, wird (ALLOCATE)
• Explizites Löschen mittels DEALLOCATE
Seminar Programmiersprachen
FORTRAN 52
3.5 Felder
• Beispiele: Arten von Feldern
REAL, DIMENSION ( 1: 15, 5, 10) :: a
! Feld mit expliziter Gestalt
REAL, DIMENSION (:, 5:) :: b
! Feld mit übernommener Gestalt
REAL, ALLOCATABLE, DIMENSION (:, :) :: c
! Dynamisches Feld
REAL, POINTER, DIMENSION (:) :: d
! Feldzeiger
27
Seminar Programmiersprachen
FORTRAN 53
3.5 Felder
• Vergleich Zeiger ↔ Felder
– Zeiger und automatische/dynamische Felder ähneln sich und leisten in etwa das gleiche
– Aber Felder…• sind weniger fehleranfällig (insb. in Bezug auf Speicherverwaltung)– „Dangling Pointers“
– Garbage Collection nicht bei allen Compilern
• liefern bessere Performance– mehrere Zeiger können auf dasselbe Ziel zeigen
(→ überflüssige Arbeit für den Compiler)
Seminar Programmiersprachen
FORTRAN 63
3.6 Ein- und Ausgabe
• Grundlage des Dateisystems ist der Datensatz
• Arten von Datensätzen– Formatgebundene (mit FORMAT-Attribut)
– Formatfreie (interne Darstellung)– Dateiendesatz (ENDFILE)
• Datei = Folge zusammenhängender Datensätze– Auf externen Medien abgelegt
– Intern als Speicherbereich
28
Seminar Programmiersprachen
FORTRAN 64
3.6 Ein- und Ausgabe
• Sequenzielle Verarbeitung– Reihenfolge der Datensätze relevant
– Der n-te Datensatz kann erst nach dem Lesen der (n-1) vorherigen Datensätze gelesen werden
• Direkter Zugriff– Reihenfolge-unabhängig
– Adresse eines Datensatzes
= Produkt aus Datensatzlänge und Datensatznummer
– Datensatznummer wird vom Medium verwaltet
Seminar Programmiersprachen
FORTRAN 65
3.6 Ein- und Ausgabe
• Ein- und Ausgabeanweisungen– Datenübertragung
• READ
• WRITE• PRINT
– Dateistatus• OPEN
• CLOSE• INQUIRE
– Positionierung (bei sequenziellen Dateien)• BACKSPACE
• REWIND
• ENDFILE
29
Seminar Programmiersprachen
FORTRAN 66
3.6 Ein- und Ausgabe
• Beispiel
OPEN ( 11, FILE=’ x’ , ACCESS=’DIRECT’ ,
FORM=’FORMATTED’, RECL=80)
– Öffnet die Datei 'x' formatgebunden mit Direktzugriff und einer Datensatzlänge von 80 Zeichen und verbindet sie mit der E/A-Einheit 11 (z.B. Monitor)
– Weitere sinnvolle Parameter:
• Sprungmarken beim Auftreten von FehlernERR=20
• Springt zu Anweisung 20, die den Fehler abfängt o.ä.
Seminar Programmiersprachen
FORTRAN 67
3.6 Ein- und Ausgabe
• Formatgebundene Datensätze werden beim Einlesen in eine interne Binärdarstellung konvertiert und umgekehrt– Vorteile
• Gut lesbar
• Portabilität
– Nachteile
• Kostet Zeit und Platz
• Ungenauer
30
Seminar Programmiersprachen
FORTRAN 68
3.6 Ein- und Ausgabe
• Formatfreie Datensätze belieben in interner Binärdarstellung des ausführenden Rechners– Vorteile
• Zeit
• Genauigkeit
• Speicherplatz
– Nachteile
• Portabilität
• Lesbarkeit
• Fazit: Dienen Daten nur der Computer-verarbeitung, ist formatfreie Art vorzuziehen
Seminar Programmiersprachen
FORTRAN 69
3.6 Ein- und Ausgabe
• FORMAT-Anweisung
– Wird in formatgebundenen E/A-Anweisungen benutzt
– Es lassen sich für alle Typen die gewünschten Formate konfigurieren
– Formatdeklarationen können mit Anweisungsmarken versehen werden
→ Wiederverwendbarkeit
– Formatdeklarationen dürfen an jeder beliebigen Stelle im Quellcode stehen
31
Seminar Programmiersprachen
FORTRAN 70
3.6 Ein- und Ausgabe
• Beispiel: FORMAT-Anweisung…
DATA i , j , k, l , me / 1, 2, 3, 4, 5/
WRITE ( 12, FMT=22) i , j , k, l , me
WRITE ( 12, FMT=11)
11 FORMAT ( 4( '------+' ), '------' )
5 READ ( * , * , END=90) i , j , k, l , me
WRITE ( 12, FMT=22) i , j , k, l , me
22 FORMAT ( 5( ' ' , I3 , : , ' |' ))
GOTO 5
90 CONTINUE
WRITE ( 12, FMT=11)
Seminar Programmiersprachen
FORTRAN 71
3.6 Ein- und Ausgabe
• …erzeugt die Tabelle:
1 | 2 | 3 | 4 | 5
------+------+------+------+------
22 | 549 | 9 | 46 | 221
142 | 5 | 66 | 8 | 519
23 | 31 | 0 | 938 | 66
------+------+------+------+------
32
Seminar Programmiersprachen
FORTRAN 72
3.6 Ein- und Ausgabe
• Weitere FORMAT-Spezifikationen• A-Format → Zeichendaten• B-Format → Binäre Daten• D-, E-, F-Format
→ Reelle, doppelt genaue, komplexe Zahlen• G-Format → Daten beliebigen vordefinierten Datentyps• H-Format → Zeichenfolgen• I -Format → Ganzzahlige Daten• L-Format → Logische Daten• O-Format → Oktale Daten• S-, SP-, SS-Format → Vorzeichensteuerung• T-, X-Format → Tabulatoren• Z-Format → Hexadezimale Daten
Seminar Programmiersprachen
FORTRAN 73
Gliederung
1 Einführung
2 Historische Entwicklung
3 Ausgewählte Features von Fortran
4 Anwendungsgebiete
5 Quick Sort
6 Zusammenfassung und Ausblick
33
Seminar Programmiersprachen
FORTRAN 74
4 Anwendungsgebiete
4.1 Typische Beispiele
4.2 Parallele Programmierung
Seminar Programmiersprachen
FORTRAN 75
4 Anwendungsgebiete
• Einsatz von Fortran hauptsächlich in analytischen und numerischen Berechnungen in Naturwissenschaften und im Ingenieurwesen
• Vorteile– Hohe Ausführungsgeschwindigkeit
– Gute Lesbarkeit
– Riesige Menge an bereits implementierten Lösungen
34
Seminar Programmiersprachen
FORTRAN 76
4.1 Typische Beispiele
• Deformationsberechnungen von Automobilteilen
• Strömungssimulation von Flugzeugteilen
• Staudammberechnungen
• Berechnung elektromagnetischer Felder
• umfangreiche Wetterprognosen
• …
Seminar Programmiersprachen
FORTRAN 77
4.2 Parallele Programmierung
• Ansätze
– SIMD (Single Instruction Multiple Data)
• eine (einzige) Operation wird auf mehrere Datenbereiche angewendet
→ Datenparallelisierung
– MIMD (Multiple Instruction Multiple Data)
• simultan operieren unterschiedliche Funktionen oder Subroutinen auf verschiedenen Datenbereichen
35
Seminar Programmiersprachen
FORTRAN 78
4.2 Parallele Programmierung
• Ist Fortran dafür geeignet ?
– Die hohe Effizienz der Sprache spricht dafür
– Fortran 90 unterstützt in erster Linie SIMD-Features
• Arrays
• Intrinsische Funktionen
• Broadcasts
– Fortran 95 bietet mit forall und PUREmehr Features des MIMD-Modells
Seminar Programmiersprachen
FORTRAN 79
4.2 Parallele Programmierung
• Fortran-Erweiterungen
– High Performance Fortran (HPF)• Gezielte Implementierung von MIMD-Features
– OpenMP (Open Multi Processing)• Sammlung von Compiler-Direktiven, Bibliotheksroutinen und Umgebungsvariablen
• Parallelisierung durch gemeinsame Speichernutzung• Fork-Join-Prinzip
– Problem in parallelen Bereichen auf mehrere CPUs verteilt
– Einzelergebnisse an der nächsten seriellen Stelle wieder zu einem gemeinsamen Ergebnis zusammengeführt
36
Seminar Programmiersprachen
FORTRAN 80
4.2 Parallele Programmierung
• OpenMP – Fork-Join-Prinzip
Seminar Programmiersprachen
FORTRAN 81
Gliederung
1 Einführung
2 Historische Entwicklung
3 Ausgewählte Features von Fortran
4 Anwendungsgebiete
5 Quick Sort
6 Zusammenfassung und Ausblick
37
Seminar Programmiersprachen
FORTRAN 82
5 Quick Sort
• Grundlegende Struktur
module qsort_modul
[…]
end module qsort_modul
program Quick_Sort
[…]
end program Quick_Sort
Seminar Programmiersprachen
FORTRAN 83
5 Quick Sort
• Das Modul qsort_modul
– Sichtbare Zufallsgenerator-Subroutine (zufall )• Füllt das übergebene Array mit Pseudozufallszahlen
– Interne Sortier-Subroutine (partition )• Der eigentliche Sortiervorgang• Weiterbewegen der Zeiger• Vertauschen der Elemente, falls erforderlich
– Sichtbare QuickSort-Subroutine (qsort_sub )• Ruft rekursiv die Sortier-Subroutine auf alle Teilbereiche des übergebenen Arrays auf, solange deren Länge > 0
38
Seminar Programmiersprachen
FORTRAN 84
5 Quick Sort
• Das Hauptprogramm Quick_Sort
– Einbindung des Moduls mittels USE
– Spezifikationsteil mit allen zu verwendenden Variablen
– Starten des Zufallsgenerators
– Zeitmessung vor Ausführung
– Sortieren
– Zeitmessung nach Ausführung
– Ausgabe auf dem Bildschirm
Seminar Programmiersprachen
FORTRAN 85
0
5
10
15
20
25
30
35
40
100 1.000 10.000 20.000 50.000 100.000 250.000 500.000 1.000.000 2.000.000 5.000.000
Array-Größe
Ausführungszeit [Sek]
Fortran 90Java
5 Quick Sort
Performance im Vergleich zu Java
Intel Celeron II, 433 MHz, 256 MB RAM
39
Seminar Programmiersprachen
FORTRAN 86
5 Quick Sort
• Ergebnis
– Java ist knapp 50% schneller als Fortran 90
– Java-Quellcode ist nur ca. 20 Zeilen lang,
Fortran-Quellcode dagegen ca. 70 Zeilen
Seminar Programmiersprachen
FORTRAN 87
Gliederung
1 Einführung
2 Historische Entwicklung
3 Ausgewählte Features von Fortran
4 Anwendungsgebiete
5 Quick Sort
6 Zusammenfassung und Ausblick
40
Seminar Programmiersprachen
FORTRAN 88
6 Fazit und Ausblick
• Fortran ist die älteste Hochsprache, steht aber zu unrecht in dem Ruf veraltet zu sein
• Viele gut getestete Compiler
• Umfangreiche, unentbehrliche Bibliotheken
• Abwärtskompatibilität
• Großer Nutzerkreis
• Erweiterbarkeit in Richtung Objektorientierung und Paralleler Programmierung
Seminar Programmiersprachen
Feddich ☺☺☺☺
…Fragen ?