Transcript
Page 1: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 2: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 3: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 4: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 5: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 6: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 7: FORTRAN - wi1.uni-  · PDF file3 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

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 !

Page 8: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 9: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 10: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 11: FORTRAN - wi1.uni-  · PDF file3 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

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)

Page 12: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 13: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 14: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 15: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 16: FORTRAN - wi1.uni-  · PDF file3 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

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.

Page 17: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 18: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 19: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 20: FORTRAN - wi1.uni-  · PDF file3 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

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)

Page 21: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 22: FORTRAN - wi1.uni-  · PDF file3 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

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)

Page 23: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 24: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 25: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 26: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 27: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 28: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 29: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 30: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 31: FORTRAN - wi1.uni-  · PDF file3 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

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

------+------+------+------+------

Page 32: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 33: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 34: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 35: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 36: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 37: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 38: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 39: FORTRAN - wi1.uni-  · PDF file3 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

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

Page 40: FORTRAN - wi1.uni-  · PDF file3 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

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 ?


Top Related