Anweisungen in Fortran - Wertzuweisung

Ähnliche Dokumente
FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Praktikum: Paralleles Programmieren für Geowissenschaftler

Arithmetik in der tcsh

FORTRAN77. eine höllische Programmiersprache. Christian Sternecker. Sommersemester TU-München

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Elementare Konzepte von

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

Einstieg in die Informatik mit Java

Übersicht Programmablaufsteuerung

Arbeitsblätter für Algorithmierung und Strukturierung

3. Grundanweisungen in Java

Einstieg in die Informatik mit Java

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Dr. Monika Meiler. Inhalt

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan)

Arbeitsblätter für Algorithmierung und Strukturierung C #

Operatoren (1) Operatoren (2)

4.2 Programmiersprache C

Syntax der Sprache PASCAL

Programmieren I. Kapitel 5. Kontrollfluss

Datentypen: integer, char, string, boolean

C- Kurs 04 Anweisungen

3. Anweisungen und Kontrollstrukturen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

ATIK ORMAT SINFO HAFTS WIRT. Swetlana Konovalov Seminar Programmiersprachen Westfälische Wilhelms-Universität Münster

Einführung in die Programmierung II. 3. Kontrollstrukturen

Grundlagen der Fortran Sprache

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Schleifen Datenfelder (Arrays) Verzweigungen

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Java: Eine kurze Einführung an Beispielen

Syntax von LOOP-Programmen

ModProg 15-16, Vorl. 5

Tutorium für Fortgeschrittene

Tag 3 Repetitorium Informatik (Java)

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Zwischencodeerzeugung Compiler II

Einführung in die Programmierung mit VBA

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

RO-Tutorien 3 / 6 / 12

Vorlesung Programmieren

Programmiertechnik Kontrollstrukturen

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

Einstieg in die Informatik mit Java

Einführung in die Programmierung Wintersemester 2011/12

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Schleifen in C/C++/Java

Tag 3 Repetitorium Informatik (Java)

5. Elementare Befehle und Struktogramme

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Vorlesung Programmieren

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 25

C- Kurs 03 Ausdrücke und Operatoren

Einstieg in die Informatik mit Java

Programmierkurs Python I

Schleifen in C/C++/Java

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

2.5 Programmstrukturen Entscheidung / Alternative

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Access 2010 Programmierung Schleifen

PROGRAMMIERKURS FORTRAN

Anweisungen und Kontrollstrukturen

4. Ablaufsteuerung (Kontrollstrukturen)

Operatoren und Ausdrücke

6. Iteration (Schleifenanweisungen)

Zyklen: break und continue

GI Vektoren

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

2 Eine einfache Programmiersprache

Informatik I: Einführung in die Programmierung

Schleifenprogrammierung in C/C++, Fortran und Pascal

2 Teil 2: Nassi-Schneiderman

3 Befehle in Java. Variablen, Ausrücke, Anweisungen und zusammengesetzte Anweisungen. Variablen sind über einen Namen angesprochene Speicherplätze.

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Programmiervorkurs Einführung in Java Tag 3

Einstieg in die Informatik mit Java

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

Java I Vorlesung Imperatives Programmieren

Kontrollstrukturen. Bedingter Ablauf: if. Bedingter Ablauf: if-else

3 KONTROLLSTRUKTUREN ALLGEMEINES

1. Referenzdatentypen: Felder und Strings

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

RO-Tutorien 15 und 16

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Unterlagen. CPP-Uebungen-08/

Transkript:

Anweisungen in Fortran - Wertzuweisung Wertzuweisung, Ausdrücke variable = ausdruck arithmetischer, logischer oder Zeichenketten-Ausdruck, Typ des Ergebnisses sollte auf den Typ der linksstehenden Variablen konvertierbar sein. Arithmetische Ausdrücke Operatoren mit absteigender Priorität: ( ) Klammerung (höchste Priorität) ** Potenzierung (x**y x y ) *,/ Punktrechnung geht vor +,- Strichrechnung Bei gleicher Priorität aufeinanderfolgender Operatoren wird der Ausdruck von links nach rechts abgearbeitet a/b * c-d * e-f = (((a/b)*c) - (d*e)) - f Ausnahme: a bc = a**b**c = a**(b**c) M. Pester (TU Chemnitz) Fortran SS 2015 1 / 16

Anweisungen in Fortran - Wertzuweisung Auswertung arithmetischer Ausdrücke - Typkonvertierung Mit *,/,+,- werden jeweils 2 Operanden gleichen Typs miteinander verknüpft, das (Teil-)Ergebnis hat den gleichen Typ wie die Operanden Bei verschiedenen Typen der beiden Operanden wird auf den allgemeineren Typ konvertiert in der Richtung: INTEGER REAL COMPLEX bzw. typ*2 typ*4 typ*8 Der gesamte Ausdruck hat dann den allgemeinsten aller bei den Operanden vorkommenden Typen. Er wird erst zum Schluss in den Typ der links stehenden Variablen konvertiert. Dadurch kann die Reihenfolge von Operanden starke Auswirkungen auf das Ergebnis haben. Beachte: real**integer meist besser als real**real (ersteres: Multiplikation, letzteres: Logarithmen) M. Pester (TU Chemnitz) Fortran SS 2015 2 / 16

