Formale Sprachen und Komplexit¨ at
Sommersemester 2019
Zentral¨ ubung 27.06.2019:
LOOP-, WHILE-, GOTO-Programme
Prof. Dr. David Sabel
LFE Theoretische Informatik
Letzte ¨Anderung der Folien: 27. Juni 2019
LOOP-Programme / LOOP-Berechenbarkeit
Wiederholung:
LOOP-Programme Syntax (informell)
x
i:= x
j± c P
1; P
2LOOP x
iDO P END LOOP-Berechenbarkeit
Totale Funktion f : N
k→ N ist LOOP-berechenbar, wenn es ein LOOP-Programm gibt, dass ausgef¨ uhrt mit Variablenbelegung ρ = {x
17→ n
1, . . . , x
k7→ n
k} mit einer Variablenbelegung ρ
0endet, sodass ρ
0(x
0) = f (n
1, . . . , n
k)
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 2/17 LOOP Programme WHILE & GOTO
LOOP-Programme erstellen
Aufgabe
Zeige, dass die folgenden Funktionen LOOP-berechenbar sind.
Gebe dabei das bezeugende LOOP-Programm vollst¨ andig und ohne Abk¨ urzungen an.
a) +(n
1, n
2) = n
1+ n
2b) −(n
1, n
2) = max{0, n
1− n
2} c) ∗(n
1, n
2) = n
1∗ n
2d) b (n
1, n
2) = n
n12e) = (n
1, n
2) =
1, wenn n
1= n
20, sonst
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 3/17 LOOP Programme WHILE & GOTO
LOOP-Programme erstellen
a) +(n
1, n
2) = n
1+ n
2Beachte: LOOP-Programm empf¨ angt n
1uber ¨ x
1, n
2¨ uber x
2und muss n
1+ n
2in x
0zur Verf¨ ugung stellen.
Idee: Addiere x
2mal 1 zum Wert von x
1. LOOP-Programm:
x
0:= x
1+ 0;
LOOP x
2DO x
0:= x
0+ 1 END
Dieses Programm berechnet +, da
({x17→n1, x27→n2}, x0:=x1+ 0;LOOPx2DOx0:=x0+ 1END)
−−−→
LOOP
({x17→n1, x27→n2, x07→n1},LOOPx2DOx0:=x0+ 1END)
−−−→
LOOP
({x17→n1, x27→n2, x07→n1}, x0:=x0+ 1;. . .;x0:=x0+ 1
| {z }
n2-mal
)
−−−→
LOOP
n2({x07→n1+ 1 +. . .+ 1
| {z }
n2-mal
}, ε) = ({x07→n1+n2}, ε)
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 4/17 LOOP Programme WHILE & GOTO
LOOP-Programme erstellen
b) −(n
1, n
2) = max{0, n
1− n
2}
Idee: Subtrahiere x
2mal 1 vom Wert von x
1. LOOP-Programm:
x
0:= x
1+ 0;
LOOP x
2DO
x
0:= x
0− 1//liefert 0 wenn x
0schon 0 END
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 5/17 LOOP Programme WHILE & GOTO
LOOP-Programme erstellen
c) ∗(n
1, n
2) = n
1∗ n
2Idee: Addiere x
2mal x
1zur 0.
LOOP-Programm (optimiert):
LOOP x
2DO // x
2-mal x
1addieren LOOP x
1DO// x
1-mal 1 addieren
x
0:= x
0+ 1 END
END
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 6/17 LOOP Programme WHILE & GOTO
LOOP-Programme erstellen
d) b (n
1, n
2) = n
n12Idee: Multipliziere x
2mal x
1zur 1, d.h. 1 ·x
1· · · x
1| {z }
x2-mal
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 7/17 LOOP Programme WHILE & GOTO
LOOP-Programme erstellen
e) = (n
1, n
2) =
1, wenn n
1= n
20, sonst
Idee: Berechne −(n
1, n
2) und −(n
2, n
1) und pr¨ ufe, dass beides mal 0 raus kommt.
LOOP-Programm:
x
0:= x
0+ 1;
x
3:= x
1+ 0;
x
4:= x
2+ 0;
LOOP x
2DO x
3:= x
3− 1 END;
LOOP x
1DO x
4:= x
4− 1 END;
LOOP x
3DO x
0:= x
5+ 0 END;
LOOP x
4DO x
0:= x
5+ 0 END
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 8/17 LOOP Programme WHILE & GOTO
LOOP-Programme
Aufgabe
Zeige, dass die Funktion prime(x) =
1, wenn x Primzahl 0, wenn x keine Primzahl LOOP-berechenbar ist. Sie d¨ urfen die Abk¨ urzungen
x
i:= c f¨ ur das Programm, das x
iden Konstantenwert c zuweist
x
i:= x
j∗ x
kf¨ ur das Programm, das x
idas Produkt der Werte von x
jund x
kzuweist
x
i:= x
j== x
kf¨ ur das Programm,das x
iden Wert 0 oder 1 zuweist, jenachdem ob die Werte von x
jund x
kverschieden oder gleich sind.
verwenden.
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 9/17 LOOP Programme WHILE & GOTO
Ideen zum Programm f¨ ur prime
F¨ ur x
1> 2, teste, ob es x
3, x
4gibt mit x
3∗ x
4= x
1und x
3, x
4> 1
F¨ alle x
1≤ 2 werden extra behandelt Obere Grenze f¨ ur x
3, x
4ist eigentlich d √
x
1e Wir nehmen zuviel: x
1, funktioniert immer noch
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 10/17 LOOP Programme WHILE & GOTO
Programm, dass prime(x 1 ) berechnet
LOOP-Programm:
x
0:= 0;
x
2:= x
1− 1;
LOOP x
2DO x
0:= 1 END; // setzt x
0auf 1, wenn x
1> 1 x
3:= 2;
LOOP x
1DO x
4:= 2;
LOOP x
1DO x
5:= x
3∗ x
4; x
6:= x
1== x
5;
LOOP x
6DO x
0:= 0 END; // Produkt gefunden x
4:= x
4+ 1
END;
x
3:= x
3+ 1 END
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 11/17 LOOP Programme WHILE & GOTO
WHILE-Programme / GOTO-Programme
Wiederholung:
WHILE-Programme, Syntax informell x
i:= x
j± c
P
1; P
2LOOP x
iDO P END WHILE x
i6= 0 DO P END GOTO-Programme, Syntax informell Programm M
1: A
1; . . . ; M
n: A
nmit A
ix
i:= x
j± c GOTO M
jIF x
i= 0 THEN GOTO M
jHALT
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 12/17 LOOP Programme WHILE & GOTO
Einfache Programme
Aufgabe
Zeigen, dass die folgenden Funktionen WHILE- und
GOTO-berechenbar sind, indem Sie sowohl ein WHILE- als auch ein GOTO-Programm angeben, welche die Berechenbarkeit bezeugen.
a) f(n
1, n
2) = n
1+ n
2b) f(n
1, n
2) = n
1∗ n
2c) f(n
1, n
2) =
n
1− n
2, wenn n
1≥ n
2undefiniert, sonst
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 13/17 LOOP Programme WHILE & GOTO
Einfache Programme
a) f (n
1, n
2) = n
1+ n
2WHILE-Programm:
x
0:= x
1+ 0;
x
3:= x
2+ 0;
WHILE x
36= 0 DO x
0:= x
0+ 1;
x
3:= x
3− 1 END
GOTO-Programm:
M
1: x
0:= x
1+ 0;
M
2: x
3:= x
2+ 0;
M
3: IF x
3= 0 THEN GOTO M
7; M
4: x
0:= x
0+ 1;
M
5: x
3:= x
3− 1;
M
6: GOTO M
3; M
7: HALT
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 14/17 LOOP Programme WHILE & GOTO
Einfache Programme
b) f (n
1, n
2) = n
1∗ n
2WHILE-Programm:
x
0:= x
0+ 0;
x
3:= x
2+ 0;
WHILE x
36= 0 DO x
4:= x
1+ 0 : WHILE x
46= 0 DO
x
0:= x
0+ 1;
x
4:= x
4− 1;
END
x
3:= x
3− 1;
END
GOTO-Programm:
M
1: x
0:= x
0+ 0;
M
2: x
3:= x
2+ 0;
// Aeussere Berechnung fuer * M
3: IF x
3= 0 THEN GOTO M
11; M
4: GOTO M
7;
M
5: x
3:= x
3− 1;
M
6: GOTO M
3;
// Innere Berechnung fuer + M
7: x
4:= x
1;
M
8: IF x
4= 0 THEN GOTO M
5; M
9: x
0:= x
0+ 1;
M
10: x
4:= x
4− 1;
M
11: GOTO M
8; M
12: HALT
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 15/17 LOOP Programme WHILE & GOTO
Einfache Programme
c) f(n
1, n
2) =
n
1− n
2, wenn n
1≥ n
2undefiniert, sonst WHILE-Programm:
x
0:= x
1+ 0;
x
3:= x
2+ 0;
WHILE x
36= 0 DO
x
4:= x
5+ 1; //x
4:= 1
LOOP x
0DO x
4:= x
5+ 0 END; //IF x
06= 0 THEN x
4:= 0 WHILE x
46= 0 DO x
4:= x
4+ 0 END;
x
0:= x
0− 1;
x
3:= x
3− 1
TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 16/17 LOOP Programme WHILE & GOTO
Einfache Programme
c) f (n
1, n
2) =
n
1− n
2, wenn n
1≥ n
2undefiniert, sonst GOTO-Programm:
M
1: x
0:= x
1+ 0;
M
2: x
3:= x
2+ 0;
M
3: IF x
3= 0 THEN GOTO M
8; M
4: IF x
0= 0 THEN GOTO M
9; M
5: x
0:= x
0− 1;
M
6: x
3:= x
3− 1;
M
7: GOTO M
3; M
8: HALT;
M
9: GOTO M
9TCS | Zentral¨ubung 27.06.2019 | SoSe 2019 17/17 LOOP Programme WHILE & GOTO