MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I...

40
Computergrundlagen Programmieren – Fortran77/90 Maria Fyta Institut für Computerphysik Universität Stuttgart Wintersemester 2012/13

Transcript of MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I...

Page 1: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

ComputergrundlagenProgrammieren – Fortran77/90

Maria Fyta

Institut für ComputerphysikUniversität Stuttgart

Wintersemester 2012/13

Page 2: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Was sind Programme?I In dieser Vorlesung: Python, C, Fortran, LATEX, bashI Sind das alle Typen von Programmiersprachen?

Wie kann man Programmiersprachen klassifizieren?

I Kein Prozessor versteht Python-, C-, Fortran- oderShell-Befehle

I Was muss alles passieren, um ein Programm laufen zu lassen?

Wie wird aus unserem Programm etwas, dass derProzessor ausführen kann?

Page 3: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Was soll das Program leisten?Zum Beispiel

I eine Liste sortierenI Echtzeitanalyse von MesswertenI Computersimulation eines Moleküls

Top-down AnalyseI schrittweises Zerlegen in TeilproblemeI gibt Einsicht in die KomplexitätI Welche Teile gibt es schon? Bibliotheken, ...

Wer kann mir helfen?I Wer hat Erfahrung mit ähnlichen Problemen?

AufwandsabschätzungI Lohnt sich das Programmieren überhaupt?

Page 4: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Methodenwahl

Wahl der Rechenstrukturen/AlgorithmenI aufteilen in möglichst kleine sinnvolle EinheitenI möglichst allgemein formulieren → wiederverwendbarI welche bekannten Algorithmen kann ich benutzen?

Wahl von Datentypen und -strukturenI Ganz-, Fließkommazahlen, Strings, ...I Listen, Tupel, Wörterbücher, KlassenI Datenbanken

Wahl der ProgrammierspracheI Skriptsprachen für Automatisierung und kleine AufgabenI Compilersprachen für sehr rechenaufwändige und oft

wiederkehrende Aufgaben

Page 5: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Implementation

ProgrammierenI modular programmieren: Teilprobleme in getrennten

Funktionen, Modulen, KlassenI Probleme von außen nach innen bearbeiten (Top–Down)I Kommentare nicht für „Reservecode“ missbrauchen

DokumentierenI schon während des ProgrammierensI Kommentare im Code und Anleitung/Hilfe

Testen (Benchmarking)I möglichst einzelne Teile getrennt testenI so früh wie möglichI Tests müssen schnell ausführbar sein

Page 6: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Testen des ProgrammsFunktion des Programms

I generische Fälle prüfen, etwa ZufallszahlenI Extremwerte: leere Eingabe, 0, Grundzustand, ...I Beispiele mit bekannter Lösung (benchmarking)I z.B. harmonischer Oszillator, ideales Gas, ...I bekannte implizite EigenschaftenI z.B. Energieerhaltung, ...

FehlerbehandlungI alle Fehlermeldungen sollten in Tests ausgelöst werdenI Verhalten bei nicht erlaubten Eingaben überprüfen

EffizienzI Laufzeit des Programms bei generischer EingabeI Fest- und Hauptspeicherbedarf

Page 7: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Programmiersprachen

Imperative SprachenBeispiele: Python, C, Fortran, Shell, BASIC...

I Die meisten Sprachen sind imperativI Programme erklären, wie ein Problem gelöst werden sollI Umsetzung des von Neumann-Rechners: Befehle und SchleifenI prozedural heißen Sprachen, die Prozeduren kennen

Beispiele: alle außer einfachem BASIC

Deklarative SprachenI Keine von Neumann-artigen Befehle, kein innerer ZustandI Rekursion anstatt SchleifenI funktional, basierend auf Funktion im mathematischen Sinn

Beispiele: Haskell, Erlang, Scheme...I logisch, basierend auf Fakten, Axiomen und logischer Ableitung

Beispiele: Prolog