Anweisungen in Fortran - Wertzuweisung Auswertung arithmetischer Ausdrücke - Beispiele Es gelten die impliziten Typvereinbarungen, sowie IMPLICIT DOUBLEPRECISION (d) Anweisung Wert des Ausdrucks Wert nach Zuweisung x = 3/4 0 x=0.0 x = 3./4 0.75 x=0.75 j = 3./4 0.75 j=0 dx= 1./3 0.333333343 dx=0.33333334326744080 dx= 1/3d0 0.33333333333333331 dx=0.33333333333333331 x = 1 1 x=1.0 y = 3/4*x 0*x= 0.0 y=0.0 y = x*3/4 0.75 y=0.75 Es kann sinnvoll sein, Variable explizit in einen anderen Typ zu konvertieren (vgl. Standardfunktionen), z.b. DBLE(x). Versteckte Typumwandlungen kann man sonst im Quelltext leicht übersehen. M. Pester (TU Chemnitz) Fortran SS 2015 3 / 16

Anweisungen in Fortran - Wertzuweisung Zeichenkettenoperationen Character-Variable haben eine feste (vereinbarte) Länge Bei Zuweisung an eine Variable wird rechts mit Leerzeichen aufgefüllt oder rechts abgeschnitten Beispiel: character zk*3, str*20 zk = x x zk = abcdef abc Substrings str(von:bis) können als Quelle oder auch als Ziel einer ZK-Operation verwendet werden: Beispiel: str= Kapitel *: Kapitel *: Lmax = Len(str) 20 L = Len Trim(str) 10 str(l-1:l-1) = A Kapitel A: zk = str(:3) Kap zk = str(3:5) pit zk = str(5:) tel (rechts abgeschnitten) M. Pester (TU Chemnitz) Fortran SS 2015 4 / 16

Anweisungen in Fortran - Wertzuweisung Zeichenkettenoperationen Verkettungsoperation // CHARACTER*5 H, W CHARACTER*80 zeile DATA H / Hello /, W / World / zeile = H // // W //! Hello World! Konvertierungen zwischen Zeichen und ASCII-Code CHARACTER*1 c, esc k = ICHAR( 1 ) k = 49 c = CHAR(k+1) c= 2 esc = CHAR(27) ASCII-Steuerzeichen Escape Suche nach bestimmten Zeichen in einer Zeichenkette leer = INDEX(zeile, ) leer = 6 komma = INDEX(zeile,, ) komma = 0 M. Pester (TU Chemnitz) Fortran SS 2015 5 / 16

Anweisungen in Fortran - Wertzuweisung Logische Ausdrücke arithmetischer Vergleich ab Fortran IV ab F90 A1.LT. A2 < < A1.GT. A2 > > A1.LE. A2 <= A1.GE. A2 >= A1.EQ. A2 = == A1.NE. A2 /= Verknüpfungen:.NOT. loga loga1.and. loga2 loga1.or. loga2 loga1.eqv. loga2 loga1.neqv. loga2 Zeichenkettenvergleich lexikalische Funktionen LLT(str1,str2) LGT(str1,str2) LLE(str1,str2) LGE(str1,str2) Ordnungsrelation nach ASCII-Code von links nach rechts, so z. B. < + < 1 < 9 < A B < Z < < a < z Logische Ausdrücke überwiegend für IF () oder WHILE () verwendet, aber auch bei Zuweisung an LOGICAL-Variable. M. Pester (TU Chemnitz) Fortran SS 2015 6 / 16

Anweisungen in Fortran - Wertzuweisung Array-Ausdrücke (ab F90 zugelassen) Operationen mit Feldern als Operanden werden elementweise ausgeführt. (Keine Matrixmultiplikation im Sinne der Linearen Algebra) Die Felder müssen (deshalb) mit gleicher Dimension vereinbart sein. Skalare Operanden werden auf jedes Feldelement angewendet. Mit der WHERE-Anweisung (bzw. dem WHERE-Konstrukt) kann man Operationen auf ausgewählte Elemente eines Feldes einschränken: REAL,DIMENSION(10,10) :: a,b,c WHERE (a>b) a = -1.0 WHERE (b>c) b = -1.0 ELSEWHERE b = 1.0 END WHERE (WHERE-Anweisung) (WHERE-Konstrukt) M. Pester (TU Chemnitz) Fortran SS 2015 7 / 16

