Ludwig-Maximilians-Universitat M
unchen
Institut f
ur Informatik
4. November 2015
3. Ubung
zur Vorlesung
Einfu
hrung in die Programmierung
A3-1 Simpler Taschenrechner
Implementieren Sie zum Aufwarmen einen einfachen
Taschenrechner! Es sollen solange Zahlen von der Tastatur eingelesen und aufaddiert werden,
bis der Benutzer den String end eingetippt hat. Beispiel:
Dies ist ein Taschenrechner. (Eingabe "end" zum Beenden)
Zustand: 0 Gib bitte eine ganze Zahl ein: 77
Zustand: 77 Gib bitte eine ganze Zahl ein: -2
Zustand: 75 Gib bitte eine ganze Zahl ein: acht
Das war keine ganze Zahl! (Eingabe "end" zum Beenden)
Zustand: 75 Gib bitte eine ganze Zahl ein: -6
Zustand: 69 Gib bitte eine ganze Zahl ein: end
Endstand ist: 69
Um unnotige Tipparbeit zu ersparen, gibt es auf der Vorlesungshomepage eine unverbindliche
Dateivorlage, welche Sie benutzen k
onnen, wenn Sie wollen.
A3-2 Hoare-Tripel
a) {a + b > 0} n = a + b {n > 0}
b) {i < j} i = i + 3 {i + 3 < j}
c) {n = a + b} c = a + 1; a = b 1; b = c; {n = a + b}
Alle benutzten Variablen sind initalisiert (mit unbekanntem Wert) und haben den Typ int.
A3-3 Hoare-Logik: While-Schleife
Hier ist noch einmal zur Erinnerung die Hoare-Regel f
ur die While-Schleifen von 4-153:
{I b}c{I}
P I
I b Q
{P }while(b)c{Q}
Beweisen Sie durch Anwendung dieser Regel, dass f
ur das Programmfragment
int x = 1;
while (x+y > n) {
x = x + 2;
y = y - x;
}
aus der Vorbedingung {z 69} die Nachbedingung {y < n z > 42} hergeleitet werden kann!
Schleifendurchlauf
0
1
Erganzen Sie in der Tabelle rechts die Werte der Variablen n, a, b und c, und zwar jeweils
am Ende eines Schleifendurchlaufs. Die erste Zeile darin enthalt die Werte von n, a, b und c,
vor Eintritt in die Schleife. F
ur die Tabelle nehmen wir zusatzlich n = 5 an; im Folgendem
ist n aber beliebig.
Zeigen Sie nun die G
ultigkeit des Hoare-Tripels {n > 0} P {a = n3 }!
Hilfestellung: Die Aussage c = (b + 1)3 b3 ist Teil einer moglichen Invariante.
int x = 0;
int y = 3;
for (int i = 1; i <3; i++){
x += y; // Kurz f
ur x=x+y;
}
System.out.println(x);
y = x + 1;
w
urden wir von Ihnen diese Angabe erwarten:
Zeile
10
20
30
40
30
40
30
70
Zuweisung
x=0
y=3
i=1
x=3
i=2
x=6
i=3
y=7
010
020
030
040
050
060
070
080
090
100
110
120
130
140
150
160
170
180
190
200
210
220
230
240
250
260
270
280
290
300
310
int x = 42;
{
int y = 36;
{
while (x > y)
{
int z = x / y;
z*=2;
//Kurz f
ur z=z*2
z++;
//Kurz f
ur z=z+1
y+= z;
//Kurz f
ur y=y+z
if (z<=3)
z*=2;
else
z--;
x++;
};
if (x != y)
if ( x < 44)
y/=2;
else
x/=3;
else
x+=11;
for (int z = 0;z<4;z*=x/y) {
x+=4;
y+=z;
z++;
}
}
System.out.println(x+y);
}
Hinweis: Obwohl diese Aufgabe mit 0 Punkten bewertet wird, ist die Bearbeitung sinnvoll!
Hier werden keine Punkte vergeben, da man sich die Losung leicht durch den Rechner anzeigen
lassen kann. In einer Klausur k
onnte man so eine Aufgabe durchaus mit Punkten bewerten
da dann ja kein Rechner als Hilfsmittel zur Verf
ugung steht.
Abgabe: L
osungen zu den Hausaufgaben konnen bis Dienstag, den 10.11.2015, mit UniworX abgegeben werden. Aufgrund des Klausurbonus m
ussen die Hausaufgaben von Ihnen
alleine gel
ost werden. Abschreiben bei den Hausaufgaben gilt als Betrug und kann zum Ausschluss von der Klausur zur Vorlesung f
uhren. Bitte beachten Sie auch die Hinweise zum