Page 8: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Objektorientierte Sprachen

Dozent

-vorlesungen: Liste von Vorlesungen+halteVorlesung(vorlesung:Vorlesung)

+haltePrüfung(vorlesung:Vorlesung): Note

+getTitel(): String

Person

+name: String+getName(): String

+getTitel(): String

Student

+kurs: Kurs

+vorlesungen: Liste von Vorlesungen+hoertVorlesung(vorlesung:Vorlesung)

+machePrüfung(vorlesung:Vorlesung)

+getTitel(): String

I Objektorientierung ist ein sprachunabhängigesProgrammiermodell

I Ziel ist die bessere Wartbarkeit und Austauschbarkeit vonSoftware durch starke Isolation von Teilproblemen

I Speziell darauf ausgelegt sind z.B. C++, Java, Python,...

Page 9: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

TerminologieI Klasse: beschreibt Eigenschaften und Methoden von Objekten

Beispiel: Klassen sind z.B. Dozent, Student, PersonI Objekt: eine Instanz einer Klasse. Ein Objekt hat stets eine

Klasse, aber es kann viele Instanzen gebenBeispiel: Axel Arnold ist ein Dozent, Maria Fyta auch

I Eigenschaften: Datenelemente von ObjektenBeispiel: Dozent hat Name, Titel und zu haltende Vorlesungen

I Methoden: Funktionen einer KlasseBeispiel: Personen können ihren Namen sagen

I Datenkapselung: Eigenschaften werden nur durch Funktionender Klasse verändertBeispiel: der Name einer Person kann nicht geändert werden

I Vererbung: Klassen können von anderen abgeleitet werden,erben dadurch deren Eigenschaften und FunktionenBeispiel: Jede Person hat einen Namen

Page 10: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Interpreter- und CompilersprachenPython-Skript

Python-Interpreter

Ausgabe

interpretiert

produziert

Ausgabe

Binärprogramm

C-Compiler+Linker

C-Quellcode

übersetzt

erzeugt

produziert

InterpretersprachenI Z.B. Python, Java, C#, Basic, PHP, ShellsprachenI Das Programm wird vom Interpreter gelesen und ausgeführtI Es wird nie in Maschinencode für den Prozessor übersetztI Ausnahme: Just-in-Time (JIT) Compiler

Page 11: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Interpreter- und CompilersprachenPython-Skript

Python-Interpreter

Ausgabe

interpretiert

produziert

Ausgabe

Binärprogramm

C-Compiler+Linker

C-Quellcode

übersetzt

erzeugt

produziert

CompilersprachenI Z.B. C/C++, Fortran, Pascal/DelphiI Compiler übersetzt in maschinenlesbaren CodeI Nicht portabel, erschwerte Fehlersuche, deutlich schnellerI Interpreter selbst müssen compiliert werden

Page 12: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Vom Sourcecode zum Programm

programm.c

Präprozessor

Parser

Zwischencode-Generator

Optimierer

Code-Generator

Assembler

Objekt-Datei

Linker

Binärprogramm

Compiler

I Ein Programm durchläuft viele Schritte bis zur fertigenausführbaren Datei

I Präprozessor, Compiler, Assembler und Linkersind meist separate Programme

I meist mehrere Objektdateien aus verschiedenenQuelltextdateien

Page 13: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Vom Sourcecode zum Programm

programm.c

Präprozessor

Parser

Zwischencode-Generator

Optimierer

Code-Generator

Assembler

Objekt-Datei

Linker

Binärprogramm

Compiler

PräprozessorI Im Prinzip sprachunabhängig, rein textbasiertI Bindet weitere Quelltextdateien einI Erlaubt den Einsatz von Makros (Ersetzungen)

Beispiel: TEST(...) wird überall durch if (...) ersetzt

Page 14: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Der CompilerI Parser übersetzt den Quellcode in einen Syntaxbaum

=

a +

×

