mariafyta - icpwikiicp/mediawiki/images/1/1f/slides-fortran_cg_ws12.pdf · wassindprogramme? i...
TRANSCRIPT
![Page 1: MariaFyta - ICPWikiicp/mediawiki/images/1/1f/Slides-fortran_CG_WS12.pdf · WassindProgramme? I IndieserVorlesung:Python,C,Fortran,LATEX,bash I SinddasalleTypenvonProgrammiersprachen?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/1.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/2.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/3.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/4.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/5.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/6.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/7.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/8.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/9.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/10.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/11.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/12.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/13.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/14.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/15.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/16.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/17.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/18.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/19.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/20.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/21.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/22.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/23.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/24.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/25.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/26.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/27.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/28.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/29.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/30.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/31.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/32.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/33.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/34.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/35.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/36.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/37.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/38.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/39.jpg)
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?](https://reader030.vdocuments.net/reader030/viewer/2022041122/5d0ac0cf88c993d5608b692d/html5/thumbnails/40.jpg)
Frohe Weinachtenund
einen guten Rutsch!!!