und Kontrollstrukturen, einfache Programme

Werbung
II. 3. 1. Erste Schritte mit einer Programmierumgebung
Vorlesung Informatikfür 02(ET+MB+WET)
www.imn.htwk-leipzig.de/˜uwe/Teaching/OOP
II. Algorithmieren und Programmieren
II. 3. Daten- und Kontrollstrukturen, einfache Programme
II. 3. 4 Beschreibung des Programmverhaltens mittels
Zusicherungen
Prof. Dr. Uwe Petermann
Dept. of Computer Science
University of Applied Sciences Leipzig
P.O.B. 300066
D-04251 Leipzig (Germany)
[email protected]
• Eine Programmieraufgabe wird als ein Projekt organisiert.
• Zugehörige Dateien werden in einem Verzeichnis angeordnet,
welches dem Projekt zugeordnet wurde.
• Annahme für weitere Erläuterungen: alle Projekte befinden sich
in einem Verzeichnis “APPLICATIONS”.
• Projekt anlegen und bearbeiten:
Emacs (oder XEmacs)
aufrufen
(1) in das Verzeichnis “APPLICATIONS” wechseln
(2) Projektverzeichnis anlegen, z.B. “HelloWorld”
(3) in das Projektverzeichnis wechseln
(4) Bearbeiten der Programmdatei(en) im Zyklus
Editieren — Übersetzen — falls syntaktisch korrekt: Testen
March 24, 2004
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
1
OO Programmierung, 02(ET+MB+WET)
II. 3. Daten- und Kontrollstrukturen, einfache Programme
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
3
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 1. Erste Schritte . . .
(1) Erste Schritte mit einer Programmierumgebung
• Neues Verzeichnis anlegen
(z.B. für ein neues Projekt )
(2) einfache Datentypen
(1) XEmacs: Menues auswählen: File — Open File
im folgenden Menue: Name angeben (ohne “/” am
Ende!).
Verzeichnis wird angelegt, falls es nicht schon existiert.
(3) Kontrollstrukturen
(4) Einfache Programme
(2) Emacs: Menues auswählen: File — Open Directory
im folgenden Menue: Name angeben (ohne “/” am
Ende!).
Verzeichnis wird angelegt, falls es nicht schon existiert.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
2
OO Programmierung, 02(ET+MB+WET)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
4
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 1. Erste Schritte . . .
• Anlegen neuer Dateien in einem Projekt
(in der Regel jede Klasse in eigener Datei)
(1) XEmacs und Emacs: Menues auswählen: File — Open File
(2) im folgenden Menue: Name angeben.
Datei wird erzeugt, falls sie nicht schon existiert.
(3) Wichtig: beide Editoren erkennen an der Datei-Endung den
Typ und passen ihr Verhalten an.
Deshalb vor dem Schreiben die Datei anlegen.
Bei .java-Dateien kann der “Speedbar” benutzt werden.
Browser, welcher Quelldateien und deren Bestandteile (Klassen,
Methoden, Variablen ... anzeigt und die Navigation im Quelltext unterstützt.
noch zu II. 3. 1.
• Ein (selbständig ausführbares) Java-Programm hat
zumindest eine Klasse. Diese enthält eine Methode
public static void main(String[]);
• Klassen bilden relativ unabhängige und idealerweise
wiederverwendbare Programmeinheiten, die Teilaufgaben lösen.
• Klassen können auch separat in den von einer virtuellen
Maschine für Java ausführbaren Byte–Code übersetzt
werden.
• Mehrere Klassen können zu einem Paket zusammengefaßt werden.
• Häufig benutzt man Pakete der Java-Bibliothek.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
5
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 1.
7
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 1.
• Einfachstes Beispiel: “Hello World”
/** Hauptklasse des "Hello-World-Beispiels"
*/
public class HelloWorld {
/** Constructor. Wird hier nicht gebraucht.
*/
public HelloWorld () {
}
/** Hauptmethode der Klasse. Eine Klassenmethode.
* Argument beim Aufruf zu uebergeben (hier unnoetig).
*/
public static void main(String[] args) {
System.out.print("Hello World");
}
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
6
OO Programmierung, 02(ET+MB+WET)
• Eine Klasse ist bestimmt durch
– ihren Namen
– Datenfelder (auch lokale Variablen genannt) und
– Methoden.
• Während der Programmausführung werden Objekte
(Inkarnationen) von Klassen erzeugt.
Dazu werden besondere Methoden, die KonstruktorMethoden benutzt.
Beispiel: Integer x = new Integer("1024");
Integer(String) ist ein Konstruktor der Klasse
Integer
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
8
OO Programmierung, 02(ET+MB+WET)
• Datenfelder und Methoden können
– ausschließlich klassenabhängig und damit objektunabhängig oder
– objektabhängig sein.
Erstere sind am Schlüsselwort static erkennbar.
Beispiele:
– Variable static int MAX_VALUE und
Methode
static int parseInt(String)
aus Klasse Integer des Pakets java.lang
sowie
– Methode int intValue()
aus Klasse Integer des Pakets java.lang
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
9
OO Programmierung, 02(ET+MB+WET)
II. 3. 2. Einfache Datentypen
DarstellungsDatentyp größe
n = 2k
byte
8-bit
short
16-bit
int
32-bit
long
64-bit
float
32-bit
double
64-bit
char
boolean
16-bit
true,
false
Wertebereich
k Beschreibung
3
4
5
6
Zweierkomplement
Zweierkomplement
Zweierkomplement
Zweierkomplement
IEEE754 Gleitkommazahl
einfache Genauigkeit
IEEE754 Gleitkommazahl
doppelte Genauigkeit
Unicode-Zeichen
Wahrheitswert
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
11
−27 bis 27 − 1
−215 bis 215 − 1
−231 bis 231 − 1
−263 bis 263 − 1
−3.4 ∗ 1038
bis 3.4 ∗ 1038
−1.7 ∗ 10308
bis 1.7 ∗ 10308
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
Datentyp
beschreibt einen Wertebereich für Variablen mit den
zugehörigen Operationen, Konstanten und Relationen
vordefinierte Datentypen:
z.B. int, boolean, float, char, String und deren
abgeleitete Feldtypen (z.B. int[])
Endlichkeit des Speichers bewirkt,
daß in der Mathematik betrachtete algebraische Struktur, z.B. Zahlbereich der ganzen Zahlen,
sich von endlicher Modellierung in Datentyp int unterscheidet.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
noch zu II. 3. 2. Einfache Datentypen
10
OO Programmierung, 02(ET+MB+WET)
Darstellung ganzer Zahlen im Rechner:
im Positionssystem zur Basis b nach folgender Formel:
z = zn−2bn−2 + . . . + z1b1 + z0b0
(1)
Dabei gilt 0 ≤ zi < b für alle i mit 0 ≤ i ≤ n.
Übliche Werte : b = 2, n = 2k mit k = 3, 4, 5, 6.
Bei Darstellung negativer ganzer Zahlen wird dem
Zweierkomplement 2n−1 − z eine 1 vorangestellt.
Bei Darstellung nichtnegativer ganzer Zahlen wird
der Binärdarstellung eine 0 vorangestellt.
Vorteil: für Addition und Subtraktion kann der gleiche
Algorithmus verwendet werden.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
12
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
noch zu II. 3. 2. Einfache Datentypen
Darstellung ganzer Zahlen im Rechner:
Eigenschaften:
Für x, y ∈ Z mit minint ≤ x, y ≤ maxint gilt:
x ⊕ y ≡ x + y (mod 2n)
x ⊙ y ≡ x · y (mod 2n)
x ⊖ y ≡ x − y (mod 2n)
(2)
(3)
(4)
Also gilt zum Beispiel:
maxint ⊕ 1 = minint, minint ⊖ 1 = maxint
für minint = −2n−1 und maxint = 2n−1 − 1.
(IZ, ⊕, ⊙, ⊖, 0, 1) ist ein kommutativer Ring.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
13
OO Programmierung, 02(ET+MB+WET)
Darstellung von Gleitkommazahlen im Rechner:
Wert = (−1)v ∗ (1 + m) ∗ 2e−k wobei gilt:
für float: k = 127
Bit 31 Bits 30 - 23 Bits 22 - 0
Vorzeichen Exponent
Mantisse
v
e
m
0 oder 1
0 bis 254 0 bis 1 − 2−23
für double: k = 1023
Bit 63 Bits 62 - 52 Bits 51 - 0
Vorzeichen Exponent Mantisse
v
e
m
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
15
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
noch zu II. 3. 2. Einfache Datentypen
noch: Darstellung ganzer Zahlen im Rechner:
Eigenschaften Gleitkommaoperationen im Rechner:
1
0
7
1 ∗ −2 0 ∗ 26
Wert = -89
1
0
7
1 ∗ −2 0 ∗ 26
Wert = -128
0
1
7
0 ∗ −2 1 ∗ 26
Wert = 127
1
0
0
1
1
1
5
4
3
2
1
1 ∗ 2 0 ∗ 2 0 ∗ 2 1 ∗ 2 1 ∗ 2 1 ∗ 20
0
0
0
0
0
0
5
4
3
2
1
0 ∗ 2 0 ∗ 2 0 ∗ 2 0 ∗ 2 0 ∗ 2 0 ∗ 20
1
1
1
1
1
1
5
4
3
2
1
1 ∗ 2 1 ∗ 2 1 ∗ 2 1 ∗ 2 1 ∗ 2 1 ∗ 20
• Kommutativität der Addition und Multiplikation:
∀x, y ∈ Real : x ⊕ y = y ⊕ x
∀x, y ∈ Real : x ⊗ y = y ⊗ x
• Symmetrie der Operationen bezüglich der 0:
∀x, y ∈ Real : x ⊖ y = x ⊕ (−y) = −(y ⊖ x)
∀x, y ∈ Real : (−x) ⊗ y = x ⊗ (−y) = −(x ⊗ y)
∀x, y ∈ Real : (−x) ⊘ y = x ⊘ (−y) = −(x ⊘ y)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
14
OO Programmierung, 02(ET+MB+WET)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
16
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
zu Eigenschaften Gleitkommaoperationen im Rechner:
• Monotonie
∀x, y, a, b ∈ Real : 0 ≤ x ≤ y∧0 ≤ a ≤ b ⇒ x⊕a ≤ y⊕b
∀x, y, a, b ∈ Real : 0 ≤ x ≤ y∧0 ≤ a ≤ b ⇒ x⊗a ≤ y⊗b
∀x, y, a, b ∈ Real : 0 ≤ x ≤ y∧0 ≤ a ≤ b ⇒ x⊖b ≤ y⊖a
∀x, y, a, b ∈ Real : 0 ≤ x ≤ y∧0 < a ≤ b ⇒ x⊘b ≤ y⊘a
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
17
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
zu Eigenschaften Gleitkommaoperationen im Rechner:
• Rechnen mit Gleitkommazahlen —
Spezialgebiet Numerik
• Probleme durch Endlichkeit der Darstellung:
z.B. bei Zusammentreffen großer und kleiner Summanden
kann zum “Verschwinden” der kleinen Summanden
führen
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
18
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
Java / C++
Pascal
unäre Operationen:
-, !
unäre Operationen:
-, not
Multiplikationsoperationen:
Multiplikationsoperationen:
*, /, mod, div, and
*, /, %, /, &&
Additionsoperationen:
Additionsoperationen:
+, -, or
+, -, ||
Vergleichsprädikate:
<, <=, >, >=, ==, !=
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
Vergleichsprädikate:
<, <=, >, >=, =, <>
19
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
Feldtypen
beschreiben eine Folge von Daten gleichen Typs
Beispiele für Feldtypen:
z.B. int[], float[], String[]
Vereinbarung und Initialisierung:
durch explizite Aufzählung der Feldelemente:
int[] x = {1,3,4};
durch Angabe der Feldlänge:
int[] x = new int[laenge];
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
20
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 2. Einfache Datentypen
Zugriff auf einzelne Feldelemente:
Der in Klammern angegebene Wert muß eine nichtnegative ganze Zahl sein.
lesend: int y = x[1];
schreibend: x[1] = 23;
mehrdimensionale Felder:
float[][] matrix = new float[2][3];
matrix[1][2] = 3;
matrix[2][1] = 4;
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
21
OO Programmierung, 02(ET+MB+WET)
II. 3. 3. Einfache Programmstrukturen
noch zu II. 3. 3. Einfache Programmstrukturen
• Variablenvereinbarungen
– Variablen müssen vor ihrer Benutzung nach einem
der folgenden Muster vereinbart werden:
TypBezeichner VariablenName(n);
TypBezeichner VariablenName(n) = InitialWert;
– Beispiele:
int i;
Integer iobj = new Integer("1023");
float x = 1.209;
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
23
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 3. Einfache Programmstrukturen
• Wertzuweisungen,
Einfache Programmstrukturen sind
• Variablenvereinbarungen
und
• einfache Anweisungen:
– Wertzuweisungen,
– Ein-/Ausgabeanweisungen,
– Bedingte und Verzweigungsanweisungen,
– Wertzuweisungen haben die folgende Form:
Variable = Ausdruck;
– Beispiele:
iobj = new Integer("1023");
x = 1.209 / 2.4;
x = (1.209 / 2.4);
– Die Form der linken Seite kann auch komplexer
sein. Dazu später.
– Schleifenanweisungen
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
22
OO Programmierung, 02(ET+MB+WET)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
24
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 3. Einfache Programmstrukturen
• Eingabeanweisungen (Eingabe von der Tastatur)
Gepuffertes Leses einer Zeichenkette über Methode readLine()
eines Objekts d der Klasse BufferedReader unter Benutzung
eines Eingabestromlesers (InputStreamReader)
mittels Standardeingabe (Variable in der Klasse System)
noch zu II. 3. 3. Einfache Programmstrukturen
• Eingabeanweisungen (Eingabe von der Tastatur)
Gepuffertes Leses einer ganzen Zahl über Methode readLine()
eines Objekts d der Klasse BufferedReader wie im vorhergehenden Beispiel.
Wert der eingelesenen Zahl wird aus der Zeichenkette mittels
Methode intValue der Klasse Integer erzeugt.
import java.io.*;
...
throws IOException{
...
BufferedReader d
= new BufferedReader(new InputStreamReader(System.in));
...
String s1 = d.readLine();
}
}
import java.io.*;
...
throws IOException{
...
BufferedReader d
= new BufferedReader(new InputStreamReader(System.in));
...
int s1 = (new Integer(d.readLine())).intValue();
}
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
25
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
• Programmbeispiel zu Variablenvereinbarungen, Wertzuweisungen, Ein-/Ausgabe von Zeichenketten: “ReadString”
import java.io.*;
public class ReadString {
/** Hauptmethode der Klasse. Eine Klassenmethode.
*/
public static void main(String args[])
throws IOException{
BufferedReader d
= new BufferedReader(new InputStreamReader(System.in));
System.out.print("\nDas erste Wort bitte!\n");
String s1 = d.readLine();
System.out.print("\nDas zweite Wort bitte!\n");
String s2 = d.readLine();
System.out.print("\nSie sagten: " + s1 + " " + s2 + "\n");
}
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
26
OO Programmierung, 02(ET+MB+WET)
27
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
import java.io.*;
/** Hauptklasse des "ReadData-Beispiels"
*/
public class ReadData {
* Argument beim Aufruf zu uebergeben (hier unnoetig).
*/
public static void main(String args[])
throws IOException{
BufferedReader d
= new BufferedReader(new InputStreamReader(System.in));
System.out.print("\nDie erste Zahl bitte!\n");
int s1 = (new Integer(d.readLine())).intValue();
System.out.print("\nDie zweite Zahl bitte!\n");
int s2 = (new Integer(d.readLine())).intValue();
int s = s1 + s2;
System.out.print("\nIhre Summe ist: " + s + "\n");
}
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
28
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
Verzweigung :
if (Bedingung)
// der WENN-Zweig
Anweisung
else
// der SONST-Zweig
Anweisung
+
?
?
H
HH
H
BedingungH
H
HH
HH
Anweisung1
noch zu II. 3. 3. Einfache Programmstrukturen
• anfangsgeprüfte Schleifenanweisung:
?
HH
HH
H
HHBedingung
HH
H
−
?
Anweisung2
?
while (Bedingung)
// Koerper
// der Schleifen// anweisung
Anweisung
−
+
?
Anweisung
?
bedingte Anweisung :
if (Bedingung)
// der WENN-Zweig
Anweisung
+
?
?
H
HH
H
BedingungH
H
HH
HH
−
Anweisung
?
• endgeprüfte Schleifenanweisung:
do
?
// Koerper
// der Schleifen// anweisung
Anweisung
while (Bedingung);
Anweisungsfolge
+
?
H
HH
H
H
H
HBedingung
H
HH
−
?
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
29
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
Beispiel: Verzweigung und bedingte Anweisung
if (r != 0) {
// der WENN-Zweig
System.out.print(\"Ergebnis=" + m/r + "\n");
}
else{
// der SONST-Zweig
System.out.print
("Division durch 0 nicht definiert!!!\n");
}
if (r != 0) {
// der WENN-Zweig
System.out.print(\"Ergebnis=" + m/r + "\n");
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
30
OO Programmierung, 02(ET+MB+WET)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
31
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
Schleifenanweisung
Beispiel: Berechnung des größten gemeinsamen Teilers
(GGT) der positiven ganzen Zahlen x und y
Der Algorithmus:
// Vor: x>0, y>0, x und y ganze Zahlen
n = x; m = y; r = n % m;
while (r != 0) {
// Inv: ggT(x,y)=ggT(n,m)=ggT(r,m), r>=0
n=m; m=r; r= n % m;
}
// Nach: ggT(x,y)=m
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
32
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
Hintergrund zum GGT positiver ganzer Zahlen x und y
zu II. 3. 3. Einfache Programmstrukturen
Algorithmus 2: GGT positiver ganzer Zahlen x und y
(1) Der größte gemeinsame Teiler (GGT) der positiven
ganzen Zahlen x und y ist die größte Zahl z, die
sowohl x als auch y teilt, d.h. für die es Zahlen n
und m gibt mit x = n ∗ z und y = m ∗ z
(2) Zunächst gilt: ggT (x, x) = x
(3) Wenn 0 < y < x, dann gilt:
ggT (x, y) = ggT (y, x − y) und x + y > y + (x − y)
(4) Wenn 0 < y < x und außerdem r der Rest der
Division von x durch y ist, so gilt auch:
ggT (x, y) = ggT (y, r) und x + y > y + r
(5) Die Fakten 3 und 4 ergeben mit 2 die Grundlage für
2 Verfahren zur Berechnung des GGT.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
33
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
Algorithmus 1: GGT positiver ganzer Zahlen x und y
(1) Wenn x = y, dann ist x der GGT von x und y.
(2) Andernfalls:
Wenn 0 < y < x, dann überschreibe x mit x − y
und setze mit (2) fort.
Wenn 0 < x < y, dann überschreibe y mit y − x und
setze mit (2) fort.
(1) Belege die Variablen n, m und r mit den Werten x,
y und x%y
(2) Wenn r = 0, dann ist m der GGT von x und y.
(3) Andernfalls:
überschreibe n mit m,
überschreibe m mit r ,
überschreibe r mit n%m
und setze mit 2 fort.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
35
OO Programmierung, 02(ET+MB+WET)
import java.io.*;
// bildet in m den GGT der positiven ganzen Zahlen x und y
class GGTmod {
public static void main(String[] args)
throws java.io.IOException {
int
r, n, m, x, y;
BufferedReader d
= new BufferedReader(new InputStreamReader(System.in));
System.out.print("GGT mittels ganzahliger Division\n x=");
x = (new Integer(d.readLine())).intValue();
System.out.print(" y=");
y = (new Integer(d.readLine())).intValue();
// Vor: x>=0, y>=0
.... Algorithmus ....
// Nach: ggT(x,y)=m
System.out.print("ggT(x,y)=" + m + "\n");
}
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
34
OO Programmierung, 02(ET+MB+WET)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
36
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
• Verkettung von Anweisungen
Man kann eine Folge von Anweisungen
Anweisung1
Anweisung2
...
Anweisung
mittels Klammerung zu einer Anweisung zusammenfassen:
{ Anweisung1
Anweisung2
...
Anweisung }
noch zu II. 3. 3. Einfache Programmstrukturen
• Mehrfachverzweigungen (else-if-Anweisungen)
if ( Bedingung )
Anweisung
else if ( Bedingung )
Anweisung
.....
Beispiele:
if (x<0) {
u = -x; v = -y;
}
else {
u = x; v = y;
}
do {
z = z + y;
u = u - 1;
}
while (u != 0);
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
37
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 3. Einfache Programmstrukturen
• Verschachtelte if-Anweisungen
Wie ist die folgende Anweisung zu verstehen:
if (true)
if (false) System.out.print("x");
else System.out.print("y");
Varianten 1
if (true)
if (false)
System.out.print("x");
else
System.out.print("y");
Variante 2
if (true)
if (false)
System.out.print("x");
else
System.out.print("y");
Antwort:
Der Compiler interpretiert gemäß Variante 1.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
38
OO Programmierung, 02(ET+MB+WET)
else if ( Bedingung )
Anweisung
else
Anweisung
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
39
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 3. Einfache Programmstrukturen
• Beispiel zu Mehrfachverzweigungen
(else-if-Anweisungen)
if (command.equals("Cut")) {
// perform cut operation
cut();
} else if (command.equals("Copy")) {
// perform copy operation
copy();
} else if (command.equals("Paste")) {
// perform paste operation
paste();
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
40
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 3. Einfache Programmstrukturen
• Mehrfachverzweigungen (switch-Anweisungen)
switch ( Ausdruck ) {
case konstanter_Ausdruck :
Anweisungsfolge
II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
(1) Vor- und Nachbedingungen
(2) Zusammentreffen von Nach- und Vorbedingung bei
Anweisungsfolgen
(3) Wertzuweisung
.....
(4) Verzweigung und bedingte Anweisung
case konstanter_Ausdruck :
Anweisungsfolge
default :
Anweisungsfolge
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
41
OO Programmierung, 02(ET+MB+WET)
noch zu II. 3. 3. Einfache Programmstrukturen
• Beispiel zu Mehrfachverzweigungen
(switch-Anweisungen)
switch (a[i]) {
case ’y’ :
ys = ys+1;
break;
case ’x’ :
xs = xs+1;
break;
default :
sonst = sonst+1;
}
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
42
OO Programmierung, 02(ET+MB+WET)
(5) Nachweis der Termination
(6) anfangs- und endgeprüfte Schleife
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
43
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
zu (1) Vor- und Nachbedingungen
Das Verhalten eines Programms P kann durch Vor- und
Nachbedingungen V or und N ach beschrieben werden.
Definition:
Beispiel:
P ist korrekt bezüglich Vorbedingung V or und Nachbedingung N ach gdw.
Für alle Eingaben für P ,
die V or erfüllen, gilt:
P terminiert und
das Ergebnis erfüllt N ach.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
44
// Vor: 0<=x
z = 0;
u = x;
do {
z = z + y;
u = u - 1;
}
while (u != 0);
// Nach: z=x*y
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen – Beispiel 1 zur Wertzuweisung:
vorher:
zu (2) Anweisungsfolgen P Q (erst P ausführen, dann Q)
Bedingungen
Beispielbelegung
Beispiel:
Wenn
P korrekt bezüglich V orP und N achP
und
Q korrekt bezüglich V orQ und N achQ
und
(N achP ) → (V orQ) gilt
dann
ist die Verkettung P Q
korrekt bezüglich V orP und N achQ
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
45
/* z+(u-1)*y=x*y
0 <= u-1 */
u = u - 1;
/* z+u*y=x*y
0 <= u */
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
zu (3) Wertzuweisung
z+u∗y =x∗y
/* z+u*y=x*y,
0 < u */
z = z + y;
/* z+(u-1)*y=x*y,
0 < u */
z + y + (u − 1) ∗ y = x ∗ y
Wertzuweisung:
z = z+y
nachher:
Bedingungen
Beispielbelegung
Variable x y z u
Wert
5 4 12 3
z + (u − 1) ∗ y = x ∗ y
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
47
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen – Beispiel 2 zur Wertzuweisung:
vorher:
z = w
Beispiele:
Wenn
die Bedingung V or
aus der Bedingung N ach entsteht,
indem alle Vorkommen von z in N ach
durch w ersetzt werden,
dann
ist die Wertzuweisung z = w
korrekt bezüglich Vorbedingung V or
und Nachbedingung N ach
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
Variable x y z u
Wert
5 4 8 3
ist äquivalent zu
46
/* Beispiel 1:
z+u*y=x*y */
z = z + y;
/* z+(u-1)*y=x*y */
Bedingungen
Beispielbelegung
z +( u−1 )∗y =x∗y
Variable x y z u
Wert
5 4 12 3
Wertzuweisung:
u = u−1
nachher:
/* Beispiel 2:
0 <= u-1 */
u = u - 1;
/* 0 <= u */
OO Programmierung, 02(ET+MB+WET)
Bedingungen
z + u ∗y =x∗y
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
48
Beispielbelegung
Variable x y z u
Wert
5 4 12 2
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
zu (4) Regel für die Verzweigung :
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
zu 5: Nachweis der Termination
Wenn
Anweisung1 korrekt bzgl.
(V or) ∧ (Bedingung) und N ach
Problem bei allen Konstrukten, die Wiederholungen
(Iterationen) von Anweisungen beschreiben:
Beispiel:
// Vor: x<0 or x>0
if (x<0) {
u = -x;
v = -y;
}
else {
u = x;
v = y;
}
// Nach: u*v=x*y
und
Anweisung2 korrekt bzgl.
(V or) ∧ ¬(Bedingung) und N ach
dann ist die Anweisung
if (Bedingung)
Anweisung1
else
Anweisung2
Wird irgendwann die Abbruchbedingung erfüllt?
Idee:
Man definiere ein Maß für die Größe der verbleibenden
Aufgabe. Dies kann z.B. eine natürliche Zahl sein.
Nachzuweisen ist dann:
(a) Bei jeder Iteration verringert sich diese Größe.
(b) Die Größe kann sich nicht unendlich oft verringern.
korrekt bzgl. V or und N ach.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
49
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
Regel für die bedingte Anweisung :
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
51
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
zu (6) anfangsgeprüfte Schleife
Wenn
(V or)→(Inv) gilt und
Wenn
Anweisung korrekt bzgl.
(V or) ∧ (Bedingung) und N ach
Beispiel:
und es gilt
((V or) ∧ ¬(Bedingung))→(N ach)
dann ist die Anweisung
if (Bedingung)
Anweisung
// Vor: u=x and v=y
if (x<0) {
u = -x;
v = -y;
}
// Nach:
0<=u
//
and u*v=x*y
OO Programmierung, 02(ET+MB+WET)
Beispiel:
Anweisung korrekt bzgl.
(Inv) ∧ (Bedingung) und Inv ist
// Vor: z=0, u=x, 0<=u
while (u != 0)
// Inv: z+u*y=x*y, 0<=u
// GM: u
{
z = z + y;
u = u - 1;
}
// Nach: z=x*y
sowie
((Inv) ∧ ¬(Bedingung))→(N ach) gilt
und GM geeignetes Größenmaß ist,
dann ist
while (Bedingung) Anweisung
korrekt bzgl. V or und N ach.
korrekt bzgl. V or und N ach.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
50
OO Programmierung, 02(ET+MB+WET)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
52
OO Programmierung, 02(ET+MB+WET)
zu II. 3. 4. Beschreibung des Programmverhaltens
mittels Zusicherungen
endgeprüfte Schleife
Wenn
Anweisung korrekt bzgl. V or und Inv ist
und Anweisung korrekt bzgl.
(Inv) ∧ (Bedingung) und Inv ist
Beispiel:
// Vor: z=0, u=x, 0<u
do {
z = z + y;
u = u - 1;
}
// Inv: z+u*y=x*y, 0<=u
// GM: u
while (u != 0)
// Nach: z=x*y
sowie
((Inv) ∧ ¬(Bedingung))→(N ach) gilt
und GM geeignetes Größenmaß ist,
dann ist
do Anweisung while (Bedingung)
References
[1] J. Goll, C. Weiß, and P. Rothländer. Java als erste Programmiersprache. B. G. Teubner, Stuttgart, Leipzig, 2000.
[2] C. Horn and I. O. Kerner, editors. Lehr- und Übungsbuch Informatik, volume 1. Grundlagen und Überblick. Fachbuchverlag
Leipzig, 1995.
[3] M. Kofler. Linux: Installation, Konfiguration, Anwendung.
Addison-Wesley (Deutschland), 2 edition, 1996.
[4] S. Middendorf, R. Singer, and S. Strobel. Java, Programmierhandbuch und Referenz. dpunkt, 2 edition, 1999.
[5] Nusser. Sicherheit im Internet. xyz, 1998.
[6] U. Petermann. Vorlesungsskript Informatik. Technical report,
HTWK Leipzig, 2000.
korrekt bzgl. V or und N ach.
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
53
OO Programmierung, 02(ET+MB+WET)
Zum Nachlesen
• Einführung in die Programmierung:
[4] umfassendes Buch für objektorientierte Porgrammierung in Java
mit vielen instruktiven Beispielen.
[1] Informatikeinführung mit Java als erster Programmiersprache.
• Einstieg zum Betriebssystem Linux (sehr hilfreich, übertragbar auf
andere UNIX-Versionen und in den umfangreichen Ausführungen
zu freier Software auch auf weitere Betriebssysteme):
[3] u.a. Kapitel 3 und 11
• Grundlagen zum Betriebssystem: [2] Kapitel 3
• außerdem: [6] Kapitel 1
www.imn.htwk-leipzig.de/˜uwe/Teaching/OOP
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
54
OO Programmierung, 02(ET+MB+WET)
U. Petermann, Leipzig University of Applied Sciences, C.S. Dept.
55
OO Programmierung, 02(ET+MB+WET)
Herunterladen