Ablaufsteuerung (global) PAUSE [prompt] (veraltet, deleted feature) Ausgabe von PAUSE prompt (prompt: Character-Konstante oder max. 5-stellige Zahl) und Warten auf Reaktion des Nutzers. Abbruch, wenn nicht go eingegeben wird. STOP [msg] Ausgabe von STOP msg (msg: Character-Konstante oder max. 5-stellige Zahl) und sofortiges Beenden des Programms (Notausgang!) RETURN Beendet das aktuelle (Funktions-)Unterprogramm, Rückkehr ins rufende Programm. Wenn im Quelltext nicht vorhanden, wird das RETURN vor der END-Anweisung automatisch angenommen. M. Pester (TU Chemnitz) Fortran SS 2015 8 / 16

Sprunganweisung unbedingte Verzweigung, GOTO marke marke CONTINUE (obsolet d. h. besser vermeiden) Fortsetzung mit der Anweisung, die durch marke markiert ist. (marke ist eine vorzeichenlose, max. 5-stellige Zahl) Die leere Anweisung CONTINUE wird als Markierungspunkt im Programm benutzt. Spezialvarianten berechnetes GOTO i = {1,..., n} GOTO (m1,m2,,mn), i Sprungziel ist i-te Marke assigned GOTO ASSIGN marke TO i GOTO i [,(m1,m2,,mn)] Sprungziel zur Laufzeit festgelegt M. Pester (TU Chemnitz) Fortran SS 2015 9 / 16

Verzweigung, arithmetisches IF IF-Anweisung(en) (Urversion, hardwarenah) IF (arithm ausdruck) m1,m2,m3 Je nach Wert a des Ausdrucks Sprung zu m1 (a < 0), m2 (a = 0), m3 (a > 0). logisches IF IF (log ausdruck) anweisung Bedingte Ausführung einer Anweisung (bei komplizierteren Aktionen meist GOTO- oder CALL-Anweisung) (ab Fortran IV) Block-IF (ab Fortran 77) IF (log ausdruck) THEN anweisung(en) ELSE IF (log ausdruck) THEN (Mehrfach-Bedingungen) anweisung(en) ENDIF Übliche IF-THEN-ELSE-Konstruktion (ELSE-Zweig kann fehlen) M. Pester (TU Chemnitz) Fortran SS 2015 10 / 16

Verzweigung, SELECT-CASE-Anweisung Fallunterscheidung nach Auswertung eines skalaren Ausdrucks (integer,logical,character) select case (skalarer ausdruck) case(werte1) 1 case(werte2) 2 case default anweisung falls keiner der Werte zutrifft end select Als werte sind (disjunkte) Aufzählungen oder Intervalle möglich, z. B. case(1,4,9) oder case(:-1) (d. h. ausdruck 1) Die Anweisungen nach der ersten passenden Werteliste werden ausgeführt. M. Pester (TU Chemnitz) Fortran SS 2015 11 / 16

Schleifen, Zählschleife DO-Anweisung(en) (klassisch) DO 10 k = kvon, kbis [, kstep] vor F77: kstep > 0 10 CONTINUE (oder andere ausführbare Anweisung) While-Schleife (F90 F77) DO WHILE (logischer ausdruck) (mit Einfluss auf Wert des log. Ausdr.) unendliche Schleife DO IF (log ausdr) EXIT! infinite loop Schleife verlassen M. Pester (TU Chemnitz) Fortran SS 2015 12 / 16

Schleifen, DO-Anweisung(en) Zählschleife (F90 F77) DO k = kvon, kbis [, kstep] vor F77: kstep > 0 seit F77: kstep 0 While-Schleife (F90 F77) DO WHILE (logischer ausdruck) (mit Einfluss auf Wert des log. Ausdr.) unendliche Schleife DO IF (log ausdr) EXIT! infinite loop Schleife verlassen M. Pester (TU Chemnitz) Fortran SS 2015 12 / 16

Schleifen, DO-Anweisung(en) Zählschleife (F90 F77) DO k = kvon, kbis [, kstep] vor F77: kstep > 0 seit F77: kstep 0 While-Schleife (F90 F77) DO WHILE (logischer ausdruck) (mit Einfluss auf Wert des log. Ausdr.) unendliche Schleife DO IF (log ausdr) EXIT! infinite loop Schleife verlassen M. Pester (TU Chemnitz) Fortran SS 2015 12 / 16

Schleifen, DO-Anweisung(en) Zählschleife (F90 F77) DO k = kvon, kbis [, kstep] vor F77: kstep > 0 seit F77: kstep 0 While-Schleife (F90 F77) DO marke WHILE (logischer ausdruck) (mit Einfluss auf Wert des log. Ausdr.) marke CONTINUE unendliche Schleife DO IF (log ausdr) EXIT! infinite loop Schleife verlassen M. Pester (TU Chemnitz) Fortran SS 2015 12 / 16