int 3 c

×

int 2 b

a = 2 ∗ b + 3 ∗ c

I Zwischencode-Generator erzeugt daraus Pseudocode, etwa:

r1 = b r2 = r1× 2 r3 = c r4 = r3× 3 r5 = r2+ r4 a = r5

I Optimierer versucht, diesen zu verbessern, z.B. durchI ProzessorregisterzuweisungI Einfügen kurzer Funktionen, Entrollen von SchleifenI Suche nach gemeinsamen Termen, ...

I Code-Generator erzeugt Assembler aus dem Zwischencode

Page 15: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Der Assembler

programm.c

Präprozessor

Parser

Zwischencode-Generator

Optimierer

Code-Generator

Assembler

Objekt-Datei

Linker

Binärprogramm

Compiler

obj1.o:... call 0000Defined:Undefined: blupp

obj2.o:...Defined: bluppUndefined:

Der Assembler erzeugt eine Objektdatei mitI MaschinencodeI den Speicherpositionen von globalen Variablen und FunktionenI Stellen, an denen Stellen Information über solche Positionen

aus andere Objektdateien benötigt wird

Page 16: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Der Linker

programm.c

Präprozessor

Parser

Zwischencode-Generator

Optimierer

Code-Generator

Assembler

Objekt-Datei

Linker

Binärprogramm

Compiler

obj1.o:... call 0000Defined:Undefined: blupp

obj2.o:...Defined: bluppUndefined:

I Verbindet mehrere solcher Objektdateien zu einer ausführbarenDatei (Binary) oder einer Bibliothek

I Bibliotheken sind Sammlungen von ObjektdateienI Der Linker verbindet Zugriffe zwischen ObjektdateienI Nur wenn alle Zugriffe aufgelöst wurden, entsteht ein Binary

Page 17: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Dynamisches Linken

programm.c

Präprozessor

Parser

Zwischencode-Generator

Optimierer

Code-Generator

Assembler

Objekt-Datei

Linker

Binärprogramm

Compiler

obj1.o:... call 0000Defined:Undefined: blupp

obj2.o:...Defined: bluppUndefined:

I Beim dynamischen Linken wird das Linken gegen dieBibliotheken erst beim Starten des Programms erledigt.

I Dadurch können Teile des Programms geupdated werdenI Und mehrfach benutzte Bibliotheken werden nur einmal

geladenI Erfordert spezielle dynamische Bibliotheken (.so, .dylib oder

.dll)

Page 18: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Programmiersprache Fortran (77/90)

Literaturempfehlung:Vorlesungsskript von Heidrun Kolinsky zu FORTRAN 90/95:[www.rz.uni-bayreuth.delehrefortran90vorlesungindex.html]G. Schmitt (1996): Fortran–90–Kurs technisch orientiert, R. OldenbourgVerlag, MünchenW. Brainerd, C. Goldberg and J. Adams (1996): Programme’s Guide toFortran 90, Springer–Verlag M. Kallweit & F. Kindermann, ’CrashkursFortran’

Page 19: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Fortran (FORmula TRANslation)

GeschichteI die erste jemals tatsächlich realisierte höhere

Programmiersprache (1953: J.W. Backus – IBM)I Fortran ist eine prozedurale und in ihrer neuesten Version

zusätzlich eine objektorientierte ProgrammierspracheI Fortran wird insbesondere für numerische Berechnungen

eingesetztI mehrmals erweitert (FORTRAN I, FORTRAN II, FORTRAN

IV, FORTRAN-66, FORTRAN-77, Fortran 90, Fortran 95,Fortran 2000, Fortran 2003, Fortran 2008 und zuletzt Fortran2010)

I zahlreiche Sprachelemente wurden aus später entstandenenProgrammiersprachen übernommen

I verschiedene Varianten; darunter HPF (high performanceFortran)

Page 20: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

EigenschaftenI für numerische Berechnungen vorgesehen und optimiert;

