Top Banner
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
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

Mar 06, 2018

Download

Documents

dangnhi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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 ?