Schleifen, DO-Anweisung(en) Zählschleife (F90 F77) DO k = kvon, kbis [, kstep] vor F77: kstep > 0 seit F77: kstep 0 While-Schleife (F90 F77) DO WHILE (logischer ausdruck) (mit Einfluss auf Wert des log. Ausdr.) unendliche Schleife DO IF (log ausdr) EXIT! infinite loop Schleife verlassen M. Pester (TU Chemnitz) Fortran SS 2015 12 / 16

Schleifen Besonderheiten, Probleme vor F77: nichtabweisende Schleifen (mind. 1 Durchlauf) vor F77: nur positive Schrittweite (negative Schrittweite durch Rückwärtszählen einer anderen Variablen innerhalb der Schleife) Deleted feature : F77 erlaubte (vorübergehend) Zählschleifen mit REAL-Argumenten, z. B. DO x = 0.1, 1.5, 0.2 Die vorher berechnete Anzahl der Durchläufe (hier: 1.5 0.1 0.2 ) konnte von Rundungsfehlern abhängen. Laufvariable der Zählschleife darf im Inneren der Schleife nicht verändert werden (Anzahl der Durchläufe wird evtl. vorher berechnet). Der Wert der Laufvariablen ist nach vollem Durchlauf der Schleife unbestimmt. Beim Verlassen der Schleife mit GOTO- oder EXIT-Anweisung hat die Variable den aktuellen Zählerwert. Sprung ins Innere einer Schleife sind nicht erlaubt. M. Pester (TU Chemnitz) Fortran SS 2015 13 / 16

Schleifen Besonderheiten, Probleme vor F77: nichtabweisende Schleifen (mind. 1 Durchlauf) vor F77: nur positive Schrittweite (negative Schrittweite durch Rückwärtszählen einer anderen Variablen innerhalb der Schleife) Deleted feature : F77 erlaubte (vorübergehend) Zählschleifen mit REAL-Argumenten, z. B. DO x = 0.1, 1.5, 0.2 Die vorher berechnete Anzahl der Durchläufe (hier: 1.5 0.1 0.2 ) konnte von Rundungsfehlern abhängen. Laufvariable der Zählschleife darf im Inneren der Schleife nicht verändert werden (Anzahl der Durchläufe wird evtl. vorher berechnet). Der Wert der Laufvariablen ist nach vollem Durchlauf der Schleife unbestimmt. Beim Verlassen der Schleife mit GOTO- oder EXIT-Anweisung hat die Variable den aktuellen Zählerwert. Sprung ins Innere einer Schleife sind nicht erlaubt. M. Pester (TU Chemnitz) Fortran SS 2015 13 / 16

Schleifen Besonderheiten, Probleme Problematisch sind geschachtelte Schleifen mit gleicher Endemarke: do 10 i=1,n goto 10 do 10 j=1,m goto 10 10 continue Sprungziel nicht im selben Block Sprungziel im selben Block Besser mit 2 verschiedenen Marken klare Struktur schaffen. M. Pester (TU Chemnitz) Fortran SS 2015 14 / 16

Schleifen Besonderheiten, Probleme Problematisch sind geschachtelte Schleifen mit gleicher Endemarke: do 20 i=1,n goto 20 do 10 j=1,m goto 10 10 continue 20 continue Besser mit 2 verschiedenen Marken klare Struktur schaffen. M. Pester (TU Chemnitz) Fortran SS 2015 14 / 16

Schleifen Spezielle Steuer CYCLE Sprung ans Ende der aktuellen (inneren) Schleife, nächster Durchlauf EXIT vorzeitiges Verlassen der aktuellen Schleife Bei geschachtelten Schleifen kann man mit speziellen Construct-Namen angeben, auf welche Schleife sich CYCLE oder EXIT beziehen sollen. outer: do i=1,n inner: do j=i,n if () EXIT outer verlasse gesamte Schleife if () EXIT verlasse nur innere Schleife if () CYCLE überspringe Rest der inneren Schleife end do inner end do outer M. Pester (TU Chemnitz) Fortran SS 2015 15 / 16

Schleifen Implizites DO Spezielle Aufzählung von Elementen mittels Laufindex (ausdruck, k=kvon,kbis[,kstep]) (Anwendung bei READ und WRITE) Beispiel: REAL A(1000,1000) DO i=1,n WRITE(*,*) (A(i,j),j=1,m) auch geschachtelt: WRITE(*,*) ((A(i,j),j=1,m),i=1,n) zeilenweise je m Spalten Beachte: Die Anweisung WRITE(*,*) A entspricht der Ausgabe: WRITE(*,*) ((A(i,j),i=1,1000),j=1,1000) spaltenweise M. Pester (TU Chemnitz) Fortran SS 2015 16 / 16