umfangreiche BibliothekenI restriktiver als C und kann leichter optimiert werdenI Potenz-Operator ** (in vielen Hochsprachen nicht vorhanden)I Fortran90: Vektor- udn Matrix-Operationen wurden

standardisiertI Compiler unterscheidet nicht zwischen Groß- und

Kleinschreibung (case insensitive")I Ab Fortran90 ist die dynamische Speicherverwaltung standard

CompilerI Kommerzielle: IBM SUN, HP, Intel, Absoft, PGI, NAGI Freie: GNU Fortran, OpenWatcomI Transcompiler(f2c): Übersetcung von Fortran77 in C (NAG

benutzt als Zwischensprache C)I ftnchek Programmierwerkzeug für eine separate Prüfung der

Übereinstimmung von Argumentlisten

Page 21: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

NamensyntaxI Keine Schlüsselwörter (z.B. program, integer, real, do, if, else,

...) dürfen verwendet werden.I Ein Name darf in Fortran bis zu 31 Zeichen lang sein und muss

mit einem Buchstaben beginnen.I Für die auf das erste Zeichen folgenden Zeichen dürfen alle

alphanumerischen Zeichen sowie Unterstriche verwendetwerden.

ProgrammstrukturProgrammkopf: program <Programmname>Deklarationsteil: besteht aus einer Reihe von Konstanten- undVariablenvereinbarungen.Anweisungsteil: eine strikte Aneinanderreihung vonauszuführenden Befehlen (kann mit Hilfe von Flussdiagrammenmodelliert werden); Zeilennummern können auf AnweisungenhinweisenProgrammende:end program <Programmname>

Page 22: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Program Beispiele

Hello Worldprogram hellowrite (* ,*) ’Hello World !’end program helloUmrechnungstabelle: Fahrenheit nach Celsiusprogram celsius_tableimplicit nonereal :: Fahrenheit , Celsiuswrite (* ,*) ’ Fahrenheit Celsius ’write (* ,*) ’ ————————–’do Fahrenheit = 30.0 , 220.0 , 10.0Celsius = (5.0/9.0) * ( Fahrenheit -32.0)write (* ,*) Fahrenheit , Celsiusend doend program celsius_table

Page 23: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

VariablendeklarationI Variablen: standardmäßig über ihren Anfangsbuchstaben

deklariertBezeichner die mit einem Charakter von i-n beginnen stehenfür eine INTEGER-Variable oder einenINTEGER-Funktionswertalle übrigen Bezeichner stehen für REAL-Werte

I Änderung der Vordefinition von Variablen:implicit <Variablentyp> <Variablenbereich>

I BeispieleI IMPLICIT NONE: keine implizite Deklaration. Durch diesen

Befehl müssen alle benutzten Variablen explizit definiertwerden

I IMPLIZIT CHARACTER(LEN=20) (H-I,L-N): allenichtdeklarierte Bezeichnet, deren erster Buchstabe H-I oderL-N ist, bezeichnet ein Zeichen

I IMPLICIT COMPLEX (x,c,z) : alle nichtdeklariertenBezeichner, deren erster Buchstabe x oder c oder z ist,bezeichnen komplexe Zahlen

I IMPLIZIT REAL*8 (A-F): alle nichtdeklarierten Bezeichner,deren erster Buchstabe A-F ist, bezeichnen reelle Zahlen

Page 24: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

DeklarationenVariablentypen und-wertebereicheDatentyp Erweiter. Erläuterung Wertebereichlogicalinteger ganze Zahlen (-27+1) - (27+1)

ganze Zahlen (-215+1) - (215+1)(Standard) ganze Zahlen (-231+1) - (231+1)

real *4 (Standard) reelle Zahlen -1038.53-1038.53

*8 reelle Zahlen -10308.25-10308.25

character (Standard) einzelnes Zeichen alle möglichen Zeichen(LEN=x) Zeichenkette Länge x alle möglichen Zeichen

Quelle: M. Kallweit & F. Kindermann, ’Crashkurs Fortran’, Uni. Würzburg

Variablenvereinbarung:<Variablentyp> :: <Variable>

Konstantenvereinbarung:parameter (<Variable>=<Variablenwert>,...)

Page 25: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Eingabe/AusgabeOpen/Close

open (unit,file,status,action,iostat)

I unit=<unitnumber>: eine nichtnegative integer-ZahlI file=<Dateiname>: Dateiname in Form einer Zeichenkette

mit den entsprechenden Anführungs und SchlusszeichenI status=<Schlüsselwort>: Zustand der Datei.

Optionen:’old’, ’new’, ’unknown’,’replace’,’scratch’I action=<Aktionsangabe>: was mit der Datei geschehen

soll. Optionen: ’read’, ’write’ ’readwrite’I iostat=<Name einer Variablen vom Datentypinteger>) : wie erfolgreich das Betriebssystem, eineVerknüpfung zwischen der unit number und derangegebenenen Datei auf der Festplatte herstellen konnte(reibungslos → Rückgabewert=0)

