Ausdruecke "Alles, was einen Wert zurueckliefert, ist ein Ausdruck." Konstanten, Variablen, "Formeln" oder auch Methoden koennen Werte zurueckgeben. Im Gegensatz zu Anweisungen; die geben keinen Wert zurueck. (Durch Anhaengen eines Semikolons wird ein Ausdruck zu einer (einfachen) Anweisung.) Beispiele fuer Ausdruecke: logischer Ausdruck a > b liefert boolean a * b / c logischer Ausdruck liefert boolean (a + b) * 3/2 artihmetischer Ausdruck liefert int oder double 4 konstanter Ausdruck Verknuepfungen von Operanden mit Operatoren +, -, = , && , ... - Auswertungsreihenfolge des Ausdrucks (z.B. "Punkt vor Strich") genau festgelegt. (siehe Uebung) - evtl. mit Klammerung vorgeben (3+2)*5 (=25) 3+2*5 (=13) Java / C / C++ unterscheiden lvalue, rvalue steht links von einem Gleichheitszeichen (= kann Wert zugewiesen bekommen) alles, was nicht links stehen darf, z.B. eine Konstante Ein Ausdruck hat einen - Wert / "Rueckgabewert" - Typ (wird eindeutig aus den beteiligten Operanden ermittelt) - Effekt = Wirkung auf Speicherinhalte Ist dieser Effekt etwas anderes als eine Zuweisung an einen lvalue, spricht man von einem Nebeneffekt. Beispiele 1. a = b ; lvalue Zuweisungsausdruck; weist lvalue den Wert des rvalue zu. rvalue Wert: Wert der rechten Seite Typ: Typ der linken Seite Effekt: Veraenderung des Speichers, der durch a bezeichnet wird deswegen ok: a = b = c ; Mehrfachzuweisung Wert dieses Ausdrucks ist der Wert von c. 2. c += 2 ; dasselbe wie c = c + 2; 3. if ( (a=b) > c) c = a ; falls b > c wird c=a ausgefuehrt Zuweisung: hat den Wert von b SPARSAM MIT SEITENEFFEKTEN UMGEHEN. 4. Inkrementoperator: a++ ; erst auswerten, dann erhoehen ++a ; erst erhoehen, dann auswerten Mit a=2, b=4: a = b++ ; vorher: nachher: entsprechend: Dekrementoperator: a 2 b 4 a 4 b 5 Seiteneffekt! a-- ; --a ; Strukturierte Anweisungen - zusammengesetzte Anweisung - bedingte Anweisung - bedingete - wiederholende Anweisung Mit Hilfe dieser Anweisungen lassen sich Kontrollstrukturen erzeugen. Eine Kontrollstruktur ist eine Schema, das die Abarbeitungsreihenfolge von Anweisungen innerhalb eines Programms vorgibt. Mit ihnen wird "kontrolliert", wie ein Programm in Abhaengigkeit von Bedingungen gesteuert wird; sie legen den "Programmfluss" fest. programmiersprachenunabhaengige Darstellungen von Kontrollstrukturen: - Pseudocode - Struktogramm graphische Beschreibungen - Flussdiagramm Zusammengesetzte Anweisungen, Verkettung besteht in der Hintereinanderschaltung von Anweisungen M 1, M 2, ..., M t. Diese werden sequentiell abgearbeitet. Pseudocode der Verkettung: Java-Code der Verkettung: M1 M1 ; 1 M M2 ; M t Mt ; } Struktogramm der Verkettung Flussdiagramm der Verkettung Beispiel: Hypothekberechnung Abloesung einer Annuitaetshypothek: Hypothek: Laufzeit: Zinssatz: b Euro n Jahre z % Berechne die monatliche Ratenzahlung a zur Abloesung der Hypothek. Falls keine Rueckzahlung erfolgen wuerde, wuechse der Betrag von b in n Jahren auf b(1+z) n . Die Summe der monatlichen Raten plus deren Verzinsung muss auf den gelichen Betrag fuehren, d.h. b(1+z)n = "Summe der monatl. Raten + Verzinsung". b(1+z) = 12a(1+z)n-1+ 12a(1+z)n-2+ ... + 12a(1+z)0 = 12a[ (1+z)n-1 + (1+z)n-2 + ... + (1+z)0 ] n = 12a (1+z) - 1 z geom. Summenformel Satz (geometrische Summenformel) Fuer alle reellen Zahlen q ungleich 1 und alle natuerlichen n gilt die Gleichung: 1 + q + q2 + ... + qn-1 = q n -1 q - 1 Bemerkung: Um die Berechnung in jedem Eingabefeld ausloesen zu koennen, ermoegli wird an jedes Eingabefeld ein ActionListener angehaengt. Trennung der Trennung der Funktionalitaeten b z Beispiel: interestRate = 3.8 % interestFactor = 1.038 n a power = n power = 1.038 Pixel-Angaben Selektion, Bedingte Anweisung Prototyp: if - Anweisung Pseudocode der if - Anweisung if B then S1 Java-Code fuer if - Anweisung if (B) { S1 ; else S2 S endif 1 ; } Struktogramm der if - Anweisung Flussdiagramm der if -Anweisung Der else - Teil ist OPTIONAL! Die selektive Anweisung "Geschachtelte" Version der if - Anweisung, die benutzt werden kann, um mehr als zwei Faelle zu unterscheiden. Pseudocode: if B=c 1 Kurzform: then case B of c S1 : S cc : S 2 2 else if B=c 2 then S 2 In Java existiert dafuer auch die switch - Anweisung. (siehe Uebung) cn : Sn nn end Sn endif Struktogramm der Selektion Flussdiagramm der Selektion Aufgrund fehlender else - Teile in geschachtelten if - Anweisungen kann es zu Unklarheiten kommen. Regel: Falls nicht durch Klammerung mit { ... } anders geregelt, bezieht sich ein "haengendes" else immer uaf das letzte if, auf das eine Zuordnung moeglich ist. Beispiel: if (B1) S1 ; if (B2) S2 ; else S3 ; else bezieht sich auf das zweite if