Sie sind auf Seite 1von 3

Prof.

Martin Hofmann, PhD


Dr. Steffen Jost

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

Entscheiden Sie, ob folgende Hoare-Tripel g


ultig sind:

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!

Hinweise: Das Problem mit der Anwendung der Hoare-Regel f


ur While-Schleifen ist, dass
die Formel I nur in den Pr
amissen der Regel (also u
ber dem Strich) auftaucht. Wahrend P ,
Q und der Code durch die Aufgabenstellung schon vorgegeben sind, m
ussen wir I irgendwie
passend w
ahlen. Oft gibt es dazu auch mehrere Moglichkeiten es reicht aber nat
urlich aus,
lediglich eine richtige M
oglichkeit zu finden.
Es ist daher oft zweckm
aig, die Regel R
uckwarts zu rechnen. Die Nachbedingung muss aus
der Negation der Schleifenbedingung und der Invariante herleitbar sein, d.h. wir m
ussen die
Invariante stark genug w
ahlen, damit die Nachbedingung zusammen mit der negierten Schleifenbedingung ausreicht. Danach schaut man, ob die Pramisse stark genug ist, die gewahlte
Invariante zu implizieren. Ist dies nicht der Fall, muss man die Invariante entsprechend abschwachen. Danach pr
uft man, ob diese schwachere Invariante trotzdem noch stark genug ist,
mit der negierten Schleifenbedingung die Nachbedingung herzuleiten, usw.
Zur Erinnerung: Die logische Negation einer Formel A notiert man mit A, die logische UND-Verkn
upfung zweier aussagenlogischer Formeln mit A B, die logische ODERVerkn
upfung A B und die Implikation mit A B (oder auch mit (A) B).
H3-1 Hoare-Tripel II

(3 Punkte; Abgabe: H3-1.txt oder H3-1.pdf)

d) {0 < n + 1 n < m} n = n + 1 {0 < n n m}


e) {n > 0} n = a + b {n = a + b a + b > 0}
f) {z = x + y} if(z%2 == 0) x = x + 1; else y = y + 1; {x + y > z}

H3-2 Hoare-Logik: While-Schleife II


Sei P das folgende Programmst
uck, wobei
a, b, c und n Variablen des Typs int sind.
a = 0;
b = 0;
c = 1;
while (b != n) {
a = a + c;
b = b + 1;
c = c + 6 * b;
}

(6 Punkte; Abgabe: H3-2.txt oder H3-2.pdf)

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.

H3-3 Code Verst


andnis

(0 Punkte; Abgabe: H3-3.txt oder H3-3.pdf)

Gegeben ist das rechts abgedruckte


f
urchterliche Programm. Berechnen Sie
die Ausgabe des f
urchterlichen Programms mit Papier & Bleistift, also ohne
Computer. Geben Sie zus
atzlich Schritt
f
ur Schritt an, welche Variable in welcher Programmzeile welchen absoluten
Wert zugewiesen bekommt (d.h. Angaben wie Zeile 5: x = 28 und nicht Zeile 5: x = y+8).
Beispiel:
F
ur das kleine Programm
10
20
30
40
50
60
70

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

Ubungsbetrieb auf der Vorlesungshomepage (www.tcs.ifi.lmu.de/lehre/ws-2015-16/eip).