Page 26: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Eingabe/Ausgabe

Open/Close

close (unit=<unit number> oder close <unit number>

Delete option:close (unit=<unit number>,status=’delete’

I Standard input: 5 und 100I Standard output: 6 und 101I Standard error: 0 und 102

Page 27: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Read/write/close

I read(unit,file,error,iostat,slist)I write(unit,format,iostat)I close(unit)

slist:iostat, status, err, form, blank,...

Falls keine ’unit’ für read gegeben, erzeugt z.B. write(20,*) einefort20.dat Datei.

I Option endBeispiel: read(10,*,end=100) → read am Ende derDatei wird die Anweisung mit Zeilennummer 100 in derQuelldatei durchgeführt (z.B. 100 print*,’end of file’).

Printprint*, ’Text’, Variable[Ausgabe nur auf dem Bildschirm.]

Page 28: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Lesen und schreibenread(*,*)<Variable> Liest den vom Benutzer einzugebenden Wert

der <Variable> von der Konsole einwrite(*,*)<Variable> Schreibt den Wert der <Variable>

unformatiert auf die Konsolewrite(*,*)’<Text>’ Schreibt den eingegebenen

<Text> auf die Konsolewrite(*,’(f6.3)’)<Variable> Schreibt den Wert der <Variable>

im Format f6.3 auf die Konsole

Formatierungsbefehle

i4 : Integerzahl mit maximal 4 Stellena7 : Character mit maximal 7 Stellen

f6.3 : Realzahl mit insgesamt 6 Stellen (inkl. Trennzeichen) und 3Nachkommastellen

3x : 3 Leerzeichen

Page 29: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

WertzuweisungenBefehl:<Variable>=<Variablenwert>Der <Variablenwert> muss nicht unbedingt eine festeZahl/Zeichenkette sein. Er kann sich genauso aus der Verknüpfungmeherer anderer Variablen zusammensetzen.Beispiele:

x=3x=y*exp(z)x=y+z+abs(c)a=b+sqrt(c)a=max(b,c)d=mod(3,2)*sign(-1)...

Page 30: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Kontrollstrukturen

Schleifen

do-Schleifen realisieren die Wiederholung von AnweisungenI Befehl:do <Laufindex>=<von>,<bis>(,<Schrittweite>)<Anweisungsblock>enddoStandardmässig ist als Schrittweite 1 eingestellt.

I Beispiel:do i=2,5write(*,*) i,i**i,log(i)enddo

Page 31: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Kontrollstrukturen

Verzweigungen

Sollen Anweisungen nur unter einer Bestimmten Bedingungausgeführt werden, so können diese Anweisungen in einif-Statement geschrieben werden.

I Befehl1:if(<Bedingung1>)then(elseif(<Bedingung2>)then )else <Anweisungsblock3>)endif

I Befehl2:alternativ: if(<Bedingung>)<Anweisung>

Page 32: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Verzweigung - Beispiele

I if(i.ge.0)thenparam=1elseparam=2endifWenn i größer als 0 ist, dann nimmt param1 die Zahl 1

I j=1; sum=0dosumme=summe+j ; j=j+1if(j.gt.i)exitenddo

Page 33: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Unterprogramme[Unterprogramme müssen deklariert werden]

SUBROUTINEI Programmabschnitte können definiert werden, die in einem

Programm mehrmals in gleicher Form verwendet werdenkönnen.

I Programmabschnitte können definiert werden, die in einemProgramm mehrmals in gleicher Form verwendet werdenkönnen

I die Übergabe von Variablen ist möglichI besitzt jedoch keinen Rückgabewert

FUNCTIONI dient zur Berechnung eines WertesI an eine Funktion können mehrere Werte übergegeben werden,

die zur Bestimmung des Funktionswerts benötigt werden.I alle eingegebene Variablen müssen deklariert werden

Page 34: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Unterprogramme - Befehle

SUBROUTINEI subroutine<Subroutinenname>((<Variable1>,...))<Variablendeklaration><Programmabschnitt>end subroutine <Subroutinenname>

FUNCTIONI <Variablentyp> function<Funktionsname>((<Variable1>,...))<Variablendeklaration><Werteberechnung>end function <Funktionsname>

Page 35: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

SUBROUTINE: Beispielsubroutine sum1(a,b)integer a,bb=b+aprint*,a,bend subroutine sum1

FUNCTION: Beispielinteger function sum1(a,b)integer :: a,bsum1=a+bend function sum1

Page 36: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Aufruf von SUBROUTINE und FUNCTION!sum.f90!Performs summations and saves input and summation in a fileprogram summationimplicit noneinteger :: sum, a, sum1print*, ’This program performs summations. Enter 0 to stop.’open(unit=10, file=”sum.dat")sum = 0doprint*, "Value:"read*, aif (a == 0) thenexitelsecall sum1(a,sum) !<== subroutine callsum=sum1(sum,a) ! <== function callend ifwrite(10,*) aend doprint*, ”Sum =", sumwrite(10,*) ”Sum =", sumclose(10)end program summation

Page 37: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Sonstige AnweisungenI call system ((<Variable1>,...)) : durchführt

einen Befehl des BetriebsystemsI COMMON block (Fortran77), Module(Fortran90): Informationen zwischen einzelnenProgrammeinheiten (Hauptprogramm und Unterprogrammen)teilen und austauschen

I Beispiel: πmodule kreiszahlimplicit nonesavereal , parameter :: pi = 3.141593end module kreiszahlsubroutine kreisumfang (r,u)use kreiszahlusw...

Page 38: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Sonstige AnweisungenI Do while: Anweisungsblock ausgeführt wenn logischer

Ausdruck den Wert .true. aufweist ; dann erneut geprüftdo while (< logischer Ausdruck >)Anweisungsblockend doprogram do_whileimplicit noneinteger :: i = 1, n = 1do while (write (* ,*) i, n n = n + ii = i + 1end doend program do_while

I Go to (Fortran77), cycle (Fortran90)realisiert bedingungsabhängige Sprünge innerhalb desAnweisungsteils einer Programmeinheit

Page 39: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Sonstige AnweisungenI ALLOCATABLE/ALLOCATE/DEALLOCATE: dynamische

Speicherzuweisung

MODULE data_arrayINTEGER nREAL, DIMENSION(:,:,:), ALLOCATABLE :: dataEND MODULEPROGRAM mainUSE data_arrayREAD (input, *) nALLOCATE(data(n, 2*n, 3*n), STAT=status):DEALLOCATE (data)

I ...und vieles mehr...

Page 40: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?

Frohe Weinachtenund

einen guten Rutsch!!!